【问题标题】:Change the colour palette in histogram更改直方图中的调色板
【发布时间】:2012-03-13 16:11:27
【问题描述】:

我正在尝试更改直方图的颜色,但不知道该怎么做,这是我的代码:

qplot(user, count, data=count_group, geom="histogram", fill=group,
            xlab = "users", ylab="count", 
            main="Users")+
    opts(axis.text.x=theme_text(angle=90, hjust=0, size=7))

这是我得到的直方图,但是默认颜色太亮了,

我想使用像this 这样的颜色

我尝试添加该行,但没有成功。

  scale_fill_brewer(palette = palette)

【问题讨论】:

  • 你真的添加了一个名为palette的名字吗?例如。在行尾添加类似+scale_fill_brewer(palette="Blues") 的内容?还是palette 变量包含一些东西?
  • 谢谢@daroczig,我是这样解决的:+scale_fill_manual(values=heat.colors(19)) 19 因为我有 19 个不同的组。
  • 仅供参考,这是条形图而不是直方图。

标签: r colors histogram ggplot2


【解决方案1】:

关于 jbaums 答案的更新。据我所知,使用新的 ggplot2(截至 2014 年 3 月),可以使用以下语法:

p <- qplot(user, count, 
  data = count_group, 
  geom = "histogram", 
  stat = "bin2d",
  fill = group,
  xlab = "users", 
  ylab = "count"
)
p <- p + theme(axis.text.x = element_text(angle = 90, hjust = 0, size = 7))
p <- p + scale_fill_manual(values = cols(ngroups))
p

评论有点长,但不是完整的答案,其余代码由jbaums给出,必须感谢!

【讨论】:

    【解决方案2】:

    如果您想在这么多组中使用 Brewer Set1,您可以执行以下操作:

    library(ggplot2)
    
    count_group <- data.frame(user=factor(rep(1:50, 2)), 
                              count=sample(100, 100, replace=T), 
                              group=factor(rep(LETTERS[1:20], 5)))
    
    library(RColorBrewer)
    cols <- colorRampPalette(brewer.pal(9, "Set1"))
    ngroups <- length(unique(count_group$group))
    qplot(user, count, data=count_group, geom="histogram", fill=group,
          xlab = "users", ylab="count") +
          opts(axis.text.x=theme_text(angle=90, hjust=0, size=7)) +
          scale_fill_manual(values = cols(ngroups))
    


    编辑

    您可以创建和使用多个colorRampPalettes,例如将蓝色分配到 A 到 J 组,将红色分配到 K 到 T 组:

    blues <- colorRampPalette(c('dark blue', 'light blue'))
    reds <- colorRampPalette(c('pink', 'dark red'))
    
    qplot(user, count, data=count_group, geom="histogram", fill=group,
          xlab = "users", ylab="count") +
            opts(axis.text.x=theme_text(angle=90, hjust=0, size=7)) +
            scale_fill_manual(values = c(blues(10), reds(10)))
    # blues(10) and reds(10) because you want blues for the first ten
    #  groups, and reds thereafter. Each of these functions are equivalent
    #  to providing vectors containing ten hex colors representing a gradient
    #  of blues and a gradient of reds.
    

    【讨论】:

    • 谢谢@jbaums,现在我有另一个问题,是否可以将色阶分成两部分,然后颜色让我们说从 A 到 K 一种颜色(蓝色调色板)和 K换成另一种类型(红色调色板)?
    • 当然,通过指定两个colorRampPalettes。我会把它添加到我上面的答案中。
    猜你喜欢
    • 1970-01-01
    • 2012-08-26
    • 1970-01-01
    • 2018-12-30
    • 2017-03-25
    • 1970-01-01
    • 2022-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多