ggplot2 和 R - 将自定义颜色应用于长格式的多组直方图

ggplot2 and R - Applying custom colors to a multi group histogram in long format

我制作了一个直方图,显示了我完成的三个激光雷达扫描的每个海拔高度的激光雷达 returns 分布。

我已经将我的数据转换为长格式,使用:

在附图中你可以看到我的三个扫描组的直方图。我目前正在使用 viridis 按扫描组(即变量列中的扫描名称)为直方图着色。但是,我想将图表中的颜色与我已有的颜色相匹配。

我该怎么做?

我想要为我的三个直方图着色的十六进制是:

lightgreen = "#62FE96"
lightred = "#FE206B"
darkpurple = "#62278E"

A link to my data - 'density2'

我当前的代码:

library(tidyverse)
library(viridisLite)
library(viridis)

# histogram
p <- density2 %>%
  ggplot( aes(x=value,color = variable, show.legend = FALSE)) +
  geom_histogram(binwidth = 1, alpha = 0.5, position="identity") +
  scale_color_viridis(discrete =TRUE) +
  scale_fill_viridis(discrete=TRUE) +
  theme_bw() +
  labs(fill="") +
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank())

p + scale_y_sqrt() + theme(legend.position="none") + labs(y = "data pts", x = "elevation (m)")

如有任何帮助,我们将不胜感激!

删除 scale_color_viridisscale_fill_viridis 行 - 这些正在应用 Viridis 色标。替换为 scale_fill_manual(values = c(lightgreen, lightred, darkpurple))。在您的审美映射中,将 color = variable 替换为 fill = variable。对于直方图,color 指的是每个条形轮廓线的颜色,fill 指的是每个条形填充的颜色。

这应该给您留下:

p <- density2 %>%
  ggplot(aes(x = value, fill = variable)) +
  geom_histogram(binwidth = 1, alpha = 0.5, position = "identity") +
  scale_fill_manual(values = c(lightgreen, lightred, darkpurple)) +
  theme_bw() +
  labs(fill = "") +
  theme(panel.grid = element_blank())

p + scale_y_sqrt() + 
  theme(legend.position = "none") +
  labs(y = "data pts", x = "elevation (m)")

我还做了一些其他的清理工作。 show.legend = FALSE 不属于 aes() - 你的 theme(legend.position = "none") 应该处理它。

我没有下载你的数据,把它保存在我的工作目录中,导入到R中,并在上面测试这段代码。如果您需要更多帮助,请以 copy/pasteable 格式 post 一小部分数据(例如,dput(density2[1:20, ]) 用于前 20 行---选择一个合适的子集),我'我们很乐意测试和调整。