Sto usando quadmesh
per creare un semplice diagramma di proiezione polare. Ecco uno script minima che produce fondamentalmente quello che sto cercando di fare:matplotlib posizionamento barra di colore e dimensione
from __future__ import unicode_literals
import numpy as np
import matplotlib.pyplot as plt
def make_plot(data,fig,subplot):
nphi,nt = data.shape
phi_coords = np.linspace(0,np.pi*2,nphi+1) - np.pi/2.
theta_coords = np.linspace(0,np.radians(35),nt+1)
ax = fig.add_subplot(subplot,projection='polar')
ax.set_thetagrids((45,90,135,180,225,270,315,360),(9,12,15,18,21,24,3,6))
ax.set_rgrids(np.arange(10,35,10),fmt='%s\u00b0')
theta,phi = np.meshgrid(phi_coords,theta_coords)
quadmesh = ax.pcolormesh(theta,phi,data)
ax.grid(True)
fig.colorbar(quadmesh,ax=ax)
return fig,ax
a = np.zeros((360,71)) + np.arange(360)[:,None]
b = np.random.random((360,71))
fig = plt.figure()
t1 = make_plot(a,fig,121)
t2 = make_plot(b,fig,122)
fig.savefig('test.png')
Lo script precedente crea una trama che assomiglia a questo:
vorrei che la colorbars a:
- Non sovrapporre l'etichetta 6.
- essere ridimensionato in modo che siano all'incirca della stessa altezza del grafico.
C'è qualche trucco per farlo funzionare correttamente? (Si noti che questo layout non è l'unico che userò, ad esempio potrei usare un layout 1x2 o un layout 4x4 ... Sembra che ci debba essere un modo per ridimensionare la barra dei colori alla stessa altezza del plot associati ...)
Questo funziona (più o meno) per il layout 2x1, ma non per un layout 1x2 (quindi la barra dei colori diventa troppo piccola). Sto davvero cercando una soluzione indipendente dal layout. Per quanto riguarda i miei rcparam, non ne sono sicuro. Non ho alcun file rc (per quanto ne so) e 'print matplotlib.rcParams ['bounding_box_tight']' produce un 'KeyError'. – mgilson
@mgilson Ho la chiave dimenticata, vedi modifica. Penso che il problema fondamentale sia che la casella di delimitazione dell'oggetto 'axes' non si restringe attorno al grafico polare e tutte le lunghezze della barra dei colori sono eliminate dal riquadro di delimitazione sovradimensionato. – tacaswell
Ho ancora un 'KeyError' per' savefig.bbox'. Ho anche provato '[v per v in matplotlib.rcParams.values () se isinstance (v, str) e 'tight' in v]' che mi ha dato una lista vuota. Sto usando la versione 1.1.1. – mgilson