1

我在 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 经验,我真的不知道如何做到这一点。

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

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

4

1 回答 1

4

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

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

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

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,我得到一个看起来像的图表

在此处输入图像描述

于 2012-07-20T17:30:26.490 回答