web-dev-qa-db-fra.com

Comment changer la largeur de ligne dans ggplot?

Liaison de données: 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): NewResult-Figure

Ma question: Existe-t-il un moyen de contrôler plus précisément l'épaisseur du trait pour éviter le résultat dans le deuxième tracé? Je trouve particulièrement inopportun de documenter, et plus encore aux fins de publication, d'inclure le tracé avec la largeur de ligne nouvellement définie.

meilleur, ismail

104
iouraich

Alors que @Didzis a le bonne réponse , je développerai quelques points

L'esthétique peut être définie ou cartographiée dans un appel de 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 définie sur une valeur unique, en la définissant en dehors de aes ().

Autant que je sache, vous souhaitez définir la taille sur une valeur unique et non map 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 se trouve dans un appel à aes (elle apparaît donc dans votre légende).

Utiliser size = 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 fonctionne correctement avec la taille de l'image finale et le type de périphérique.

113
mnel

La largeur de ligne dans ggplot2 peut ê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)

enter image description here

64
Didzis Elferts

Si vous souhaitez modifier la largeur de ligne de manière flexible, vous pouvez utiliser "scale_size_manual", la procédure à suivre pour sélectionner la couleur, le remplissage, l'alpha, etc. est identique.

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

2
Juan Chamie

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

1
Michael Eason