如何更改ggplot中的线宽?


127

数据链接:使用 的数据

我的代码:

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)的新结果: 新结果图

我的问题:是否有一种方法可以更精确地控制线宽,以避免在第二个绘图中出现结果?我特别发现它对文档不友好,并且出于发布目的,尤其要包含具有新定义的线宽的图。

最好,伊斯梅尔


9
要更改线宽,只需将参数size = 2添加到geom_line()。
Didzis Elferts

3
只是做了一些实验,看起来像在使用1和2时,大小不必假定整数值。我刚输入1.5并在中间输入了一些值。我不确定像这样的固定值在所有情况下是否都适合您,但至少确实可以调整。
jxramos 2014年

Answers:


127

尽管@Didzis的答案正确,但我将继续介绍几点

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

  • 从数据映射aes(...)中定义的美学,并创建图例。

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

据我所知,您想要的是大小设置为单个值,而不是映射aes()

当您调用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'))

在此处输入图片说明

现在,您可以定义大小以与最终图像大小和设备类型一起使用。


71

线宽ggplot2可以用参数来改变size=geom_line()

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

在此处输入图片说明


2
我已经尝试过您的选择,但是问题是该行变得太粗以至于不能视为文档友好的。当使用aes(size)时,我得到了我添加的第二张图。我希望能够以更系统的方式控制宽度,以便选择最合适的宽度。
iouraich

8
@ smailov83,请勿在对的调用中添加大小aes。请参阅我的回答(或ggplot2解释该书的内容。)
mnel

6
默认值似乎小于size=1,也许0.5,所以size=1我认为使用yield会获得很好的结果。也可以使用十进制数字微调宽度(例如size=1.2)。
里卡多

5

线宽ggplot2可以用参数来改变lwd=geom_line()

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

3

如果要灵活地修改线宽,可以使用“ 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") ) 

3

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.