Estou tentando plotar duas quantidades separadas no mesmo gráfico usando twiny da seguinte maneira:
fig = figure()
ax = fig.add_subplot(111)
ax.plot(T, r, 'b-', T, R, 'r-', T, r_geo, 'g-')
ax.set_yscale('log')
ax.annotate('Approx. sea level', xy=(Planet.T_day*1.3,(Planet.R)/1000), xytext=(Planet.T_day*1.3, Planet.R/1000))
ax.annotate('Geostat. orbit', xy=(Planet.T_day*1.3, r_geo[0]), xytext=(Planet.T_day*1.3, r_geo[0]))
ax.set_xlabel('Rotational period (hrs)')
ax.set_ylabel('Orbital radius (km), logarithmic')
ax.set_title('Orbital charts for ' + Planet.N, horizontalalignment='center', verticalalignment='top')
ax2 = ax.twiny()
ax2.plot(v,r,'k-')
ax2.set_xlabel('Linear speed (ms-1)')
show()
e os dados são apresentados bem, mas estou tendo o problema de o título da figura se sobrepor aos rótulos dos eixos no eixo x secundário, para que fique quase legível (eu queria postar um exemplo de imagem aqui, mas não tenho um representante suficiente o suficiente).
Gostaria de saber se existe uma maneira simples de mudar o título diretamente para cima algumas dezenas de pixels, para que o gráfico pareça mais bonito.
python
matplotlib
title
figure
Magic_Matt_Man
fonte
fonte
Respostas:
Não tenho certeza se é um novo recurso nas versões posteriores do matplotlib, mas pelo menos para a 1.3.1, isso é simplesmente:
Isso também funciona para
plt.suptitle()
, mas não (ainda) paraplt.xlabel()
etc.fonte
labelpad
, veja aqui .title
levou argumentosx
ey
por um longo tempo (desde que me lembro, pelo menos).Esqueça o uso
plt.title
e coloque o texto diretamente complt.text
. Um exemplo exagerado é dado abaixo:fonte
tight_layout
ainda não parece funcionar bem com canais não padrão. Talvez você possa fazer um relatório de bug?title = plt.title(...)
, em seguida, você pode especificar para enquadrar a trama firmemente em torno do título usando a opçãobbox_extra_artists
:figure.savefig(filename, bbox_extra_artists=(title), bbox_inches='tight')
Se você colocar
'\n'
logo após a sequência do título, o gráfico será desenhado logo abaixo do título. Essa pode ser uma solução rápida também.fonte
Eu estava tendo um problema com o rótulo x sobrepondo um título de subtrama; isso funcionou para mim:
antes
depois de
referência:
fonte
Basta usar
plt.tight_layout()
antesplt.show()
. Isso funciona bem.fonte
Você pode usar o pad para este caso:
fonte