2013-10-21 57 views
38

當使用ggplot,我可以設置shape至21-25得到具有對內部(fill)獨立設置和邊界(col)顏色的形狀,像這樣:控制點的邊界厚度

df <- data.frame(id=runif(12), x=1:12, y=runif(12)) 
ggplot(df, aes(x=x, y=y)) + 
    geom_point(aes(fill=id, size=id), colour="black", shape=21) 

enter image description here

然而,我無法找出如何控制形狀的邊界的厚度,或者將它們設置絕對或作爲審美映射。我注意到,如果我設置的lwd值,它會覆蓋size審美:

ggplot(df, aes(x=x, y=y)) + 
    geom_point(aes(fill=id, size=id), colour="black", shape=21, lwd=2) 

enter image description here

如何控制邊框厚度是多少?

回答

37

從版本2.0.0開始,ggplot2,控制點邊框厚度有一個參數。從NEWS.md文件:

geom_point()獲得控制形狀21-25(#1133,@SeySayux)的邊框寬度的筆觸審美。大小和行程是相加的,所以大小= 5和行程= 5的點將具有10mm的直徑。 (#1142)

因此,正確地解決了這個現在是:

df <- data.frame(id=runif(12), x=1:12, y=runif(12)) 
ggplot(df, aes(x=x, y=y)) + 
    geom_point(aes(fill=id, size=id), colour="black", shape=21, stroke = 2) 

Output

+1

你可以添加輸出嗎? – Thomas

+2

爲了將來的兼容性和清晰度,最好說「從版本x.xx開始」而不是「最新版本」。 – Gregor

13

感覺有點哈克,但你可以添加一個「背景」設定點與大小設置爲審美映射加上一些小的常數放大點的邊界。用常量播放以獲得所需的邊框寬度。

您還可以禁用尺寸傳說阻止它顯示在圖形上的傳奇......

ggplot(df, aes(x=x, y=y)) + 
    geom_point(aes(size=id+0.5), colour="black" , show_guide = FALSE)+ 
    scale_size(guide = "none")+ 
    geom_point(aes(fill=id, size=id), colour="black", shape=21) 

enter image description here

+2

也許hackey,但哈德利贊同在Twitter這種方法 –

+1

@NoamRoss你有沒有鏈接那? –

+3

@ Simon101 https://twitter.com/hadleywickham/status/392440209922469888 –

3

另一種解決方案是建立在R和然後導出情節它到一個.svg文件。然後可以使用矢量圖形編輯軟件(例如Inkscape)來改變線寬。這種方法在數據點重疊時特別有用。