2017-02-20 3 views
2

J'essaie de tracer une légende dans la base R avec les symboles horizontalement et les étiquettes correspondantes sous les symboles de la rangée suivante. La légende sera tracée dans les marges (non incluses dans les données d'exemple). Y at-il un moyen d'utiliser des paramètres graphiques pour résoudre ce problème avec la fonction legend()? Sinon, je vais essayer les étiquettes de texte, mais je préfère une approche plus gérable.Comment puis-je tracer des symboles de légende et des étiquettes sur une ligne différente dans R?

J'ai cet exemple des données:

plot(c(1,2,3,4,5), c(1,2,3,4,5), xlim=c(0,5), ylim=c(0,5), main = "", xlab = "", ylab = "") 

legendEntries <- c(0.05, 0.1, 0.15, 0.2, 0.25) # which values in legend 
legendSizes <- sqrt(legendEntries/pi) * 10 # calculate pch size 
legend(1, 2, title="", horiz = T, legend=legendEntries, col="black", pch=rep(21,5), 
    pt.bg = "#ff166c", pt.cex = legendSizes, bty = "n") 

et que vous voulez créer quelque chose comme ceci:

legend example

Merci!

Paul

(edit: photo ajouté dans le texte et info)

Répondre

0

Vous pouvez tracer des points séparément et texte.

Quelque chose comme:

# Make the basic plot 
    plot(c(1,2,3,4,5), c(1,2,3,4,5), xlim=c(0,5), ylim=c(0,5), main = "", xlab = "", ylab = "") 
    # set up the legend entries and sizes 
    legendEntries <- c(0.05, 0.1, 0.15, 0.2, 0.25) # which values in legend 
    legendSizes <- sqrt(legendEntries/pi) * 10 # calculate pch size 

# plot the legend points 
    points(y = rep(1, 5), x = seq(3,4, 0.25), pch = 21, cex = sqrt(legendEntries/pi) * 10, 
      bg = "#ff166c") 
# plot the text 
    text(y = rep(0.7, 5), x = seq(3,4, 0.25), 
     labels = legendEntries) 

Pour Traçage en dehors de la région de la parcelle (à savoir sur les marges), vous pouvez utiliser le paramètre XPD comme xpd = TRUE:

plot(c(1,2,3,4,5), c(1,2,3,4,5), xlim=c(0,5), ylim=c(0,5), main = "", xlab = "", ylab = "") 

legendEntries <- c(0.05, 0.1, 0.15, 0.2, 0.25) # which values in legend 
legendSizes <- sqrt(legendEntries/pi) * 10 # calculate pch size 

points(y = rep(-0.8, 5), x = seq(1,2, 0.25), pch = 21, cex = sqrt(legendEntries/pi) * 10, 
     bg = "#ff166c", xpd = TRUE) 
text(y = rep(-1, 5), x = seq(1,2, 0.25), 
    labels = legendEntries, xpd = TRUE) 
+0

Merci, mais je suis en train pour tracer la légende dans les marges de l'intrigue. Cela semble fonctionner uniquement dans la zone de la parcelle. Je peux essayer de combiner la partie "tracer le texte" avec une légende(), mais j'espérais qu'il y avait un moyen d'utiliser des paramètres graphiques pour le résoudre. – user134303

+0

Voir une modification à ma réponse – ira

+0

Nice, merci. Je peux travailler avec ça. Puisque la légende que je veux est assez basique, je n'ai pas vraiment besoin de la fonction legend(). – user134303