【问题标题】:R ggplot, set colour for one geom_line but not anotherR ggplot,为一个geom_line而不是另一个设置颜色
【发布时间】:2017-09-21 16:12:35
【问题描述】:

我有一个包含 2 个名称和每个名称 3 种类型的数据表。

dt = CJ(as.Date(c('2000-01-01','2000-01-02','2000-01-03','2000-01-04')), c('A','B'), c('t1','t2','t3'))
setnames(dt, c('date','name','type'))
dt[, type := paste0(name, type)]
dt[, value := rnorm(n = .N) + (name == 'A')]


date           name type      value
1: 2000-01-01    A  At1  0.3872948
2: 2000-01-01    A  At2 -0.6147802
3: 2000-01-01    A  At3  2.2317864
4: 2000-01-01    B  Bt1  0.4979870
5: 2000-01-01    B  Bt2 -1.7946112
6: 2000-01-01    B  Bt3  0.7247306
7: 2000-01-02    A  At1  0.3148835
8: 2000-01-02    A  At2  0.1124225
9: 2000-01-02    A  At3  1.1758116
10: 2000-01-02    B  Bt1 -0.7068185
11: 2000-01-02    B  Bt2 -1.6968477
12: 2000-01-02    B  Bt3  0.4575144
....

按类型绘制,但按名称着色,所以我们得到 3 条红线和 3 条蓝线

ggplot(dt) + geom_line(aes(x = date, y = value, group = type, col = name))

现在我想添加两行代表每个名称的含义

mdt = dt[, .(value = mean(value)), by = 'name,date']

ggplot(dt) + geom_line(aes(x = date, y = value, group = type, col = name)) + 
  geom_line(data = mdt, aes(x = date, y = value, col = name), size = 1.5)

这将对单条线和平均线使用完全相同的 2 种颜色。如何为平均线指定不同的颜色?

【问题讨论】:

  • 你想对图例做什么?有四种颜色?
  • 理想情况下,我会为平均线使用稍微不同的颜色,所以我只需要两个图例“红色 A,蓝色 B”。但是任何图例配置都可以开始
  • 您只需将颜色参数放在 aes 之外并将其映射到显式颜色:geom_line(data = mdt, aes(x = date, y = value), col = "#000000", size = 1.5)

标签: r ggplot2


【解决方案1】:

用单独的geom_line 层绘制mdt 线并在其中指定颜色。
对于名称 A 绘图均线,使用:geom_line(data = mdt[name == "A"], col = "#ff5a32"),颜色偏红。对于较细的线条,请使用 scale_color_manual 指定相似的颜色。

library(data.table)
library(ggplot2)

mdt <- dt[, .(value = mean(value)), by = .(name, date)]

ggplot(dt, aes(date, value)) + 
    geom_line(aes(group = type, col = name)) + 
    geom_line(data = mdt[name == "A"], col = "#ff5a32", size = 2) +
    geom_line(data = mdt[name == "B"], col = "#475cd3", size = 2) +
    scale_colour_manual(name = "Name", 
                        values = c("#ff987f", "#8c99e4")) +
    labs(x = "Date",
         y = "Value", 
         title = "Change in value over time") +
    theme_classic()

【讨论】:

    猜你喜欢
    • 2021-11-09
    • 2018-06-11
    • 1970-01-01
    • 2021-01-09
    • 2017-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多