为什么ggplot在指定其他颜色时使用默认颜色?

Mat*_*ttT 3 r histogram ggplot2

我试图让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'
Run Code Online (Sandbox Code Playgroud)

开始直方图

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")
Run Code Online (Sandbox Code Playgroud)

结果如下图所示: 在此输入图像描述

我不想使用默认颜色,而是想使用'darkgreen'和'firebrick'.代码中的错误在哪里?感谢您的任何帮助,您可以提供.

Mar*_*pov 5

我认为您不能在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")
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明


And*_*rew 5

你真是太近了!

在上面的代码中,ggplot将您的填充解释为数据集中的变量 - 因子darkgreen和因子firebrick- 并且没有任何方式知道这些标签是颜色,而不是动物物种的名称.

如果添加scale_fill_identity()到绘图的末尾,如下所示,它会将这些字符串解释为颜色(标识),而不是数据的特征.

这种方法的一个好处vs @ 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()
Run Code Online (Sandbox Code Playgroud)