2012-07-20 48 views
1

我在R中使用ggplot2来构建一些测试结果的直方图。现在我的表格Glucose_Results2有逐年分析,它有一个Value列和一个Year列(以及很多行)。R中逐年直方图的基于价值的颜色方案

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) 

这给了我直到2012年我感兴趣的是改变这些地块的配色方案,表示落在参考范围每年内的值(见下文)2005地块。因此,对于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只有几个星期的经验,我真的不知道如何做到这一点。

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

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

回答

4

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

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

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

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

+0

真棒图形。这正是我所期待的。非常感谢! – user1541090 2012-07-20 18:30:43