虽然这个问题已经有一段时间了,但我知道我很快就会提取新数据,并希望找到如何用这种技术绘制它的方法。评论和答案中的人似乎有一个做法,但我无法从给我的资料中弄清楚。有其他人想试试吗?
我正在尝试绘制具有许多级别的因子变量的多个条形图。
首先,我生成一个数据框并创建一个因子,按数值大小降序排序(这样图表将从最高到最低移动)。然后,我想生成一个ggplot2对象,在这种情况下可以是gg1。这将自动为每个级别分配颜色并构建柱状图。然后,我创建gg2,它本质上与gg1相同,但排序方式不同。但是,ggplot2根据val
的值自动分配颜色。我需要将颜色映射到字符串name
,以便在多个ggplot对象中可以重复使用。
简而言之,问题是,在下面的示例中,仅轴刻度线值发生更改,而颜色没有发生更改。我尝试使用这里的方法,但没有效果。有什么想法吗?
library(ggplot2)
test1 <- data.frame(name = c('a', 'b', 'c'),
val = 1:3)
test1$name <- factor(test1$name,
levels = as.character(test1$name[order(-test1$val)]))
gg1 <- ggplot(data = test1) + geom_bar(aes(x = name, y = val, fill = val))
gg1
test2 <- data.frame(name = c('a', 'b', 'c'),
val = c(3, 1, 2))
test2$name <- factor(test2$name,
levels = as.character(test2$name[order(-test2$val)]))
gg2 <- ggplot(data = test2) + geom_bar(aes(x = name, y = val, fill = val))
gg2
这是我尝试将链接解决方案中建议的方法融入到代码中的方式:
g <- ggplot_build(gg1)
myPalette <- unique(g$data[[1]]["fill"])[, 1]
gg3 <- ggplot(data = test2) + geom_bar(aes(x = name, y = val, fill = val)) +
scale_fill_manual(values = myPalette)
gg3
val
设置颜色。我理解你的问题,即确保在数据集中a
映射到相同的颜色,但目前你的示例代码并没有很好地表达它。 - Mariusfill
调色板中为我选择实际的颜色映射;我没有提供自己的调色板映射。但我不太确定如何重新表述我的问题... - zap2008