首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有不同颜色调色板的ggplot 2桶图

带有不同颜色调色板的ggplot 2桶图
EN

Stack Overflow用户
提问于 2013-11-21 15:38:34
回答 3查看 7.4K关注 0票数 4

我目前在R(用ggplot2创建)中有这个barplot

我需要这样做:

我试着使用RColorBrewer包,但它没有工作,因为在共同反应调色板的最大颜色是11。有什么想法吗?

代码语言:javascript
复制
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="")

以下是数据:链接

更新:我再次尝试使用以下代码:

代码语言:javascript
复制
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="")

但是,输出看起来很奇怪。这是酿酒厂的问题还是另一个错误?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-21 15:56:48

以下几点:

正如尼克所指出的,您不应该使用bd_mod$来引用aes()中的变量。指定data = bm_mod的全部目的是使您不必一次又一次地输入bm_mod$

其次,您设置fill = pal的尝试有点混乱。在aes()之外指定美学意味着要将其设置为特定值,因此应该只使用单个值,例如fill = "blue"

您真正需要的是对每个x值进行不同的填充,因此您应该将填充映射到country,然后在scale_fill_manual中设置配色方案。

当你问这样的问题时,你应该提供一个可重复的例子。在这种情况下,这是非常容易的,类似这样的事情:

代码语言:javascript
复制
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))

我使用colorRampPalette来插入您想要使用的酿酒调色板中的颜色。

票数 6
EN

Stack Overflow用户

发布于 2013-11-21 17:19:39

下面是一个假数据的例子。正如Henrik所指出的,您需要在美学中指定fill=V。然后,您需要一个scale_fill_XXXX块来指定要使用的颜色刻度。

代码语言:javascript
复制
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="")

这就产生了以下情节:

票数 4
EN

Stack Overflow用户

发布于 2013-11-21 16:06:30

是否足以定义11个间隔并为其分配颜色?试试这个:

代码语言:javascript
复制
intervals <- cut(bm_mod$V, 11)
ggplot(data=bm_mod, aes(x=country, y=V)) + 
    geom_bar(stat="identity", colour=pal[intervals], fill=pal[intervals]) +
        coord_flip() + labs(y="Under/over valuation in %", x="")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20125253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档