【问题标题】:How to change line width in ggplot?如何更改ggplot中的线宽?
【发布时间】:2013-01-25 12:27:43
【问题描述】:

数据链路: the data used

我的代码:

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

我的结果:

带有 aes(size=2) 的新结果:

我的问题: 有没有办法更精确地控制线宽以避免第二个图中的结果?我特别发现它对文档不友好,对于发布目的来说更是如此,以包含具有新定义的线宽的图。

最好, 伊斯梅尔

【问题讨论】:

  • 要更改线宽,只需将参数 size=2 添加到 geom_line()。
  • 刚刚做了一些实验,看起来 size 不必假设整数值,因为您使用 1 和 2。我刚刚输入 1.5 并得到了介于两者之间的值。我不确定这样的固定值是否在所有情况下都适合您,但它至少看起来是可调的。

标签: r ggplot2 line-plot


【解决方案1】:

虽然@Didzis 有correct answer,但我将扩展几点

美学可以在 ggplot 调用中设置或映射。

  • 在 aes(...) 中定义的美学是从数据中映射出来的,并创建了一个图例。

  • 也可以通过在 aes() 外部定义美学来将其设置为单个值。

据我所知,您想要的是 set 大小为单个值,而不是在对 aes()

的调用中 map

当您调用aes(size = 2) 时,它会创建一个名为`2` 的变量并使用它来创建大小,并将其从一个常量值映射到对aes 的调用中(因此它出现在您的图例中)。

使用 size = 1(并且没有 reg_labeller,它可能在您的脚本中的某处定义)

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

并且大小 = 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'))

您现在可以定义尺寸以与最终图像尺寸和设备类型相匹配。

【讨论】:

    【解决方案2】:

    ggplot2 中的线宽可以通过 geom_line() 中的参数 size= 更改。

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

    【讨论】:

    • 我已经尝试过您的选项,但问题是线条变得太粗而不能被视为文档友好。使用 aes(size) 时,我得到了我添加的第二张图。我希望能够以更系统的方式控制宽度,以便选择最合适的。
    • @smailov83,不要在aes 的调用中添加大小。请参阅我的答案(或 ggplot2 书籍以获得解释。
    • 默认值似乎小于size=1,可能是0.5,所以在我看来使用size=1会产生相当不错的效果。也可以使用十进制数来微调宽度(比如size=1.2)。
    【解决方案3】:

    ggplot2 中的线宽可以通过 geom_line() 中的参数 lwd= 更改。

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

    【讨论】:

      【解决方案4】:

      看起来如果您只是将size 参数放在geom_line() 部分但没有aes() 它将适当地缩放。至少它与geom_density 以这种方式工作,我遇到了同样的问题。

      【讨论】:

        【解决方案5】:

        如果要灵活修改线宽,可以使用“scale_size_manual”,这与拾取颜色、填充、alpha等的过程相同。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-03-23
          • 2022-08-18
          • 1970-01-01
          • 2022-01-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多