R - Цветной график точек по индексу - PullRequest
0 голосов
/ 28 февраля 2020

Я делаю некоторые сравнения моделей по 3 различным методам моделирования на основе их частоты перекрестной проверки. Я создаю график для отчета, чтобы показать разницу между ошибками в трех методах моделирования. Есть ли способ, которым я могу изменить цвета точек для каждого метода моделирования в соответствии с моей легендой? Все мои значения хранятся в одной переменной.

Входные данные:

 [1] 0.3121693 0.3174603 0.3121693 0.3068783 0.2592593 0.3015873 0.3068783 0.3068783 0.3121693 0.3386243 0.3650794 0.3227513 0.3174603 0.3333333 0.3492063 0.3492063 0.3121693 0.3174603 0.3121693
[20] 0.3015873 0.2751323 0.3015873 0.3015873 0.3068783

Итак:

Модели 1-8 = красный

Модели 9-16 = синий

Модели 17-24 = зеленый

Текущий код:

plot(allcv10,pch=20,xlab="Model Number",ylab="CV Error Rate",main="Comparison of Error Rates");abline(v=c(8.5,16.5));legend("topright", legend=c("LDA", "QDA", "Logistic Regression"),
       col=c("red", "blue","green"), pch=20, cex=0.8)

Текущий график: enter image description here

Ответы [ 3 ]

2 голосов
/ 28 февраля 2020

Я советую вам использовать структуру data.frame, которая позволяет лучше контролировать параметры графика:

allcv10 <- c(0.3121693,
        0.3174603, 0.3121693, 0.3068783, 0.2592593, 0.3015873,
        0.3068783, 0.3068783, 0.3121693, 0.3386243, 0.3650794,
        0.3227513, 0.3174603, 0.3333333, 0.3492063, 0.3492063,
        0.3121693, 0.3174603, 0.3121693, 0.3015873, 0.2751323,
        0.3015873, 0.3015873, 0.3068783
)

colors <- c(rep("red", 8), rep("blue", 8), rep("green", 8))

# length(allcv10) ; length(colors) ;
df_cv <- data.frame(index = 1:length(allcv10), allcv10, colors, stringsAsFactors = FALSE)

plot(x = df_cv$index, y = df_cv$allcv10, pch=20, xlab="Model Number",ylab="CV Error Rate",
     main="Comparison of Error Rates",
     col = df_cv$colors
     );
abline(v=c(8.5,16.5));
legend("topright", legend=c("LDA", "QDA", "Logistic Regression"),
       col=c("red", "blue","green"), pch=20, cex=0.8)

2 голосов
/ 28 февраля 2020

Вы можете добавить очки любого цвета, используя points:

allcv10 <- c(0.3121693, 0.3174603, 0.3121693, 0.3068783, 0.2592593, 0.3015873, 
             0.3068783, 0.3068783, 0.3121693, 0.3386243, 0.3650794, 0.3227513, 
             0.3174603, 0.3333333, 0.3492063, 0.3492063, 0.3121693, 0.3174603,
             0.3121693, 0.3015873, 0.2751323, 0.3015873, 0.3015873, 0.3068783)

plot(allcv10[1:8], pch = 20, xlab = "Model Number", ylab = "CV Error Rate",
     main = "Comparison of Error Rates", xlim = c(1, 24), ylim = c(0.25, 0.37),
     col ="red")
points(9:16, allcv10[9:16], col = "blue", pch = 20)
points(17:24, allcv10[17:24], col = "green", pch = 20)
abline(v = c(8.5, 16.5))
legend("topright", legend = c("LDA", "QDA", "Logistic Regression"),
       col = c("red", "blue", "green"), pch = 20, cex = 0.8)

Создано в 2020-02-28 пакетом представ. (v0.3.0)

1 голос
/ 01 марта 2020

Если данные изменяются, или если добавляется больше моделей или некоторые из них удаляются, вам не нужно менять команды для создания графика. Команды для построения графиков должны работать независимо от каких-либо изменений данных.

Предположим, что это данные.

df_cv
   index   allcv10 Model
1      1 0.3121693     1
2      2 0.3174603     1
3      3 0.3121693     1
4      4 0.3068783     1
5      5 0.2592593     1
6      6 0.3015873     1
7      7 0.3068783     1
8      8 0.3068783     1
9      9 0.3121693     2
10    10 0.3386243     2
11    11 0.3650794     2
12    12 0.3227513     2
13    13 0.3174603     2
14    14 0.3333333     2
15    15 0.3492063     2
16    16 0.3492063     2
17    17 0.3121693     3
18    18 0.3174603     3
19    19 0.3121693     3
20    20 0.3015873     3
21    21 0.2751323     3
22    22 0.3015873     3
23    23 0.3015873     3
24    24 0.3068783     3

Цвета для трех моделей должны быть указаны в виде вектора независимо от данных .

cols <- c("red","green","blue")

Это также облегчит создание легенды.

plot(allcv10~index, data=df_cv, xlab="Model Number", ylab="CV Error Rate",
     main="Comparison of Error Rates", pch=20, 
     col = cols[Model]) # use Model to index the color vector

legend("topright", legend=c("LDA", "QDA", "Logistic Regression"), 
     col = cols, pch=20, cex=0.8)

Если вы хотите изменить цвета, вам нужно только изменить cols вектор, а не данные. И если четвертый тип моделирования (Model=4) входит в драку, то вектор cols можно просто изменить, добавив другой цвет. Команды прорисовки, включая легенду, менять не нужно.

Так работает ggplot. Цвет задается с использованием переменной данных и вектора цвета той же длины, что и число уровней переменной, а не путем указания независимого вектора цвета той же длины, что и переменная.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...