【问题标题】:How to plot two sets of data with two different color schemes on the same graph using ggplot?如何使用ggplot在同一张图上绘制具有两种不同配色方案的两组数据?
【发布时间】:2019-04-16 19:28:19
【问题描述】:

注意:在我写这篇文章时,我不知道如何插入图片,我会在发布后处理它,但如果你运行下面的代码,你应该能够看到我正在制作的图表在说……对不起!

基本上,我有这两张图,我希望它们位于同一个图上(相互重叠),但我需要它们使用不同的配色方案,否则我将无法将它们区分开来容易地。

我在这个网站上到处查看,虽然有很多类似的问题,但没有一个问题能达到我需要的效果。我在下面链接的最接近的那些,只知道我已经阅读了它们并且它们没有解决我的问题:

Distinct color palettes for two different groups in ggplot2

R ggplot two color palette on the same plot

第一个图使用了这个数据(缩短到 50 行,实际上到了 1000 左右),RuleCount 一遍又一遍地重复 1-14,TrainingPass 上升到大约 60

     RuleCount TrainingPass  m4Accuracy
1           1           -1 0.000000000
2           2           -1 0.000000000
3           3           -1 0.004225352
4           4           -1 0.014225352
5           5           -1 0.022816901
6           6           -1 0.182957746
7           7           -1 0.194507042
8           8           -1 0.207183099
9           9           -1 0.239859155
10         10           -1 0.362394366
11         11           -1 0.430704225
12         12           -1 0.567887324
13         13           -1 0.582535211
14         14           -1 0.602676056
15          1            0 0.000000000
16          2            0 0.000281690
17          3            0 0.006901408
18          4            0 0.018732394
19          5            0 0.031267606
20          6            0 0.202676056
21          7            0 0.215633803
22          8            0 0.231830986
23          9            0 0.262253521
24         10            0 0.373661972
25         11            0 0.440281690
26         12            0 0.573802817
27         13            0 0.588169014
28         14            0 0.608873239
29          1            1 0.000985915
30          2            1 0.014788732
31          3            1 0.032957746
32          4            1 0.071408451
33          5            1 0.113943662
34          6            1 0.276760563
35          7            1 0.290281690
36          8            1 0.303943662
37          9            1 0.335633803
38         10            1 0.438028169
39         11            1 0.501971831
40         12            1 0.625070423
41         13            1 0.637323944
42         14            1 0.658169014
43          1            2 0.000985915
44          2            2 0.015915493
45          3            2 0.030704225
46          4            2 0.076619718
47          5            2 0.119436620
48          6            2 0.280563380
49          7            2 0.294507042
50          8            2 0.308732394

我用这段代码绘制了它:

ggplot(df_m4, aes(x=RuleCount, y=m4Accuracy, group = TrainingPass, color = TrainingPass)) +
  geom_line()+
  scale_color_gradient(low = "green", high = "blue")

得到这张图:

m4 Accuracy

第二张图本质上是相同的数据和代码,除了在图上得到一堆略有不同的线之外,每条线最终都是同一条线

数据:

    RuleCount TrainingPass    Accuracy
1           1           -1 0.000422535
2           2           -1 0.000422535
3           3           -1 0.002676056
4           4           -1 0.005915493
5           5           -1 0.007746479
6           6           -1 0.053239437
7           7           -1 0.059718310
8           8           -1 0.068309859
9           9           -1 0.099859155
10         10           -1 0.197042254
11         11           -1 0.256197183
12         12           -1 0.421971831
13         13           -1 0.440422535
14         14           -1 0.468028169
15          1            0 0.000422535
16          2            0 0.000422535
17          3            0 0.002676056
18          4            0 0.005915493
19          5            0 0.007746479
20          6            0 0.053239437
21          7            0 0.059718310
22          8            0 0.068309859
23          9            0 0.099859155
24         10            0 0.197042254
25         11            0 0.256197183
26         12            0 0.421971831
27         13            0 0.440422535
28         14            0 0.468028169
29          1            1 0.000422535
30          2            1 0.000422535
31          3            1 0.002676056
32          4            1 0.005915493
33          5            1 0.007746479
34          6            1 0.053239437
35          7            1 0.059718310
36          8            1 0.068309859
37          9            1 0.099859155
38         10            1 0.197042254
39         11            1 0.256197183
40         12            1 0.421971831
41         13            1 0.440422535
42         14            1 0.468028169
43          1            2 0.000422535
44          2            2 0.000422535
45          3            2 0.002676056
46          4            2 0.005915493
47          5            2 0.007746479
48          6            2 0.053239437
49          7            2 0.059718310
50          8            2 0.068309859

代码:

ggplot(df_rules_only, aes(x=RuleCount, y=Accuracy, group = TrainingPass, color = TrainingPass)) +
  geom_line() +
  scale_color_gradient(low = "green", high = "blue")

得到这张图:

rules only Accuracy

我了解如何将数据放到同一张图表上。通过组合我的两个数据框并使用下面的代码,我可以将“rules_only”数据添加到“m4”图表中:

ggplot(df_Training, aes(x=ruleCount, y=m4Accuracy, group = training_pass, color = training_pass)) +
  geom_line() +
  scale_color_gradient(low = "green", high = "blue")+
  geom_line(aes(x=ruleCount, y=rulesOnlyAccuracy))

得到这张图:

both_data_sets

问题在于新数据与旧数据完全融合,因为它们具有相同的配色方案。

起初我尝试将它们保持在同一个数据帧中,只是在前面代码的最后一行添加“color = 'orange'”,但这给了我错误:“错误:离散值提供给连续比例”

接下来,我将它们分成您在上面看到的两个数据框,并尝试以这种方式绘制它们:

ggplot(df_m4, aes(x=RuleCount, y=m4Accuracy, group = TrainingPass, color = TrainingPass)) +
  geom_line() +
  scale_color_gradient(low = "green", high = "blue")+
  geom_line(df_rules_only, aes(x=RuleCount, y=Accuracy, color = "orange"))

但我收到错误消息:“错误:mapping 必须由 aes() 创建”

最后两次尝试有点像在黑暗中尝试,因为我找不到其他可以尝试的方法,但我很确定 R 不会那样工作。

我真的更喜欢使用 ggplot 的答案,因为其他图表看起来从来没有那么好。真的觉得我一直在做这一切都错了,真的可以使用一些帮助!提前谢谢你:)

【问题讨论】:

  • 要将几何图形设置为恒定颜色,您需要将 color 移动到 aes() 之外。在您的第二个geom_line() 中将color = "orange" 移出aes() 是否会让您更接近您想要做的事情?你在尝试两个不同的传说吗?
  • omg 可以改变线条的颜色,太棒了!但是,是的,我正在寻找两个传说,如果您不想向我解释,我可以单独查找,但如果它直截了当并且您已经在这里......

标签: r ggplot2 graph colors grouping


【解决方案1】:

一个非常简单的答案非常复杂的问题。想把它从 cmets 中移出,但@aosmith 帮了我。下面的代码让我的第二组数据变成了不同的颜色:

ggplot(df_Training, aes(x=ruleCount, y=m4Accuracy, group = training_pass, color = training_pass)) +
  geom_line() +
  geom_line(aes(x=ruleCount, y=rulesOnlyAccuracy), color = "orange")

现在只需要添加第二个图例!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多