rggplot2line-plot

How to change line width in ggplot?


Datalink: the data used

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

My result: Result_Figure

Newresult with aes(size=2): NewResult-Figure

My question: Is there a way to control for line width more precisely to avoid the result in the second plot? I particularly find it document-unfriendly, and more so for publishing purposes to include the plot with the newly defined line width.

best, ismail


Solution

  • Whilst @Didzis has the correct answer, I will expand on a few points

    Aesthetics can be set or mapped within a ggplot call.

    As far as I can tell, what you want is to set size to a single value, not map within the call to aes()

    When you call aes(size = 2) it creates a variable called `2` and uses that to create the size, mapping it from a constant value as it is within a call to aes (thus it appears in your legend).

    Using size = 1 (and without reg_labeller which is perhaps defined somewhere in your 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

    and with size = 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

    You can now define the size to work appropriately with the final image size and device type.