R中逐年直方图的基于价值的配色方案

时间:2012-07-20 15:27:03

标签: r colors histogram

我在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之间的值为红色,而超出该范围的区域可以保持黑色。

>  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经验,我真的不知道该怎么做。

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

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

1 个答案:

答案 0 :(得分:4)

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

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

对于Gval2的每一行,匹配Gref2的相应行,并通过Year中的Gval2列与{{1}匹配来定义相应的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的某些组合值,我得到的图形看起来像

enter image description here