答案 0 :(得分:3)
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))
对于要回收col
参数的行,您必须在行和绘图段上使用循环(此处为sapply
)。
答案 1 :(得分:2)
这是一个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();
对于plotly
,只需将ggplot
电话打包在ggplotly
内。
答案 2 :(得分:2)
此答案不会向您展示如何在特定的绘图包中进行,而是显示如何根据您的规范为数据指定随机颜色。这种方法的好处是,它可以让你控制你选择使用哪种颜色。
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
向量以获取颜色。最终输出只是每组的前两行,以显示组内的颜色相同,但组之间的颜色不同。现在应该可以在各种绘图环境中将其作为变量传递。