[英]Alpha in ggplot geom_linerange determined by number of observations on Mac
我正在使用 geom_linerange 函數繪制一些數據。 根據數據集,這是 5-10 年的日常觀察。
在我的 Mac 上運行腳本時,線范圍 alpha 會根據每個圖中的觀察數量而變化。 但是,我希望所有地塊都具有 alpha=1。 在 geom_linerange 函數中顯式設置 alpha 對繪圖沒有影響 - 當繪制大量觀察值時,顏色仍然是透明的。
當我在 Windows 筆記本電腦上使用完全相同的腳本時,默認 alpha 為 1 時繪圖是正確的。
下面是一個最小的工作示例:
library(ggplot2)
library(gridExtra)
df1 = data.frame(name = c("A","B","C"),
Date = rep(seq(as.Date("2010-01-01"),as.Date("2018-01-01"),by=1),each=3),
value = runif(8769,-1,1))
df2 = data.frame(name = c("A","B","C"),
Date = rep(seq(as.Date("2010-01-01"),as.Date("2014-01-01"),by=1),each=3),
value = runif(4386,-1,1))
df3 = data.frame(name = c("A","B","C"),
Date = rep(seq(as.Date("2010-01-01"),as.Date("2011-01-01"),by=1),each=3),
value = runif(1098,-1,1))
Plot1 = ggplot() +
geom_linerange(data=df1,aes(x=name,ymin=Date,ymax=Date+1,colour=value),size=15) +
scale_colour_gradient2(low="red",mid="white",high="blue",midpoint=0,name = "Value") +
theme_bw() +
coord_flip() +
xlab("Driver") +
ylab("")
Plot2 = ggplot() +
geom_linerange(data=df2,aes(x=name,ymin=Date,ymax=Date+1,colour=value),size=15) +
scale_colour_gradient2(low="red",mid="white",high="blue",midpoint=0,name = "Value") +
theme_bw() +
coord_flip() +
xlab("Driver") +
ylab("")
Plot3 = ggplot() +
geom_linerange(data=df3,aes(x=name,ymin=Date,ymax=Date+1,colour=value),size=15) +
scale_colour_gradient2(low="red",mid="white",high="blue",midpoint=0,name = "Value") +
theme_bw() +
coord_flip() +
xlab("Driver") +
ylab("")
grid.arrange(Plot1,Plot2,Plot3)
下面是我的 Mac 上的輸出。 具有最多觀察值的頂部圖具有最低的 alpha:
以下是我的 Windows 上的輸出 - 如您所見,所有圖都具有 alpha=1:
代碼通過 GitHub 存儲庫傳輸。
不幸的是,我完全不明白為什么會發生這種情況。 這是 Mac 上的預期行為,還是我做錯了什么?
非常感謝!
這是高頻數據與圖形設備之間交互的結果,尤其是其抗鋸齒設置/功能。 在這種情況下,我們嘗試使用(在我下面的示例中)僅約 600 像素的繪圖寬度繪制約 2,900 天的數據。 每個像素代表大約 4 天的數據,抗鋸齒提供了更“模糊”的外觀,而沒有抗鋸齒的繪圖更好地顯示了數據的范圍(以顯示更少的數據為代價;我猜我們正在有效地看到每四天的數據)。
在 Windows 中,我相信 Plot 窗口的默認圖形設備是 Quartz,沒有抗鋸齒。 Plot1+Plot2 在該設置下看起來像這樣:
如果我在 RStudio 全局設置中啟用抗鋸齒,我得到的結果與你的 Mac 結果相似,因為它的默認圖形設備使用抗鋸齒。
獲得目標的最簡單方法是將分辨率提高到足以每天至少提供一個像素; 這樣你就可以代表 100% 的數據並使用你的色標的全部范圍。 您還可以輸出到像svg
這樣的矢量格式,以獲得更高的有效分辨率。
或者,根據您的數據的性質和您要顯示的內容,您可能會在您的日子里取一個滾動平均值(我預計結果將類似於抗鋸齒輸出),或者獲取滾動最大值或最小值或 SD ,或其他一些可以更直接地捕獲您想要的內容的匯總度量,但以更易於理解的時間粒度。 您還可以考慮其他幾何圖形(如折線圖或地平線圖),它們更容易讓讀者映射到值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.