我想制作两个情节。一个显示变量x的箱线图按因子类别1分割,第二个图表相同,但变量y。
我在下面提供了可重现的代码。
require(ggplot2)
dataset <- data.frame(category1 = rep(LETTERS[1:5], 100),
y = rnorm(500, mean = rep(1:5, 100)),
z = rnorm(500, mean = rep(c(1:4,NA), 100)))
ggplot(dataset, aes(x=factor(category1), y=y, fill=category1)) + geom_boxplot()
ggplot(dataset, aes(x=factor(category1), y=z, fill=category1)) + geom_boxplot()
情节很好,除了我想让颜色透过,即使类别1中A的颜色始终与红色相同。我知道ggplot基于色轮除以5,然后分别为4,但是我不知道如何使它总是除以5并且使用相同的颜色,即使没有因子z中的值E,在第二个图中。
答案 0 :(得分:0)
您应手动设置颜色以确保在两个图中使用相同的调色板。以下是默认调色板的示例:
+ scale_fill_manual(values = palette("default"))
包RColorBrewer具有优雅的预定义调色板,您可以在their website上浏览。
library(RColorBrewer)
ggplot(...) +
scale_fill_brewer(palette = "Accent")
答案 1 :(得分:0)
最简单,最优雅的方式是使用scale_fill_discrete
,请参阅下面的示例第二个绘图代码:
ggplot(dataset, aes(x=factor(category1), y=z, fill=category1)) +
geom_boxplot() + scale_fill_discrete(drop=FALSE)
但是,也可以使用以下附加代码完成,这些代码会创建一个用于绘图的调色板,然后手动设置颜色以使用此调色板。该解决方案的好处是允许用户定义任何调色板以用作固定方案。解决方案来自代码here和来自@scoa的答案。
require(ggplot2)
dataset <- data.frame(category1 = rep(LETTERS[1:5], 100),
y = rnorm(500, mean = rep(1:5, 100)),
z = rnorm(500, mean = rep(c(1:4,NA), 100)))
n <- length(levels(dataset$category1))
hues = seq(15, 375, length=n+1)
cpt <- hcl(h=hues, l=65, c=100)[1:n]
ggplot(dataset, aes(x=factor(category1), y=y, fill=category1)) +
geom_boxplot() + scale_fill_manual(values = cpt)
ggplot(dataset, aes(x=factor(category1), y=z, fill=category1)) +
geom_boxplot() + scale_fill_manual(values = cpt)