Comecei com matplot e gerenciei alguns gráficos básicos, mas agora acho difícil descobrir como fazer algumas coisas que preciso agora :(
Minha pergunta real é como colocar um título global e uma legenda global em uma figura com subtramas.
Estou fazendo subplots 2x3, onde tenho muitos gráficos diferentes em várias cores (cerca de 200). Para distinguir (a maioria) deles, escrevi algo como
def style(i, total):
return dict(color=jet(i/total),
linestyle=["-", "--", "-.", ":"][i%4],
marker=["+", "*", "1", "2", "3", "4", "s"][i%7])
fig=plt.figure()
p0=fig.add_subplot(321)
for i, y in enumerate(data):
p0.plot(x, trans0(y), "-", label=i, **style(i, total))
# and more subplots with other transN functions
(alguma ideia sobre isso? :)) Cada subtrama tem a mesma função de estilo.
Agora estou tentando obter um título global para todos os subenredos e também uma legenda global que explica todos os estilos. Também preciso fazer a fonte pequena para caber em todos os 200 estilos lá (não preciso de estilos completamente únicos, mas pelo menos alguma tentativa)
Alguém pode me ajudar a resolver essa tarefa?
fonte
Respostas:
Título global : Em versões mais recentes de matplotlib, pode-se usar o método Figure.suptitle () de
Figure
:Alternativamente (com base no comentário de @Steven C. Howell abaixo (obrigado!)), Use a função matplotlib.pyplot.suptitle () :
fonte
import matplotlib.pyplot as plt
o comando pode ser digitado simplesmente comoplt.figure(); plt.suptitle('Title centered above all subplots'); plt.subplot(231); plt.plot(data[:,0], data[:,1]);
etc ...Além da resposta orbeckst, pode-se também querer deslocar as subtramas para baixo. Aqui está um MWE no estilo OOP:
dá:
fonte
Para rótulos de legenda pode usar algo como abaixo. Legendlabels são as linhas de plotagem salvas. modFreq é onde o nome dos rótulos reais correspondentes às linhas do gráfico. Então, o terceiro parâmetro é a localização da legenda. Por último, você pode passar qualquer argumento como eu fiz aqui, mas principalmente precisa dos três primeiros. Além disso, você deve fazer isso se definir os rótulos corretamente no comando de plotagem. Basta chamar a legenda com o parâmetro de localização e encontrar os rótulos em cada uma das linhas. Tive mais sorte fazendo minha própria lenda como abaixo. Parece funcionar em todos os casos em que nunca pareceu funcionar corretamente de outra forma. Se você não entender, me avise:
Você também pode usar a perna para alterar o tamanho da fonte ou quase qualquer parâmetro da legenda.
O título global, conforme declarado no comentário acima, pode ser feito com a adição de texto de acordo com o link fornecido: http://matplotlib.sourceforge.net/examples/pylab_examples/newscalarformatter_demo.html
fonte
suptitle
parece o caminho a seguir, mas vale a pena, ofigure
tem umatransFigure
propriedade que você pode usar:fonte