¿Cómo cambiar el ancho de línea en ggplot?

127

Enlace de datos : los datos utilizados

Mi código:

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'))

Mi resultado: Resultado_Figura

Nuevo resultado con aes (tamaño = 2): NewResult-Figure

Mi pregunta: ¿Hay alguna forma de controlar el ancho de línea con mayor precisión para evitar el resultado en el segundo gráfico? Particularmente me parece poco amigable con los documentos, y más aún para fines de publicación, incluir la trama con el ancho de línea recién definido.

mejor, ismail

iouraich
fuente
9
Para cambiar el ancho de línea, simplemente agregue el tamaño del argumento = 2 a geom_line ().
Didzis Elferts
3
Acabo de experimentar un poco y parece que el tamaño no tiene que asumir valores integrales, ya que está usando 1 y 2. Acabo de ingresar 1.5 y obtuve algo intermedio. No estoy seguro de si un valor fijo como ese funcionaría para usted en todas las circunstancias, pero al menos parece ajustable.
jxramos

Respuestas:

127

Mientras que @Didzis tiene la respuesta correcta , algunos puntos

La estética se puede establecer o asignar dentro de una llamada a ggplot.

  • A partir de los datos se asigna una estética definida dentro de aes (...) y se crea una leyenda.

  • Una estética también se puede establecer en un solo valor, definiéndolo fuera de aes ().

Por lo que puedo decir, lo que desea es establecer el tamaño en un solo valor, no asignar dentro de la llamada aaes()

Cuando lo llama aes(size = 2), crea una variable llamada `2`y la usa para crear el tamaño, asignándola desde un valor constante, ya que está dentro de una llamada aaes (por lo tanto, aparece en su leyenda).

Usando size = 1 (y sin el reg_labellercual quizás esté definido en algún lugar de su 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'))

ingrese la descripción de la imagen aquí

y con talla = 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'))

ingrese la descripción de la imagen aquí

Ahora puede definir el tamaño para que funcione adecuadamente con el tamaño de imagen final y el tipo de dispositivo.

mnel
fuente
71

El ancho de línea en ggplot2se puede cambiar con el argumento size=en geom_line().

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

ingrese la descripción de la imagen aquí

Didzis Elferts
fuente
2
Ya he probado su opción, pero el problema es que la línea se vuelve demasiado gruesa para ser considerada amigable con los documentos. Cuando uso aes (tamaño), obtengo el segundo gráfico que agregué. Quiero poder controlar el ancho de una manera más sistemática para elegir el mejor ajuste.
iouraich
8
@ smailov83, no ponga tamaño dentro de la llamada a aes. Véase mi respuesta (o el ggplot2libro para una explicación.
mnel
66
El valor predeterminado parece ser menor que size=1, tal vez 0.5, por lo que el uso size=1arroja resultados bastante buenos en mi opinión. También se pueden usar números decimales para ajustar el ancho (por ejemplo size=1.2).
Ricardo
5

El ancho de línea en ggplot2se puede cambiar con el argumento lwd=en geom_line().

geom_line(aes(x=..., y=..., color=...), lwd=1.5)
Marcin G
fuente
3

Si desea modificar el ancho de línea de manera flexible, puede usar "scale_size_manual", este es el mismo procedimiento para elegir el color, el relleno, el alfa, etc.

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") ) 
Juan Chamie
fuente
3

También parece que solo pones el sizeargumento en la geom_line()parte, pero sin aes()él se escalará adecuadamente. Al menos funciona de esta manera geom_densityy tuve el mismo problema.

Michael Eason
fuente