Comment changer la largeur de ligne dans ggplot?

127

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 (taille = 2): NouveauRésultat-Figure

Ma question: y a-t-il un moyen de contrôler plus précisément la largeur de la ligne pour éviter le résultat dans le deuxième tracé? Je trouve particulièrement qu'il n'est pas convivial pour les documents, et plus encore à des fins de publication, d'inclure le tracé avec la largeur de ligne nouvellement définie.

mieux, ismail

Iouraich
la source
9
Pour changer la largeur de la ligne, ajoutez simplement l'argument size = 2 à geom_line ().
Didzis Elferts
3
Je viens de faire quelques expériences et il semble que la taille ne doive pas prendre de valeurs intégrales comme vous l'utilisez avec 1 et 2. Je viens d'entrer 1.5 et j'ai quelque chose entre les deux. Je ne sais pas si une valeur fixe comme celle-ci fonctionnerait pour vous dans toutes les circonstances, mais elle semble au moins réglable.
jxramos

Réponses:

127

Bien que @Didzis ait la bonne réponse , je vais développer quelques points

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

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

  • Une esthétique peut également être définie sur une valeur unique, en la définissant en dehors de aes ().

Pour autant que je sache, ce que vous voulez, c'est définir la taille sur une valeur unique, et non mapper dans l'appel àaes()

Lorsque vous l'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(elle apparaît donc dans votre légende).

En utilisant size = 1 (et sans reg_labellerlequel 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'))

entrez la description de l'image ici

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

entrez la description de l'image ici

Vous pouvez maintenant définir la taille pour qu'elle fonctionne correctement avec la taille d'image finale et le type d'appareil.

mnel
la source
71

La largeur de ligne dans ggplot2peut être modifiée avec l'argument size=dans geom_line().

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

entrez la description de l'image ici

Didzis Elferts
la source
2
J'ai déjà essayé votre option, mais le problème est que la ligne devient trop épaisse pour être considérée comme compatible avec les documents. Lorsque vous utilisez l'aes (taille), j'obtiens le deuxième graphique que j'ai ajouté. Je veux pouvoir contrôler la largeur de manière plus systématique afin de choisir le meilleur ajustement.
iouraich
8
@ smailov83, ne mettez pas de taille dans l'appel à aes. Voir ma réponse (ou le ggplot2livre pour une explication.
mnel
6
La valeur par défaut semble être inférieure à size=1, peut-être 0.5, donc l'utilisation size=1donne de très bons résultats à mon avis. On peut également utiliser des nombres décimaux pour affiner la largeur (par exemple size=1.2).
Ricardo
5

La largeur de ligne dans ggplot2peut être modifiée avec l'argument lwd=dans geom_line().

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

Si vous souhaitez 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") ) 
Juan Chamie
la source
3

Il semble également que si vous mettez simplement l' sizeargument dans la geom_line()partie, mais sans le, aes()il sera mis à l'échelle de manière appropriée. Au moins ça marche de cette façon avec geom_densityet j'ai eu le même problème.

Michael Eason
la source