【问题标题】:Value-based color scheme for year-by-year histograms in RR中逐年直方图的基于值的配色方案
【发布时间】:2012-07-19 21:47:19
【问题描述】:

我在 R 中使用 ggplot2 来构建一些测试结果的直方图。现在我对 Glucose_Results2 表进行了逐年分析,该表有一个 Value 列和一个 Year 列(以及很多行)。

Gval2 <- read.csv('Glucose_Results2.csv', sep = ',', header=T)
Gdist = qplot(Value, binwidth=10, data=Gval2, geom="histogram", 
  main="Distribution of Glucose Levels",
  xlab="Glucose Levels in mg/dl",
  ylab="Frequency")
Gval2$Year = factor(Gval2$Year)
Gdist + facet_wrap( ~ Year)

这给了我从 2005 年到 2012 年的图。我有兴趣更改这些图的配色方案,以指示每年的参考范围内的值(见下文)。因此,对于 2005 年,我希望 70 到 110 之间的值的 bin 为红色,而该范围之外的 bin 可以保持黑色。

>  Gref2
  REFERENCE_LOW REFERENCE_HIGH REFERENCE_YEAR
1            70            110           2005
2            70            110           2006
3            70            110           2007
4            70            110           2008
5            70            110           2009
6            70            100           2010
7            70            100           2011
8            70            100           2012

只有几周的 R 经验,我真的不知道该怎么做。

理想情况下,这将包括参考高和参考低的标签,或者在参考范围内的红色 = 的效果,但我并不过分担心这一点。我想要的是一个读取上表并根据直方图年份选择适当参考范围的解决方案(尽管归根结底,我可以手动输入数字)。

感谢您阅读本文和任何回复!

【问题讨论】:

    标签: r colors histogram


    【解决方案1】:

    使用 ggplot 来控制颜色,最简单的方法是将变量放入数据框中,指示它属于哪个组(参考范围内或参考范围外的组)。这可以通过一系列步骤来完成。首先,针对每种情况,根据年份匹配适当的限制。

    Gboth <- merge(Gval2, Gref2, by.x="Year", by.y="REFERENCE_YEAR")
    

    对于Gval2 的每一行,通过匹配Gval2 中的Year 列与Gref2 中的REFERENCE_YEAR 列来定义Gref2 的适当行。然后可以使用值和参考限制制作指标列。我已将其作为标记因素,以便以后使事情变得更容易,但这并不是绝对必要的。

    Gboth$within <- factor(Gboth$REFERENCE_LOW < Gboth$Value & 
                           Gboth$Value <= Gboth$REFERENCE_HIGH,
                           levels = c(FALSE, TRUE),
                           labels = c("Outside reference range",
                                      "Within reference range"))
    

    现在我可以使用这个变量来指定颜色(实际上是填充,因为对于直方图来说,颜色是条形周围线条的颜色,而填充是条形中填充的颜色)。另外,我已经从qplot 翻译成完整的ggplot 语法。 qplot 有助于从 plot 命令转换,直到您更熟悉语法,但它没有那么富有表现力。如果你是从零开始学习,不妨略过。

    ggplot(Gboth, aes(x=Value)) +
      geom_histogram(aes(fill=within), binwidth=10) +
      facet_wrap( ~ Year) +
      scale_x_continuous("Glucose Levels in mg/dl") +
      scale_y_continuous("Frequency") +
      scale_fill_manual("", breaks=c("Outside reference range", 
                                     "Within reference range"),
                        values = c("black", "red")) +
      opts(title = "Distribution of Glucose Levels")
    

    对于Gval2 的一些虚构值,我得到一个看起来像的图表

    【讨论】:

    • 太棒了。这正是我一直在寻找的。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    • 2021-08-21
    • 2012-01-18
    • 2020-05-19
    • 1970-01-01
    相关资源
    最近更新 更多