在R中根据数值绘制颜色

4

我有一个包含 X、Y 和 VALUE 列的数据框。我正在使用 ggplot2 在指定坐标处绘制值。但我希望根据 VALUE 列的自定义范围填充颜色。例如:

VALUE    COLOUR
0 to 2    blue
2 to 5    green
5 to 10   red
10 to 20  yellow
20 to 30  orange
30 to 40  grey
>40       black

如何使用ggplot2为特定值填充特定颜色?

如果需要,我可以对我的数据进行重新采样,并在此之后将每个重新采样的值映射到颜色,例如:

VALUE    RESAMPLED VALUE    COLOUR
0 to 2        10             blue
2 to 5        20             green
5 to 10       30             red
10 to 20      40             yellow
20 to 30      50             orange
30 to 40      60             grey
>40           70             black

但是这段代码没有将值映射到颜色上:
ggplot2::ggplot() + ggmap::theme_nothing() +
ggplot2::geom_tile(data = xyDataFrame, alpha = 0.6, aes(x = X, y = Y, fill=VALUE)) + 
ggplot2::scale_fill_gradientn(colours = c("blue", "green", "red", "yellow", "orange", "grey", "black"))
1个回答

5

您可能需要使用cut在数据框中创建一个额外的变量。

DATA$COLOUR <- cut(DATA$VALUE, c(0, 2, 5, 10, 20, 30, 40, Inf),
    c("blue", "green", "red", "yellow", "orange", "grey", "black"))

1
ggplot2::ggplot() + ggmap::theme_nothing() + ggplot2::geom_tile(data = xyDataFrame, alpha = 0.6, aes(x = X, y = Y, fill=COLOUR))这是在 cut 函数之后的正确用法吗? - Harsh Pensi
哦,没错。这个问题每次都让我苦恼。ggplotCOLOUR 当作了一个美学因素。您还需要更改填充比例尺。使用 scale_fill_manual(value=c("blue", "green", "red", "yellow", "orange", "grey", "black")) 应该可以解决问题。根据 cut 排序因素的方式,您可能需要重新排列颜色的顺序。 - Benjamin
太棒了。完美运行!!!非常感谢 :) `ggplot2::ggplot() + ggmap::theme_nothing()
  • ggplot2::geom_tile(data = xyDataFrame, alpha = 0.6, aes(x = x, y = y, fill=COLOUR))
  • scale_fill_manual(values = c("blue", "green", "red", "yellow", "orange", "grey", "black"))`
- Harsh Pensi
遇到了这个解决方案的问题。如果某个特定范围内没有数据,则绘图会使用其颜色着色下一个可用范围。因此,在我的情况下,如果0到2没有数据,则绘图将2到5着色为蓝色。 - Harsh Pensi
发布了另一个 - http://stackoverflow.com/questions/31716345/r-ggplot2-not-skipping-color-for-a-range-if-there-is-no-data - Harsh Pensi
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接