我有一個圖表,我想在其中為元素的每個組件設定單獨的 alpha 級別。我有一個 geom_rect 元素,用于根據變數“違規”更改顏色和填充。我想分別指定顏色和填充的 alpha。但是,我無法在保持基于“違規”的分組顏色的同時實作這一點。
我有一個像這樣的顏色命名向量,其中名稱與“violation”變數的值匹配:
viol.colors <- c("darkorange", "darkblue")
names(viol.colors) = c("violation.mean", "violation.sd")
示例資料(真實資料有更多列,這就是為什么在繪圖代碼中包含“選擇”):
groups <- data.frame(
violation = rep(c("violation.mean", "violation.sd"), each = 5),
xmin = rep(c(1,1.5), each = 5),
xmax = rep(c(2,3), each = 5),
ymin = rep(c(1,2), each = 5),
ymax = rep(c(1.5, 3), each = 5),
rect.color = rep(c("darkorange", "darkblue"), each = 5)
)
如果我將顏色和填充設定為按“違規”分組,然后使用 scale_fill_manual 設定顏色,則顏色將正確應用于 geom_rect 的這兩個組件。但是,如果我在 aes() 中設定顏色和填充,則無法指定 alpha 級別。
示例 1 - 這應用了基于“違規”變數的正確顏色,但我無法從 aes() 中指定 alpha。
geom_rect(data = groups %>%
group_by(violation) %>%
select(violation, xmin, xmax, ymin, ymax, rect.color) %>%
unique(),
aes(xmin = xmin - 0.75,
xmax = xmax 0.75,
ymin = ymin - (sd *0.15),
ymax = ymax (sd *0.15),
colour = violation,
fill = violation
),
size= 0.25
scale_fill_manual(values = viol.colors, aesthetics = c("color", "fill"))
示例 2 - 如果我在 aes() 之外為 geom_rect 設定顏色并填充,我可以指定 alpha,但不會根據“違規”應用正確的顏色。
geom_rect(data = groups %>%
group_by(violation) %>%
select(violation, xmin, xmax, ymin, ymax, rect.color) %>%
unique(),
aes(xmin = xmin - 0.75,
xmax = xmax 0.75,
ymin = ymin - (sd *0.15),
ymax = ymax (sd *0.15),
group = violation
),
size= 0.25,
fill = alpha("darkorange", .05),
colour = alpha("darkorange", .5)
scale_fill_manual(values = viol.colors, aesthetics = c("color", "fill"))
在我看來,最簡單的方法應該是結合這兩種方法并將以下代碼放在 aes() 中。但是,這會引發錯誤。
fill = alpha(violation, .05),
colour = alpha(violation, .5)
任何有關如何實作這一點的見解將不勝感激,我已經嘗試了許多不同的版本,但都沒有成功。
uj5u.com熱心網友回復:
解決此問題的一種方法是將 alpha 編碼為您想要的顏色,方法是指定十六進制顏色,最后兩位數字表示 alpha 值。您可以在許多在線計算器中查找這些值。
例如,如果您想要不透明度為 5% 的深藍色(“#00008b”,我查找它的地方),您可以在末尾附加“0D”,代表 13(255 的 5%)。scale_color_identity然后使用您添加到資料中的顏色名稱來輸出該特定顏色。如果您以十六進制指定顏色,您還可以獲得為其指定 alpha 的附加選項。

uj5u.com熱心網友回復:
您可以使用這些功能來
uj5u.com熱心網友回復:
我確實想出了一個解決方案。這似乎有點hacky,我暫時不會接受這個作為答案,但我想分享它。在我之前的代碼中,我過濾了 ggplot 代碼中的“組”資料。我將其更改為在代碼中的其他地方最初生成資料時發生。這允許我根據“組”資料集的列值設定“填充”和“顏色”的值。
資料:
groups <- data.frame(
violation = rep(c("violation.mean", "violation.sd"), each = 5),
xmin = rep(c(1,1.5), each = 5),
xmax = rep(c(2,3), each = 5),
ymin = rep(c(1,2), each = 5),
ymax = rep(c(1.5, 3), each = 5),
rect.color = rep(c("darkorange", "darkblue"), each = 5)
)
然后,僅在此處過濾到唯一值,而不是在 ggplot 代碼中
groups <- groups %>%
group_by(violation) %>%
unique()
現在,我可以在 aes() 之外的“color”和“fill”中使用“rect.color”的列值,因為 groups$rect.color 現在具有與生成的 geom_rect 元素數量相同的長度。
geom_rect_pattern(data = groups,
aes(xmin = xmin - 0.75,
xmax = xmax 0.75,
ymin = ymin - (sd *0.15),
ymax = ymax (sd *0.15),
group = violation,
),
size= 0.25,
color = alpha(groups$rect.color, .5),
fill = alpha(groups$rect.color, .05)
我知道這可能不是實作這一目標的最佳方式,但它確實有效。如果有人有更好的方法或可以對此進行改進,我會接受它作為答案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/371916.html
上一篇:由于“沒有選項-Wunused-command-line-argument”錯誤,CMakeLists.txt生成的makefile在MacOs上作業,但在linux上不起作用
