2012-07-20 92 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