我目前在R中有这个条形图(创建时ggplot2)

我需要像这样:

我尝试使用RColorBrewer包,但它没有用,因为相应调色板中的最大颜色数量为11.任何想法?
pal <- brewer.pal(11,"RdYlGn")
ggplot(data = bm_mod, aes(x = bm_mod$country, y = bm_mod$V)) +
geom_bar(stat = "identity", colour = pal, fill = pal) + coord_flip() +
labs(y="Under/over valuation in %", x="")
Run Code Online (Sandbox Code Playgroud)
这是数据:链接
更新:我用这段代码再试一次:
ggplot(data = bm_mod, aes(x = country, y = V)) +
geom_bar(stat = "identity", fill = country, show_guide = FALSE) +
coord_flip() + scale_fill_manual(values = colorRampPalette(brewer.pal(11,"RdYlGn"))(nrow(bm_mod))) +
labs(y="Under/over valuation in %", x="")
Run Code Online (Sandbox Code Playgroud)
然而输出看起来很奇怪.这是酿酒商的问题还是其他错误?

几点:
正如Nick所说,你不应该bd_mod$用来引用内部的变量aes().指定的全部内容data = bm_mod是让您不必bm_mod$一次又一次地输入.
其次,你的设置尝试fill = pal有点混乱.指定外部的美学aes()意味着您将其设置为特定值,因此应该仅使用单个值来完成,例如fill = "blue".
你真正想要的是每个x值的不同填充,所以你应该将填充映射到country然后设置颜色方案scale_fill_manual.
当你提出这样的问题时,你应该总是提供一个可重复的例子.在这种情况下,这将是非常容易的,如下所示:
df <- data.frame(x = letters,y = runif(26))
ggplot(df,aes(x = x,y = y)) +
geom_bar(aes(fill = x),stat = "identity",show_guide = FALSE) +
scale_fill_manual(values = colorRampPalette(brewer.pal(11,"RdYlGn"))(26))
Run Code Online (Sandbox Code Playgroud)
我习惯于colorRampPalette在你想要使用的brewer调色板中插入颜色.
这是一个带有虚假数据的示例。正如亨里克指出的那样,你需要fill=V在美学上进行具体说明。然后您需要一块scale_fill_XXXX来指定您要使用的色阶。
require(ggplot2)
set.seed(100)
fake.data = data.frame(country = LETTERS, V = runif(26, -40, 40))
fake.data$country = factor(LETTERS, LETTERS[order(fake.data$V)]) # reorder factors
ggplot(data = fake.data, aes(x = country, y = V, fill = V)) +
geom_bar(stat = "identity") +
scale_fill_gradient2(low="red", mid="yellow", high="green") +
coord_flip() +
labs(y="Under/over valuation in %", x="")
Run Code Online (Sandbox Code Playgroud)
产生以下情节:

| 归档时间: |
|
| 查看次数: |
4347 次 |
| 最近记录: |