Come rimuovere il divario nella legenda ggplot?

Aug 23 2020

C'è il mio data frame

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 questo è il mio codice, spero di non aver perso alcune informazioni

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

Il risultato che ottengo ha un grande divario tra le variabili e deve essere rimosso

Quello che voglio è il seguente:

Ho modificato il grafico sul pittore per ottenere ciò che voglio, ma è un lavoro faticoso, vorrei avere il codice che possa facilitarmi il processo. Grazie in anticipo.

Risposte

5 chemdork123 Aug 23 2020 at 21:29

Puoi regolare la spaziatura tra le due legende utilizzando una combinazione di due elementi del tema: legend.spacinge legend.margin. Ho giocato un po' con questi e questa combinazione sembra funzionare bene:

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

nota a margine Inoltre, volevo solo notare che quando vuoi mettere insieme due legende, ma hai un titolo, è meglio farlo come hai fatto tu (dove uno dei titoli della legenda è impostato NULLpiuttosto che un carattere vuoto "". NULLrimuove efficacemente il titolo della legenda come elemento e facilita la spaziatura, mentre ""mantiene ancora la spaziatura del titolo, anche se non è rappresentato nulla.Se sostituisci NULLcon ""nel tuo codice, vedrai questo... ottimo lavoro con quello :).

2 AllanCameron Aug 23 2020 at 21:29

Stai solo cercando theme(legend.margin)?

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