Como remover a lacuna na legenda do ggplot?

Aug 23 2020

Aqui está o meu quadro de dados

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

E este é o meu código, espero não ter perdido nenhuma informação

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

O resultado que obtenho tem uma grande lacuna entre as variáveis ​​e precisa ser removido

O que eu quero é o seguinte:

Editei o gráfico no pintor para obter o que quero, mas é um trabalho cansativo. Gostaria de ter o código que pode facilitar o processo para mim. Desde já, obrigado.

Respostas

5 chemdork123 Aug 23 2020 at 21:29

Você pode ajustar o espaçamento entre as duas legendas usando uma combinação de dois elementos do tema: legend.spacinge legend.margin. Eu brinquei um pouco com eles e essa combinação parece funcionar bem:

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

observação lateral Além disso, gostaria de observar que, quando você deseja espremer duas legendas, mas tem um título, é melhor fazê-lo como você (onde um dos títulos da legenda é definido em NULLvez de um caractere vazio "". NULLremove efetivamente o título da legenda como um elemento e facilita o espaçamento, enquanto ""ainda carrega o espaçamento do título, mesmo que nada seja representado. Se você substituir NULLpor ""no seu código, verá isso... então bom trabalho com isso :).

2 AllanCameron Aug 23 2020 at 21:29

Você está apenas procurando theme(legend.margin)?

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