186 votes

Comment modifier la largeur des lignes dans ggplot ?

Datalink : les données utilisées

Mon code :

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

Mon résultat : Result_Figure

Nouveau résultat avec aes(size=2) : NewResult-Figure

Ma question : Existe-t-il un moyen de contrôler plus précisément la largeur des lignes afin d'éviter le résultat du second tracé ? Je trouve qu'il est particulièrement peu convivial pour les documents, et surtout pour la publication, d'inclure le tracé avec la largeur de ligne nouvellement définie.

le meilleur, ismail

173voto

mnel Points 48160

Alors que @Didzis a le réponse correcte Je vais développer quelques points

L'esthétique peut être définie ou cartographiée dans un appel ggplot.

  • Une esthétique définie dans aes(...) est cartographiée à partir des données, et une légende est créée.

  • Une esthétique peut également être fixée à une seule valeur, en la définissant en dehors de aes().

D'après ce que je sais, ce que vous voulez c'est set à une seule valeur, et non carte dans l'appel à aes()

Lorsque vous appelez aes(size = 2) il crée une variable appelée `2` et l'utilise pour créer la taille, en la mappant à partir d'une valeur constante telle qu'elle est dans un appel à aes (c'est ainsi qu'il apparaît dans votre légende).

En utilisant la taille = 1 (et sans reg_labeller qui est peut-être défini quelque part dans votre 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'))

enter image description here

et avec la taille = 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'))

enter image description here

Vous pouvez maintenant définir la taille pour qu'elle corresponde à la taille finale de l'image et au type de périphérique.

96voto

Didzis Elferts Points 29673

Largeur de la ligne en ggplot2 peut être modifié avec l'argument 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)

enter image description here

15voto

Marcin G Points 131

Largeur de la ligne en ggplot2 peut être modifié avec l'argument lwd= en geom_line() .

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

10voto

Michael Eason Points 81

Il semble aussi que si vous mettez juste le size dans l'argument de la geom_line() mais sans la partie aes() il sera mis à l'échelle de manière appropriée. Au moins, cela fonctionne de cette façon avec geom_density et j'ai eu le même problème.

5voto

Juan Chamie Points 51

Si vous voulez modifier la largeur de la ligne de manière flexible, vous pouvez utiliser "scale_size_manual", c'est la même procédure pour choisir la couleur, le remplissage, l'alpha, 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") )

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X