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)の新しい結果: NewResult-Figure

私の質問:2番目のプロットの結果を回避するために線幅をより正確に制御する方法はありますか?私は特に、文書に不親切であると思います。出版目的では、新しく定義された線幅でプロットを含めるのはさらにそうです。

最高、ismail


9
線幅を変更するには、geom_line()に引数size = 2を追加するだけです。
Didzis Elferts 2013

3
いくつか実験を行ったところ、1と2を使用しているため、サイズが整数値を想定する必要がないように見えます。1.5と入力して、その間に何かを得ました。そのような固定値がすべての状況で機能するかどうかはわかりませんが、少なくとも調整可能に見えます。
jxramos 2014年

回答:


127

@Didzisは正解ですが、いくつかの点を詳しく説明します

美学は、ggplot呼び出し内で設定またはマッピングできます。

  • aes(...)内で定義された美学はデータからマッピングされ、凡例が作成されます。

  • 審美性は、aes()の外で定義することにより、単一の値に設定することもできます。

私の知る限り、あなたが望むことにある集合単一の値に大きさではなく、マップへの呼び出し内でaes()

これを呼び出すaes(size = 2)と、呼び出される変数`2`が作成され、それを使用してサイズが作成され、呼び出し先の定数値からマッピングさaesれます(したがって、凡例に表示されます)。

サイズ= 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)を使用すると、追加した2番目のグラフが表示されます。最適な幅を選択できるように、幅をより体系的に制御できるようにしたいと考えています。
iouraich 2013

8
@ smailov83、への呼び出し内にサイズを入れないでくださいaes。私の答え(または参照してくださいggplot2説明のために本を。
mnel

6
デフォルト値はsize=1、おそらくより小さいと思われる0.5のでsize=1、私の意見では非常に良い結果が得られます。10進数を使用して幅を微調整することもできます(たとえばsize=1.2)。
Ricardo

5

の線幅はのggplot2引数lwd=で変更できますgeom_line()

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

3

線幅を柔軟に変更したい場合は、「scale_size_manual」を使用できます。これは、色、塗りつぶし、アルファなどを選択するのと同じ手順です。

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、私は同じ問題を抱えていました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.