如何在 ggplot lineplot 中用相似颜色为多个子类着色?
How to colour multiple subclasses with similar colours in ggplot lineplot?
所以,就像问题中一样,我有这个数据框,它也被绘制出来了:
library("ggplot2")
set.seed(1278)
classes <- c("a1", "a2", "a3", "a4", "b1", "b2", "b3", "b4", "b5", "c1", "c2", "c3")
kinds <- c("WWW", "XXX", "YYY", "ZZZ", "QQQ", "VVV")
values <- seq(1:100)
vK <- vector()
vC <- vector()
vals <- vector()
for (k in kinds) {
vK <- append(vK, rep(k, length(classes)))
vC <- append(vC, classes)
vals <- append(vals, sample(values, length(classes), replace=T))
}
df <- cbind.data.frame(vC, vK, vals)
colnames(df) <- c("class", "kind", "value")
ggplot(data=df, aes(x=kind, y=value, group=class, color=class)) + geom_line()
问题是每个 class 都由反映数字的不同颜色表示,即 subclass,在变量中,即 a1、a2 等。我需要的是用相似的颜色绘制每个 class。在这个例子中,我们有 3 个实际的 classes,即 "a"、"b" 和 "c"。有没有办法为 subclasses 1, 2, 3..., "b" 用不同的红色阴影着色 "a"具有不同的蓝色色调等...
我尝试过类似的方法,但没有成功,因为 classes 丢失了 subclasses
:
df$class <- as.factor(gsub("1|2|3|4|5|6|7|8|9|0", "", df$class))
ggplot(data=df, aes(x=kind, y=value, group=class, color=class)) + geom_line()
也就是说我需要保留子classes.
我也对不同的情节持开放态度!
你的做法是对的。只需添加两个附加变量,一个用于 super-class,一个用于 subclass。例如,您想到的 subclasses 的阴影可以使用 alpha
美学实现。试试这个:
library("ggplot2")
set.seed(1278)
classes <- c("a1", "a2", "a3", "a4", "b1", "b2", "b3", "b4", "b5", "c1", "c2", "c3")
kinds <- c("WWW", "XXX", "YYY", "ZZZ", "QQQ", "VVV")
values <- seq(1:100)
vK <- vector()
vC <- vector()
vals <- vector()
for (k in kinds) {
vK <- append(vK, rep(k, length(classes)))
vC <- append(vC, classes)
vals <- append(vals, sample(values, length(classes), replace=T))
}
df <- cbind.data.frame(vC, vK, vals)
colnames(df) <- c("class", "kind", "value")
df$class1 <- as.factor(gsub("[0-9]", "", df$class))
df$subclass1 <- as.factor(gsub("[a-z]", "", df$class))
df$subclass1 <- as.numeric(df$subclass1)
ggplot(data=df, aes(x=kind, y=value, group=class, color=class1, alpha = subclass1)) +
geom_line() +
scale_alpha_continuous(range = c(.5, 1))
由 reprex package (v0.3.0)
于 2020-03-31 创建
所以,就像问题中一样,我有这个数据框,它也被绘制出来了:
library("ggplot2")
set.seed(1278)
classes <- c("a1", "a2", "a3", "a4", "b1", "b2", "b3", "b4", "b5", "c1", "c2", "c3")
kinds <- c("WWW", "XXX", "YYY", "ZZZ", "QQQ", "VVV")
values <- seq(1:100)
vK <- vector()
vC <- vector()
vals <- vector()
for (k in kinds) {
vK <- append(vK, rep(k, length(classes)))
vC <- append(vC, classes)
vals <- append(vals, sample(values, length(classes), replace=T))
}
df <- cbind.data.frame(vC, vK, vals)
colnames(df) <- c("class", "kind", "value")
ggplot(data=df, aes(x=kind, y=value, group=class, color=class)) + geom_line()
问题是每个 class 都由反映数字的不同颜色表示,即 subclass,在变量中,即 a1、a2 等。我需要的是用相似的颜色绘制每个 class。在这个例子中,我们有 3 个实际的 classes,即 "a"、"b" 和 "c"。有没有办法为 subclasses 1, 2, 3..., "b" 用不同的红色阴影着色 "a"具有不同的蓝色色调等...
我尝试过类似的方法,但没有成功,因为 classes 丢失了 subclasses :
df$class <- as.factor(gsub("1|2|3|4|5|6|7|8|9|0", "", df$class))
ggplot(data=df, aes(x=kind, y=value, group=class, color=class)) + geom_line()
也就是说我需要保留子classes.
我也对不同的情节持开放态度!
你的做法是对的。只需添加两个附加变量,一个用于 super-class,一个用于 subclass。例如,您想到的 subclasses 的阴影可以使用 alpha
美学实现。试试这个:
library("ggplot2")
set.seed(1278)
classes <- c("a1", "a2", "a3", "a4", "b1", "b2", "b3", "b4", "b5", "c1", "c2", "c3")
kinds <- c("WWW", "XXX", "YYY", "ZZZ", "QQQ", "VVV")
values <- seq(1:100)
vK <- vector()
vC <- vector()
vals <- vector()
for (k in kinds) {
vK <- append(vK, rep(k, length(classes)))
vC <- append(vC, classes)
vals <- append(vals, sample(values, length(classes), replace=T))
}
df <- cbind.data.frame(vC, vK, vals)
colnames(df) <- c("class", "kind", "value")
df$class1 <- as.factor(gsub("[0-9]", "", df$class))
df$subclass1 <- as.factor(gsub("[a-z]", "", df$class))
df$subclass1 <- as.numeric(df$subclass1)
ggplot(data=df, aes(x=kind, y=value, group=class, color=class1, alpha = subclass1)) +
geom_line() +
scale_alpha_continuous(range = c(.5, 1))
由 reprex package (v0.3.0)
于 2020-03-31 创建