2016-01-06 109 views
8

自從我更新到ggplot版本2.0.0後,我無法重新創建繪圖:看起來我無法像以前那樣減小點的大小,這是繪圖中的問題有很多點。 在下面的例子中,存在plot1和plot2之間的點大小合理的差異,plot3點大小至少是稍微小了一點,但plot3之間plot4有在點的大小沒有區別:ggplot中的點大小2.0.0

df <- data.frame(x=1:10, y=runif(10)) 
pl <- ggplot(df) + 
    geom_point(aes(x,y), size=1) 
ggsave("plot1.png", plot=pl, width=14, height=7, units="cm", dpi=1200) 

pl <- ggplot(df) + 
    geom_point(aes(x,y), size=0.1) 
ggsave("plot2.png", plot=pl, width=14, height=7, units="cm", dpi=1200) 

pl <- ggplot(df) + 
geom_point(aes(x,y), size=0.01) 
ggsave("plot3.png", plot=pl, width=14, height=7, units="cm", dpi=1200) 

pl <- ggplot(df) + 
geom_point(aes(x,y), size=0.001) 
ggsave("plot4.png", plot=pl, width=14, height=7, units="cm", dpi=1200) 

在之前版本的ggplot2中,我使用了0.25的點大小,它看起來比現在小得多,這就是爲什麼我試圖使用新的ggplot2版本進一步降低它的原因。我錯過了新版本代碼的更改嗎?找不到文檔中什麼...

+1

解釋在[2.0.0 ggplot公告](http://blog.rstudio.org/2015/12/ 21/ggplot2-2-0-0 /),我們發現「'geom_point()'現在使用形狀19而不是16」。我不知道這是否是唯一影響點外觀的變化。 – Henrik

+0

是的,我看到了,但沒有找到有關尺寸的任何信息 – silkita

+0

有趣的是 - 使用shape = 16會產生比新形狀= 19小得多的點大小,而shape =「。」實際上是一個正方形而不是一個圓點 – silkita

回答

7

好的,我找到了解決方案。正如@henrik和@silkita所指出的那樣,現在在最新ggplot2版本中,默認形狀從16變爲19。正如你可以在文檔中看到的(例如here),形狀'19'略大於'16'。但這不是2.0.0版本中「點數」較大的原因。綜觀geom-point.R的GGPLOT2來源爲最新的版本中,我們可以看到:

default_aes = aes(
    shape = 19, colour = "black", size = 1.5, fill = NA, 
    alpha = NA, stroke = 0.5 
) 

雖然在以前的版本是:

default_aes <- function(.) aes(shape=16, colour="black", size=2, fill = NA, alpha = NA) 

然後,有小點作爲之前,我們應該把stroke歸零。總之,獲得你應該寫的最小點:

geom_point(size = 0.1) # ggplot2 before 2.0.0 
geom_point(size = 0.1, stroke = 0, shape = 16) # ggplot2 2.0.0 

順便說一句,用最小的點工作時,存在利用不同形狀之間沒有差異(像素仍然是一個像素)。

UPDATE:由於哈德利韋翰指出在Twitter這種變化是在release notes

+1

好的解決方案。有趣的是,他們改變了它。我會說這也許是迴歸。 –

+0

除非我試用它不起作用。並且你鏈接的文檔聲稱'stroke'在'shape = 16'上不起作用。 –

7

嘗試使用形狀參數:

n <- 10000 
df <- data.frame(x=1:n, y=runif(n)) 
pl <- ggplot(df) + 
    geom_point(aes(x,y), size=1,shape=".") + labs(title="shape='.',size=1") 
pl 

產量:

enter image description here

同時:

pl <- ggplot(df) + 
    geom_point(aes(x,y), size=1) + labs(title="size=1") 
pl 

收益率: - (並且對於所有較小尺寸都是相同的)

enter image description here

+0

謝謝,絕對比以前更好,並且有一個很好的解決方法,但我需要更小的點(我在之前的ggplot2版本中),並且想要真正控制點的大小... – silkita

+0

是的,我有類似的問題。應該看看它是否被歸類爲迴歸錯誤。 –

+0

奇怪的是,我突然失去了讚揚。這不是一個糟糕的解決方法。 –