J'essaie de combiner deux figures qui étaient séparées auparavant. On est une figure de 3 panneaux (ax1, ax2, ax3) (tous générés avec imshow
), où j'utilisais une seule carte de couleurs sur le côté. Maintenant, je veux ajouter une autre figure (ax0) que je charge à partir d'un fichier png, en utilisant imread
et get_sample_data
(de matplotlib.cbook
).Matplotlib - deux cartes de couleurs différentes avec des plages différentes
Le problème est que cette nouvelle figure prend la même palette de couleurs que celle des 3 panneaux, donnant ainsi une couleur uniforme simple dans le panneau nouvellement ajouté. Les 3 autres panneaux ont toujours la bonne couleur.
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
import numpy as np
g1 = gridspec.GridSpec(4, 1, height_ratios=[4,1,1,1])
g1.update(wspace=0.05, hspace=0.2) # set the spacing between axes.
f, ((ax0), (ax1), (ax2), (ax3)) = plt.subplots(4, 1, sharex='col', sharey='row')
ax0 = subplot(g1[0])
ax1 = subplot(g1[1])
ax2 = subplot(g1[2])
ax3 = subplot(g1[3])
from matplotlib.cbook import get_sample_data
im2 = plt.imread(get_sample_data('PathToFig/Figure.png'))
ax0.imshow(im2, vmax=1)
ziAA = np.random.rand(4, 4, 4)
ziAB = np.random.rand(4, 4, 4)
ziBA = np.random.rand(4, 4, 4)
ax1.imshow(ziAA,origin="lower",vmin=0,vmax=0.03,aspect="auto",extent=[-0.15,0.15,0,4])
ax2.imshow(ziAB,origin="lower",vmin=0,vmax=0.03,aspect="auto",extent=[-0.15,0.15,0,4])
im = ax3.imshow(ziBA,origin="lower",vmin=0,vmax=0.03,aspect="auto",extent=[-0.15,0.15,0,4])
from matplotlib import ticker
tick_locator = ticker.MaxNLocator(nbins=5)
f.subplots_adjust(right=0.85)
cbar_ax = f.add_axes([1.0, 0.15, 0.01, 0.7])
cbar = f.colorbar(im, cax=cbar_ax)
cbar.locator = tick_locator
cbar.update_ticks()
cbar.solids.set_rasterized(True)
cbar.solids.set_edgecolor("face")
ziAB
, ziBA
et ziAA
ont été générés lors d'un appel précédent griddata
d'interpolation.
J'ai essayé de spécifier deux différentes cartes de couleurs à l'intérieur de chaque appel imshow
, j'ai essayé de changer les valeurs de vmax
. Mais en vain ...
Si je mets ax0
après ax1
-3
, puis, il est ax0 qui obtient les bonnes couleurs, et non ax1
-3
.
J'ai regardé les autres Questions Similaires (Two different color colormaps in the same imshow matplotlib) qui parlent de créer des tableaux masqués ou mon propre colormap, mais en raison de l'origine du fichier png
pour ax0, je ne vois pas vraiment comment je devrais procéder.
EDIT:
données Toy:
ziAA = np.random.rand(4, 4, 4)
ziAB = np.random.rand(4, 4, 4)
ziBA = np.random.rand(4, 4, 4)
figure .png Toy: Avec ce chiffre
, la couleur uniforme se révèle être blanc. Ma figure actuelle donne un rouge uniforme. Cela suggère qu'en réglant correctement vmin, vmax et peut-être d'autres paramètres de contrôle, on pourrait obtenir que le chiffre png s'affiche correctement. Cependant, je serais intéressé par quelque chose qui fonctionnerait pour le chiffre de ... .png
Pouvez-vous inclure (jouet) dans votre exemple qui reproduit le problème? – thomas
Pourriez-vous modifier votre code pour inclure tick_locator? Un exemple pleinement fonctionnel est beaucoup plus susceptible d'encourager les gens à essayer de résoudre votre problème ... – urschrei
En utilisant 'im0 = ax0.imshow (im2, aspect = 'auto', extent = [- 0.15,0.15,0,4])' semble pour donner un beau résultat pour moi: ce n'est pas ce que tu cherches? – stellasia