Как построить два набора данных с двумя разными цветовыми схемами на одном графике, используя ggplot? - PullRequest
0 голосов
/ 16 апреля 2019

Примечание: поскольку я пишу это, я не могу понять, как вставить изображения, я буду работать над этим после публикации, но если вы запустите приведенный ниже код, вы сможете увидеть графики, которые я говорить о .... извините!

По сути, у меня есть эти два графика, и я хочу, чтобы они были на одном графике (наложены друг на друга), но мне нужно, чтобы они использовали разные цветовые схемы, иначе я не смогу отличить их друг от друга. без труда.

Я посмотрел всюду на этом сайте, и, хотя есть много подобных вопросов, ни один из них не работал так, как мне нужно. Самые близкие, которые я связал ниже, просто знайте, что я прочитал их, и они не решили мои проблемы:

Отдельные цветовые палитры для двух разных групп в ggplot2

R ggplot две цветовые палитры на одном участке

На первом графике используются эти данные (сокращены до 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")

В результате на этом графике:

м4 Точность

Второй граф - это, по сути, те же данные и код, за исключением того, что вместо того, чтобы получать несколько слегка изменяющихся линий на графике, каждая из этих строк в конечном итоге будет одной и той же

данные:

    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» к графику «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, поскольку другие графики никогда не выглядят так хорошо. Просто действительно чувствую, что я поступаю по этому поводу неправильно и могу действительно помочь! Заранее спасибо:)

1 Ответ

0 голосов
/ 16 апреля 2019

Очень сложный вопрос для очень простого ответа. Хотел убрать это из комментариев, но @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")

Просто нужно поработать над добавлением второй легенды сейчас!

...