web-dev-qa-db-fra.com

barre de couleurs matplotlib dans chaque sous-intrigue

Je voudrais ajouter une barre de couleur distincte à chaque sous-intrigue dans un tracé 2x2.

fig , ( (ax1,ax2) , (ax3,ax4)) = plt.subplots(2, 2,sharex = True,sharey=True)
z1_plot = ax1.scatter(x,y,c = z1,vmin=0.0,vmax=0.4)
plt.colorbar(z1_plot,cax=ax1)
z2_plot = ax2.scatter(x,y,c = z2,vmin=0.0,vmax=40)
plt.colorbar(z1_plot,cax=ax2)
z3_plot = ax3.scatter(x,y,c = z3,vmin=0.0,vmax=894)
plt.colorbar(z1_plot,cax=ax3)
z4_plot = ax4.scatter(x,y,c = z4,vmin=0.0,vmax=234324)
plt.colorbar(z1_plot,cax=ax4)
plt.show()

Je pensais que c'est comme ça que tu fais, mais l'intrigue qui en résulte est vraiment foirée; il a juste un fond tout gris et ignore les commandes set_xlim, set_ylim que j'ai (non présentées ici pour plus de simplicité). + il ne montre aucune barre de couleur. Est-ce que c'est la bonne façon de le faire?

J'ai aussi essayé de me débarrasser du "cax = ...", mais ensuite la barre de couleurs va tout sur le tracé en bas à droite et non sur chaque tracé séparé!

24
Cokes

Veuillez regarder ceci page d'exemple de matplotlib . Là, il est montré comment obtenir le tracé suivant avec quatre barres de couleur individuelles pour chaque sous-tracé: enter image description here

J'espère que ça aide.
Vous pouvez également consulter ici , où vous pouvez trouver beaucoup de ce que vous pouvez faire avec matplotlib.

13
user3413108

Cela peut être facilement résolu avec l'utilitaire make_axes_locatable. Je fournis un exemple minimal qui montre comment cela fonctionne et devrait être facilement adaptable:

bar to each image

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

import numpy as np

m1 = np.random.Rand(3, 3)
m2 = np.arange(0, 3*3, 1).reshape((3, 3))

fig = plt.figure(figsize=(16, 12))
ax1 = fig.add_subplot(121)
im1 = ax1.imshow(m1, interpolation='None')

divider = make_axes_locatable(ax1)
cax = divider.append_axes('right', size='5%', pad=0.05)
fig.colorbar(im1, cax=cax, orientation='vertical')

ax2 = fig.add_subplot(122)
im2 = ax2.imshow(m2, interpolation='None')

divider = make_axes_locatable(ax2)
cax = divider.append_axes('right', size='5%', pad=0.05)
fig.colorbar(im2, cax=cax, orientation='vertical');
17
Ramon Martinez

Dans plt.colorbar(z1_plot,cax=ax1), utilisez ax= Au lieu de cax=, C'est-à-dire plt.colorbar(z1_plot,ax=ax1)

13
jayesef

Spécifiez l'argument ax à matplotlib.pyplot.colorbar() , par exemple.

import numpy as np
import matplotlib.pyplot as plt

fig,ax = plt.subplots(2,2)
for i in range(2) :
    for j in range(2) :
         data = np.array([[i,j],[i+0.5,j+0.5]])
         im = ax[i,j].imshow(data)
         plt.colorbar(im,ax=ax[i,j])

plt.show()

enter image description here

1
Patrick Sanan