我正在使用 ggplot2 完成我的資料集的表示,為了清楚起見,我需要一個違反標準 ggplot2“邏輯”的著色方案。下面是一個假資料集,從本質上向您展示我的需求:
df2 <- data.frame(supp=rep(c("VC", "OJ"), each=3),
dose=rep(c("D0.5", "D1", "D2"),2),
len=c(6.8, 15, 33, 4.2, 10, 29.5))
head(df2)
supp dose len
1 VC D0.5 6.8
2 VC D1 15.0
3 VC D2 33.0
4 OJ D0.5 4.2
5 OJ D1 10.0
6 OJ D2 29.5
這是我使用的基本表示,給出了下面的圖:
ggplot(data=df2, aes(x=dose, y=len, fill=supp))
geom_bar(stat="identity", position=position_dodge())

我需要的是僅將預個性化的調色板 ( myPalette <- c("#05eb92", "#119da4", "#ffc857")) 應用于VC系列,同時將系列著色為OC黑色。下面是我需要的預期情節。我知道這種著色方案違背了 ggplot2 的“邏輯”,但我想知道是否有一種簡單的方法可以將它應用到我的需求中。謝謝。

uj5u.com熱心網友回復:
我會dummy在您的輸入中創建一個變數以df2用于ggplot fill美學。這里,“-999”指的是“OJ”,將被涂成黑色。
我還更新了您的myPalette內容以將黑色包含在其中,并且也setNames將其更新為只有“-999”才會具有相應的“黑色”值。
library(tidyverse)
df2 <- data.frame(supp=rep(c("VC", "OJ"), each=3),
dose=rep(c("D0.5", "D1", "D2"),2),
len=c(6.8, 15, 33, 4.2, 10, 29.5))
myPalette <- c("#05eb92", "#119da4", "#ffc857")
myPalette_with_black <- setNames(c(myPalette, "black"),
c(as.character(seq_along(myPalette)), "-999"))
df2 <- df2 %>%
group_by(supp) %>%
mutate(dummy = ifelse(supp == "VC", as.character(row_number()), "-999"))
ggplot(data=df2, aes(x=dose, y=len, fill = dummy))
geom_bar(stat="identity", position=position_dodge())
scale_fill_manual(values = myPalette_with_black)
theme(legend.position = "none")

由reprex 包于 2022-03-12 創建(v2.0.1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/443257.html
上一篇:Y軸刻度標簽彼此重疊
