2016-07-21 9 views
0

Ich verwende AxesGrid in Matplotlib, um ein Diagramm zu erstellen, das zwei IMshow-Plots mit einer separaten Farbleiste nebeneinander für jede Bildfarbpalette überlagert. Während ich in this question/answer sehen kann, dass mit pyplot.colorbar() automatisch die zweite Farbleiste neben der ersten plottet, scheint dies nicht mit AxesGrid zu arbeiten.Kann AxesGrid verwendet werden, um zwei Imshows (Overlays) mit zwei separaten Farbbalken zu plotten?

import matplotlib.pyplot as plt 
    from mpl_toolkits.axes_grid1 import AxesGrid 

    fig = plt.figure(1, facecolor='white',figsize=(10,7.5)) 

    grid = AxesGrid(fig, 111, 
        nrows_ncols=(1, 1), 
        axes_pad=(0.45, 0.15), 
        label_mode="1", 
        share_all=True, 
        cbar_location="right", 
        cbar_mode="each", 
        cbar_size="7%", 
        cbar_pad="2%", 
        ) 

    im = grid[0].imshow(my_image, my_cmap) 
    cbar = grid.cbar_axes[0].colorbar(im) 

    im2 = grid[0].imshow(my_image_overlay, my_cmap2, alpha=0.5) 
    cbar2 = grid.cbar_axes[0].colorbar(im2) 

    plt.show() 

Dies zeigt jedoch nur die zweite Farbleiste. (Vermutlich überlagert die erste). Ich habe versucht, die Polsterung in cbar2 überschrieben mit:

cbar2 = grid.cbar_axes[0].colorbar(im2, pad=0.5) 

aber dies führt zu einem Fehler mit „bekam ein unerwartetes Stichwort Argument‚pad‘“

Gibt es eine Möglichkeit, die zweite colourbar zu kompensieren?

Antwort

0

Ich denke, man kann zwei Achsen für die Farbbalken und sie machen müssen verwenden:

from mpl_toolkits.axes_grid1 import make_axes_locatable 
# create an axes on the right side of ax. The width of cax will be 5% 
# of ax and the padding between cax and ax will be fixed at 0.05 inch. 
divider = make_axes_locatable(ax) 
cax = divider.append_axes("right", size="5%", pad=0.05) 

weil Sie gerade den gleichen zugewiesenen Platz für beide verwenden.