Come modificare la larghezza della linea in ggplot?


127

Datalink: i dati utilizzati

Il mio codice:

ccfsisims <- read.csv(file = "F:/Purdue University/RA_Position/PhD_ResearchandDissert/PhD_Draft/GTAP-CGE/GTAP_NewAggDatabase/NewFiles/GTAP_ConsIndex.csv", header=TRUE, sep=",", na.string="NA", dec=".", strip.white=TRUE)
ccfsirsts <- as.data.frame(ccfsisims)
ccfsirsts[6:24] <- sapply(ccfsirsts[6:24],as.numeric)
ccfsirsts <- droplevels(ccfsirsts)
ccfsirsts <- transform(ccfsirsts,sres=factor(sres,levels=unique(sres)))

library(ggplot2)

#------------------------------------------------------------------------------------------
#### Plot of food security index for Morocco and Turkey by sector
#------------------------------------------------------------------------------------------

#_Code_Begin...

datamortur <- melt(ccfsirsts[ccfsirsts$region %in% c("TUR","MAR"), ]) # Selecting regions of interest
datamortur1 <- datamortur[datamortur$variable %in% c("pFSI2"), ] # Selecting the food security index of interest
datamortur2 <- datamortur1[datamortur1$sector %in% c("wht","gro","VegtFrut","osd","OthCrop","VegtOil","XPrFood"), ] # Selecting food sectors of interest
datamortur3 <- subset(datamortur2, tradlib !="BASEDATA") # Eliminating the "BASEDATA" scenario results  

allfsi.f <- datamortur3
fsi.wht <- allfsi.f[allfsi.f$sector %in% c("wht"), ]

Figure29 <- ggplot(data=fsi.wht, aes(x=factor(sres),y=value,colour=factor(tradlib)))
Figure29 + geom_line(aes(group=factor(tradlib),size=2)) + facet_grid(regionsFull~., scales="free_y", labeller=reg_labeller) + scale_colour_brewer(type = "div") +
theme(axis.text.x = element_text(colour = 'black', angle = 90, size = 13, hjust = 0.5, vjust = 0.5),axis.title.x=element_blank()) + 
ylab("FSI (%Change)") + theme(axis.text.y = element_text(colour = 'black', size = 12), axis.title.y = element_text(size = 12, hjust = 0.5, vjust = 0.2)) + 
theme(strip.text.y = element_text(size = 11, hjust = 0.5, vjust = 0.5, face = 'bold'))

Il mio risultato: Result_Figure

Nuovo risultato con aes (dimensione = 2): NewResult-Figure

La mia domanda: esiste un modo per controllare la larghezza della linea in modo più preciso per evitare il risultato nel secondo grafico? In particolare trovo che non sia utile per i documenti, e soprattutto per scopi di pubblicazione includere la trama con la larghezza della linea appena definita.

meglio, ismail


9
Per modificare la larghezza della linea, aggiungi semplicemente l'argomento size = 2 a geom_line ().
Didzis Elferts

3
Ho appena fatto un po 'di sperimentazione e sembra che le dimensioni non debbano assumere valori integrali poiché stai utilizzando 1 e 2. Ho appena inserito 1.5 e ho ottenuto qualcosa nel mezzo. Non sono sicuro che un valore fisso come quello possa funzionare per te in tutte le circostanze, ma almeno sembra sintonizzabile.
jxramos

Risposte:


127

Sebbene @Didzis abbia la risposta corretta , approfondirò alcuni punti

L'estetica può essere impostata o mappata all'interno di una chiamata ggplot.

  • Un'estetica definita all'interno di aes (...) viene mappata dai dati e viene creata una legenda.

  • Un'estetica può anche essere impostata su un singolo valore, definendolo al di fuori di aes ().

Per quanto ne so, quello che vuoi è impostare la dimensione su un singolo valore, non mappare all'interno della chiamata aaes()

Quando lo chiami aes(size = 2), crea una variabile chiamata `2`e la usa per creare la dimensione, mappandola da un valore costante così com'è all'interno di una chiamata a aes(quindi appare nella tua legenda).

Usando size = 1 (e senza il reg_labellerquale è forse definito da qualche parte nel tuo script)

Figure29 +
    geom_line(aes(group=factor(tradlib)),size=1) +
    facet_grid(regionsFull~., scales="free_y") +
    scale_colour_brewer(type = "div") +
    theme(axis.text.x = element_text(
          colour = 'black', angle = 90, size = 13,
          hjust = 0.5, vjust = 0.5),axis.title.x=element_blank()) +
    ylab("FSI (%Change)") +
    theme(axis.text.y = element_text(colour = 'black', size = 12), 
          axis.title.y = element_text(size = 12, 
          hjust = 0.5, vjust = 0.2)) + 
    theme(strip.text.y = element_text(size = 11, hjust = 0.5,
          vjust =    0.5, face = 'bold'))

inserisci qui la descrizione dell'immagine

e con dimensione = 2

 Figure29 + 
     geom_line(aes(group=factor(tradlib)),size=2) +
     facet_grid(regionsFull~., scales="free_y") + 
     scale_colour_brewer(type = "div") +
     theme(axis.text.x = element_text(colour = 'black', angle = 90,
          size = 13, hjust = 0.5, vjust = 
          0.5),axis.title.x=element_blank()) + 
     ylab("FSI (%Change)") +
     theme(axis.text.y = element_text(colour = 'black', size = 12),
          axis.title.y = element_text(size = 12,
          hjust = 0.5, vjust = 0.2)) + 
      theme(strip.text.y = element_text(size = 11, hjust = 0.5,
          vjust = 0.5, face = 'bold'))

inserisci qui la descrizione dell'immagine

È ora possibile definire la dimensione in modo che funzioni in modo appropriato con la dimensione dell'immagine finale e il tipo di dispositivo.


71

La larghezza della linea in ggplot2può essere modificata con l'argomento size=in geom_line().

#sample data
df<-data.frame(x=rnorm(100),y=rnorm(100))
ggplot(df,aes(x=x,y=y))+geom_line(size=2)

inserisci qui la descrizione dell'immagine


2
Ho già provato la tua opzione, ma il problema è che la linea diventa troppo spessa per essere considerata adatta ai documenti. Quando si utilizza aes (dimensione), ottengo il secondo grafico che ho aggiunto. Voglio essere in grado di controllare la larghezza in modo più sistematico in modo da scegliere la misura migliore.
iouraich

8
@ smailov83, non inserire la dimensione nella chiamata a aes. Vedi la mia risposta (o il ggplot2libro per una spiegazione.
Mnel

6
Il valore predefinito sembra essere inferiore a size=1, forse 0.5, quindi l'uso size=1produce risultati abbastanza buoni secondo me. Si possono anche usare numeri decimali per regolare con precisione la larghezza (diciamo size=1.2).
Ricardo

5

La larghezza della linea in ggplot2può essere modificata con l'argomento lwd=in geom_line().

geom_line(aes(x=..., y=..., color=...), lwd=1.5)

3

Se desideri modificare la larghezza della linea in modo flessibile, puoi utilizzare "scale_size_manual", questa è la stessa procedura per la selezione del colore, riempimento, alfa, ecc.

library(ggplot2)
library(tidyr)

x = seq(0,10,0.05)

df <- data.frame(A = 2 * x + 10,
                 B = x**2 - x*6,
                 C = 30 - x**1.5,
                 X = x)


df = gather(df,A,B,C,key="Model",value="Y")


ggplot( df, aes (x=X, y=Y, size=Model, colour=Model ))+
  geom_line()+
  scale_size_manual( values = c(4,2,1) ) +
  scale_color_manual( values = c("orange","red","navy") ) 

3

Sembra anche che se metti l' sizeargomento nella geom_line()parte ma senza il aes()ridimensionamento, verrà ridimensionato in modo appropriato. Almeno funziona in questo modo geom_densitye ho avuto lo stesso problema.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.