为什么 ggplot 在指定其他颜色时使用默认颜色?
Why is ggplot using default colors when others are specified?
我正在尝试让 ggplot2 将直方图的一行显示为与其余部分不同的颜色。在这一点上我是成功的;但是,当指定不同的集合时,ggplot 使用默认颜色。我确定我的代码中有错误,但我无法确定它在哪里。数据和代码如下:
创建数据
library(ggplot2)
set.seed(71185)
dist.x <- as.data.frame(round(runif(100000, min= 1.275, max= 1.725), digits=2))
colnames(dist.x) <- 'sim_con'
开始直方图
ggplot(dist.x, aes(x = sim_con)) +
geom_histogram(colour = "black", aes(fill = ifelse(dist.x$sim_con==1.55, "darkgreen", "firebrick")), binwidth = .01) +
theme(legend.position="none")
结果如下图:
我不想使用默认颜色,而是想使用 'darkgreen' 和 'firebrick'。代码哪里出错了?感谢您提供的任何帮助。
我认为您不能在 aes
中明确设置颜色;您需要在 scale_fill_manual
中执行此操作,如下例所示:
ggplot(dist.x, aes(x = sim_con)) +
geom_histogram(colour = "black", binwidth = .01,aes(fill=(sim_con==1.55))) +
scale_fill_manual(values=c('TRUE'='darkgreen','FALSE'='firebrick')) +
theme(legend.position="none")
你太接近了!
在您上面的代码中,ggplot 将您的填充解释为数据集中的变量 - 因子 darkgreen
和因子 firebrick
- 并且无法知道这些标签是 颜色,而不是动物种类的名称。
如果您将 scale_fill_identity()
添加到绘图的末尾,如下所示,它会将这些字符串解释为颜色(identity),而不是数据。
这种方法与上面@marat 的出色回答相比的一个好处:如果你有一个复杂的图(比如,使用 geom_segment()
,每个观察值都有一个起始值和一个结束值)并且你想应用数据的两个填充比例(起始值的一个比例和结束值的不同比例)您可以在数据处理步骤中执行条件逻辑,然后使用 scale_fill_identity()
相应地为每个观察值着色。
ggplot(
data=dist.x,
aes(
x = sim_con,
fill = ifelse(dist.x$sim_con==1.55, "darkgreen", "firebrick")
)
) +
geom_histogram(
colour = "black",
binwidth = .01
) +
theme(legend.position="none") +
scale_fill_identity()
我正在尝试让 ggplot2 将直方图的一行显示为与其余部分不同的颜色。在这一点上我是成功的;但是,当指定不同的集合时,ggplot 使用默认颜色。我确定我的代码中有错误,但我无法确定它在哪里。数据和代码如下:
创建数据
library(ggplot2)
set.seed(71185)
dist.x <- as.data.frame(round(runif(100000, min= 1.275, max= 1.725), digits=2))
colnames(dist.x) <- 'sim_con'
开始直方图
ggplot(dist.x, aes(x = sim_con)) +
geom_histogram(colour = "black", aes(fill = ifelse(dist.x$sim_con==1.55, "darkgreen", "firebrick")), binwidth = .01) +
theme(legend.position="none")
结果如下图:
我不想使用默认颜色,而是想使用 'darkgreen' 和 'firebrick'。代码哪里出错了?感谢您提供的任何帮助。
我认为您不能在 aes
中明确设置颜色;您需要在 scale_fill_manual
中执行此操作,如下例所示:
ggplot(dist.x, aes(x = sim_con)) +
geom_histogram(colour = "black", binwidth = .01,aes(fill=(sim_con==1.55))) +
scale_fill_manual(values=c('TRUE'='darkgreen','FALSE'='firebrick')) +
theme(legend.position="none")
你太接近了!
在您上面的代码中,ggplot 将您的填充解释为数据集中的变量 - 因子 darkgreen
和因子 firebrick
- 并且无法知道这些标签是 颜色,而不是动物种类的名称。
如果您将 scale_fill_identity()
添加到绘图的末尾,如下所示,它会将这些字符串解释为颜色(identity),而不是数据。
这种方法与上面@marat 的出色回答相比的一个好处:如果你有一个复杂的图(比如,使用 geom_segment()
,每个观察值都有一个起始值和一个结束值)并且你想应用数据的两个填充比例(起始值的一个比例和结束值的不同比例)您可以在数据处理步骤中执行条件逻辑,然后使用 scale_fill_identity()
相应地为每个观察值着色。
ggplot(
data=dist.x,
aes(
x = sim_con,
fill = ifelse(dist.x$sim_con==1.55, "darkgreen", "firebrick")
)
) +
geom_histogram(
colour = "black",
binwidth = .01
) +
theme(legend.position="none") +
scale_fill_identity()