Comment supprimer le vide dans la légende ggplot ?

Aug 23 2020

Il y a mon bloc de données

Days,Observed,Simulated
0,0,424.8933328
1,1070,1116.781453
2,2360,2278.166227
3,3882,3854.781359
4,5712,5682.090936
5,7508,7565.230044
6,9126,9343.991798
7,10600,10919.17995
8,11893,12249.07067
9,13047,13332.93044
10,14022,14193.53941
11,14852,14863.84784
12,15480,15378.56415
13,16042,15769.6773
14,16362,16064.57556
15,16582,16285.66038
16,16766,16450.70955
17,16854,16573.54275
18,16854,16664.74816

Et ceci est mon code, j'espère que je n'ai pas manqué d'informations

dt <- read.csv('data.csv')
days <- dt$Days Observed <- dt$Observed
Simulated <- dt$Simulated

require(ggplot2)
R <- ggplot(dt, aes(x = days))+geom_line(y=Simulated, color="red", size=0.5)+
  geom_point(y=Observed, color="midnightblue", size=1.75)
a <- geom_line(aes(y = Simulated, col='Simulated'))
n <- geom_point(aes(y = Observed, fill = "Observed"), col='blue')
c <- ggtitle("2.5kg of Placenta & 0.5kg of seed") 
h <- labs(x = 'Time(Days)', y = "Cumulative Biogas Yield(ml)", 
          colour = NULL, fill = "Legend")
o <- theme(plot.title = element_text(hjust = 0.1))+
  theme( plot.title = element_text(colour = "midnightblue"),
         axis.title.x = element_text(colour = "black", size = 14),
         axis.title.y = element_text(colour = "black", size = 14),
         legend.title = element_text(colour = "black", size = 14),
         legend.text = element_text(colour = "black", size = 12.5),
         axis.text.x = element_text(colour = "black", size = 14),
         axis.text.y = element_text(colour = "black", size = 14))
d <- scale_color_manual(values = 'red')
s <- scale_fill_manual(values = 'midnightblue')
Myplot <- R+a+n+c+h+o+d+s
Myplot

Le résultat que j'obtiens a un grand écart entre les variables et doit être supprimé

Ce que je veux c'est comme suit :

J'ai édité le graphique sur le peintre pour obtenir ce que je veux mais c'est un travail fastidieux, j'aimerais avoir le code qui peut faciliter le processus pour moi. Merci d'avance.

Réponses

5 chemdork123 Aug 23 2020 at 21:29

Vous pouvez ajuster l'espacement entre les deux légendes en utilisant une combinaison de deux éléments de thème : legend.spacinget legend.margin. J'ai joué un peu avec ceux-ci et cette combinaison semble bien fonctionner:

Myplot + theme(
    legend.spacing = unit(0,'pt'),
    legend.margin = margin(t=0,b=0,unit='pt')
  )

note latérale Aussi, je voulais juste noter que lorsque vous voulez écraser deux légendes, mais avoir un titre, il est préférable de le faire comme vous l'avez fait (où l'un des titres de légende est défini sur NULLplutôt qu'un caractère vide "". NULLsupprime efficacement le titre de la légende en tant qu'élément et facilite l'espacement, tandis que ""porte toujours l'espacement du titre, même si rien n'est représenté. Si vous remplacez NULLpar ""dans votre code, vous verrez ceci... alors bon travail avec ça :).

2 AllanCameron Aug 23 2020 at 21:29

Vous cherchez juste theme(legend.margin)?

Myplot + theme(legend.margin = margin(0, 0, -10, 0))