首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在ggplot中为独立图层缩放颜色?

如何在ggplot中为独立图层缩放颜色?
EN

Stack Overflow用户
提问于 2012-10-04 04:55:01
回答 1查看 2.5K关注 0票数 3

我有一个数据集,记录了三座建筑的能源使用情况。我有一个熔化的数据框,可以从菱形集合中模仿:

代码语言:javascript
运行
复制
data <- melt(diamonds[,c('depth','table','cut','color')],id=c('cut','color'))

基本上,我有三个不同建筑(7个“颜色”因素)每个月的采暖(“深度”)和制冷(“表”)数据(“切割”)。我想在每个月的条形图(“切割”)中并排绘制这三个建筑(7个“颜色”因素)。

我希望代表冷却(“表”)或采暖(“深度”)的条根据建筑物(“颜色”因素)改变其阴影,同时保持按月份分组(“剪切”)。这是一种可视化钻石数据的糟糕方式,但对于建筑物来说应该很好,因为它们的供暖和冷却月份通常不会重叠。到目前为止,我有:

代码语言:javascript
运行
复制
p <- ggplot(data,
        aes(color,value,group=cut))
p <- p + geom_bar(stat = 'identity',
              position = 'dodge',
              aes(fill = variable))
print(p)

我试过玩scale_fill_manual,但想不出一个有效的策略:

代码语言:javascript
运行
复制
colours <- c('#0000FF', '#0033FF', '#0066FF', '#FF0000', '#FF3300', '#FF6600')

p <- p + scale_fill_manual(values = colours,
                           group = data$variable)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-04 05:45:50

通过一些小把戏,这是可能的。根据菱形导出数据集非常好,但我想使用较小的数据集

代码语言:javascript
运行
复制
set.seed(1234)
data <-
expand.grid(month = month.abb,
            building = c("Building A", "Building B", "Building C"),
            hc = c("Heating", "Cooling"))
data$value <- rnorm(nrow(data), 60, 10)

您希望您的填充颜色同时基于变量(hc)和建筑物(building),因此将其设置为该交互。

代码语言:javascript
运行
复制
ggplot(data, aes(building,value,group=month)) + 
  geom_bar(stat = 'identity',
           position = 'dodge',
           aes(fill = interaction(building, hc)))

我们可以选择代表不同近色调的颜色,让它们更像你想要的。我使用了RColorBrewer调色板中“蓝色”和“红色”的中间部分。

代码语言:javascript
运行
复制
colours <- c("#FC9272", "#FB6A4A", "#EF3B2C", "#9ECAE1", "#6BAED6", "#4292C6")
# library("RColorBrewer")
# colours <- c(brewer.pal(9,"Reds")[4:6], brewer.pal(9,"Blues")[4:6])

并使用scale_fill_manual来分配这些颜色。

代码语言:javascript
运行
复制
ggplot(data, aes(building,value,group=month)) + 
  geom_bar(stat = 'identity',
           position = 'dodge',
           aes(fill = interaction(building, hc))) +
  scale_fill_manual(values=colours)

真正的诀窍在于让传说变得不那么错综复杂。我只是列出了两个级别(中间的建筑在颜色方面),并给它们不同的名称(和一个不同的标题为图例)。

代码语言:javascript
运行
复制
ggplot(data, aes(building,value,group=month)) + 
  geom_bar(stat = 'identity',
           position = 'dodge',
           aes(fill = interaction(building, hc))) +
  scale_fill_manual("Heating/cooling",
                    values=colours,
                    breaks=c("Building B.Heating", "Building B.Cooling"),
                    labels=c("Heating", "Cooling"))

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12716752

复制
相关文章

相似问题

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