Отобразите каждые 10 точек данных в векторе разным цветом в R - PullRequest
0 голосов
/ 06 июня 2018

У меня есть одномерный вектор в R, который я хотел бы изобразить следующим образом: this Каждые 10 точек данных имеют разные цвета.Как мне сделать это в R с нормальной функцией plot, с ggplot и с plotly?

Ответы [ 3 ]

0 голосов
/ 06 июня 2018

в базе R вы можете попробовать это.

Я немного изменил данные по сравнению с другим ответом

# The data
set.seed(2017);
df <- data.frame(x = 1:100, y = 0.001 * 1:100 + runif(100));
nCol <- 10;
df$col <- rep(1:10, each = 10);

# base R plot
plot(df[1:2]) #add `type="n"` to remove the points
sapply(1:nrow(df), function(x) lines(df[x+0:1,1:2], col=df$col[x], lwd=2))

enter image description here

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

0 голосов
/ 06 июня 2018

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

library(dplyr) # assumed okay given ggplot2 mention
df = data_frame(v1=rnorm(100))
n = nrow(df)
df$group = (1:n - (1:n %% -10)) / 10
colors = sample(colors(), max(df$group), replace=FALSE)
df$color = colors[df$group]
df %>% group_by(group) %>% filter(row_number() <= 2) %>% ungroup()
# A tibble: 20 x 3
              v1 group           color
           <dbl> <dbl>           <chr>
 1 -0.6941434087     1 lightsteelblue2
 2 -0.4559695973     1 lightsteelblue2
 3  0.7567737300     2  darkgoldenrod2
 4  0.9478937275     2  darkgoldenrod2
 5 -1.2358486079     3      slategray3
 6 -0.7068140340     3      slategray3
 7  1.3625895045     4        cornsilk
 8 -2.0416315923     4        cornsilk
 9 -0.6273386846     5  darkgoldenrod4
10 -0.5884521130     5  darkgoldenrod4
11  0.0645078975     6   antiquewhite1
12  1.3176727205     6   antiquewhite1
13 -1.9082708004     7           khaki
14  0.2898018693     7           khaki
15  0.7276799336     8     greenyellow
16  0.2601492048     8     greenyellow
17 -0.0514811315     9       seagreen1
18  0.8122600269     9       seagreen1
19  0.0004641533    10   darkseagreen4
20 -0.9032770589    10   darkseagreen4

Приведенный выше код сначала создает поддельный набор данных со 100 строками данных и устанавливает n равным100. df$group устанавливается путем взятия номеров строк (1:n), выполняющих довольно запутанную оценку, чтобы получить вектор чисел, подобный c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, ..., 10).Затем он выбирает цвета, доступные в базе R, возвращая столько цветов, сколько их групп (max(df$group)), а затем используя переменную group, чтобы индексировать вектор color, чтобы получить цвет.Окончательный результат - это только первые две строки каждой группы, чтобы показать, что цвета в группе одинаковы, но различны в разных группах.Теперь это можно будет передавать как переменную в различных графических средах.

0 голосов
/ 06 июня 2018

Вот решение ggplot;к сожалению, вы не предоставляете пример данных, поэтому я генерирую некоторые случайные данные.

# Sample data
set.seed(2017);
df <- data.frame(x = 1:100, y = 0.001 * 1:100 + runif(1000));

# The number of different colours
nCol <- 5;
df$col <- rep(1:nCol, each = 10);

# ggplot
library(tidyverse);
ggplot(df, aes(x = x, y = y, col = as.factor(col), group = 1)) +
    geom_line();

enter image description here

Для plotly просто оберните ggplot звонок в ggplotly.

...