2017-06-07 5 views
7

Le codeComment ajouter des marqueurs à la légende d'un complot Plots.jl?

using Plots 
pyplot(markershape = :auto) 
for i in 1:4 
    plot!(rand(10), label = "Series " * string(i)) 
end 
savefig("Plot.png") 

produit le tracé suivant:

enter image description here

Les marqueurs ne figurent pas dans la légende, seule la couleur de la ligne de la série de données. Cela rend beaucoup plus difficile de faire correspondre les lignes avec les étiquettes de la légende, en particulier pour ceux qui sont daltoniens ou en lisant une impression en noir et blanc. Existe-t-il un moyen d'afficher les marqueurs de tracé ainsi que les couleurs de ligne dans la légende?

Répondre

3

Il y a probablement plus efficace, de façon simple mais vous pouvez essayer tracer la ligne/marqueurs séparément:

using Plots 
pyplot(markershape = :auto) 
for i in 1:4 
    x = rand(10) 
    plot!(x, color=i, marker=false, label="") 
    scatter!(x, color=i, markersize=10, label = "Series " * string(i)) 
end 
savefig("Plot.png") 

plot

label="" supprime l'entrée de légende pour la ligne

color=i veille à ce que la couleur des lignes/marqueurs sont les mêmes

+0

C'est une amélioration, mais idéalement, je voudrais afficher à la fois le marqueur et la ligne dans la légende, pour refléter le plus fidèlement l'intrigue réelle. – tparker

+0

Autre problème avec cette solution: le tracé de ligne incrémente toujours le type de marqueur, donc cette solution parcourt tous les * seconds * marqueurs de tracé, résultant en un ordre différent de marqueurs comme dans un tracé de dispersion seule. Une idée de comment contourner cela? – tparker

+2

Vous avez malheureusement besoin d'utiliser un bidouillage comme celui-ci en ce moment pour que cela fonctionne. Ce serait sympa avec un seriestype qui avait à la fois une ligne et un marqueur, mais pour le moment il n'y en a pas. Vous pouvez ouvrir un problème sur les graphiques :-) –

2

Je suis addi ng une réponse pour la postérité - cela a été corrigé dans les parcelles, donc cela fonctionne:

plot(rand(10,4), markershape = :auto) 

enter image description here

+0

Est-il possible de créer un nuage de points sans dessiner une ligne dans les données, quand pgfplots() est le backend? –

+0

Je l'ai compris, vous devez ajouter '' scatter (rand (10), ligne = (0.0,: bleu,: tiret)) ''. Je pense que cela devrait être par défaut, qu'en pensez-vous? –

+0

Oui, une ligne apparaissant dans la légende avec pgfplots est un bug. –