2017-03-28 10 views
2

Je souhaite ajouter un titre global à un groupe de sous-placettes à l'aide de Plots.jl.Ajout du titre global aux sous-placettes Plots.jl

Idéalement, je voudrais faire quelque chose comme:

using Plots 
pyplot() 
plot(rand(10,2), plot_title="Main title", title=["A" "B"], layout=2) 

mais, selon le Plots.jl documentation, l'attribut plot_title n'a pas encore été mis en œuvre:

Titre de la parcelle (pas les intrigues secondaires) (Remarque: pas encore implémenté)

En attendant, y a-t-il un moyen de contourner le problème?

J'utilise actuellement le backend pyplot, mais je n'y suis pas spécialement lié.

+1

Vous pouvez utiliser une annotation pour mettre du texte. Juste centre là où l'intrigue serait un grand. –

+0

Les annotations, pour autant que je sache, doivent être placées avec des coordonnées de données, et n'apparaissent pas du tout si j'essaie de les placer en dehors d'une intrigue. Ils semblent également s'appliquer à toutes les sous-placettes. Comment je pourrais utiliser un pour faire un titre n'est pas clair pour moi. Qu'est-ce qui me manque? –

+0

Vous étiez en mesure de le faire, je pense, mais actuellement, je ne pense pas que vous le pouvez. @ChrisRackauckas qu'est-ce que vous pensiez faire ici? annoter! annotera toutes les sous-placettes. – pkofod

Répondre

0

Lorsque vous utilisez le backend pyplot, vous pouvez utiliser PyPlot commandes pour modifier un chiffre Plots, cf. Accessing backend specific functionality with Julia Plots.

Pour définir un titre pour toute la figure, vous pouvez faire quelque chose comme:

using Plots 
p1 = plot(sin, title = "sin") 
p2 = plot(cos, title = "cos") 
p = plot(p1, p2, top_margin=1cm) 
import PyPlot 
PyPlot.suptitle("Trigonometric functions") 
PyPlot.savefig("suptile_test.png") 

Il faut appeler explicitement PyPlot.savefig pour voir l'effet des PyPlot fonctions.

Notez que toutes les modifications apportées à l'aide de l'interface PyPlot seront remplacées lorsque vous utiliserez une fonction Plots.

+0

Désolé de prendre si longtemps pour accepter votre réponse: votre exemple fonctionne bien, mais dans mon cas d'utilisation du monde réel, en essayant d'utiliser 'PyPlot.suptitle' fait disparaître le _rest_ de l'intrigue. Je n'ai jamais compris pourquoi. J'ai fini par passer à Gadfly (pas seulement pour ça).Merci de votre aide! –

0

subplots sont des champs du type Plot, et chaque sous-champ a un champ appelé :attr que vous pouvez modifier et display() le tracé. Effectuez les opérations suivantes:

julia> l = @layout([a{0.1h} ;b [c; d e]]) 
Plots.GridLayout(2,1) 

julia> p = plot(randn(100,5),layout=l,t=[:line :histogram :scatter :steppre :bar],leg=false,ticks=nothing,border=false) 

julia> p.subplots 
5-element Array{Plots.Subplot,1}: 
Subplot{1} 
Subplot{2} 
Subplot{3} 
Subplot{4} 
Subplot{5} 

julia> fieldnames(p.subplots[1]) 
8-element Array{Symbol,1}: 
:parent  
:series_list 
:minpad  
:bbox  
:plotarea 
:attr  
:o   
:plt 

julia> for i in 1:length(p.subplots) 
      p.subplots[i].attr[:title] = "subtitle $i" 
     end 

julia> display(p) 

Vous devriez maintenant voir un titre dans chaque subplot

+2

Ce n'est pas du tout ce qu'il demande, mais il veut un titre pour l'ensemble de l'intrigue, puis des sous-titres. – pkofod

+1

Merci pour la réponse, mais @pkofod a raison: je cherche un gros titre au-dessus de tous les sous-répertoires, pas un seul titre pour chaque sous-schéma. –

+0

Désolé pour la réponse hâtive, je travaillais juste sur les titres de sous-parcelles lorsque j'ai vu la question et je n'ai pas réussi à la lire. L'objet 'Figure' de matplotlib a une propriété' suptitle', et bien que vous puissiez y accéder et le définir via p.o [: suptitle], il ne veut pas afficher le titre. – jdev