2016-01-16 59 views
1

我有一些關於在R中使用multy直方圖製作圖表的問題(嘗試使用ggplot2)。在Excel圖表(參見鏈接)被產生的我的需要例如:如何製作具有多個直方圖的圖表

enter image description here

初始數據集是以下:

attribute DEV_share current_qty_share 
1   0,04999641 0,115217086 
2   0,050001729 0,076647464 
3   0,04999641 0,074048054 
4   0,050001729 0,071905297 
5   0,049999069 0,067865674 
6   0,049999069 0,059962063 
7   0,049999069 0,054130954 
8   0,049999069 0,052725868 
9   0,049999069 0,047421666 
10   0,049999069 0,036040466 
11   0,049999069 0,033370802 
12   0,049999069 0,029085289 
13   0,049999069 0,027047913 
14   0,04999641 0,034354363 
15   0,050001729 0,036567374 
16   0,049999069 0,039728818 
17   0,049999069 0,042222847 
18   0,049999069 0,036532247 
19   0,049999069 0,02511592 
20   0,050017684 0,040009836 

對於每個屬性(#1,2,3 ... )對應兩個變量('DEV_share' - 藍色和'current_qty_share' - 綠色,黃色,紅色。

兩條虛線表示截止點:第一個截止點對應於第17個屬性,第二個截止點第10個屬性。 Cutt-off s是地標,用於區分「current_qty_share」變量的每個屬性的顏色:17-20 - 綠色,10-16 - 黃色,1-9 - 紅色。藍色對於'DEV_share'的所有屬性都是相同的。

X軸包含'DEV_share'和'current_qty_share'的屬性值,Y軸包含值。

如果您可以提示如何製作Excel模板中的圖表(請參閱鏈接),將不勝感激。

+0

這http://docs.ggplot2.org/dev/geom_bar.html應該可以幫助您開始;順便說它不是一個直方圖,但你有一個條形圖 – MLavoie

+0

@ MLavoie: 感謝這麼快的答覆。 我已經看了鏈接,並想知道如何將我的份額值放到Y軸上(在所有示例中,只有「計數」表示直方圖中頻率的等價值)。 –

回答

2

這裏是幫助你開始的東西。首先,我必須用「」替換所有的「,」。在你的數據框中。如果要顯示兩列,則需要將數據幀從寬轉換爲長。我還添加了一種不同顏色的方法,您可以根據需要更改顏色。

library(ggplot2) 
library(reshape2) 
data_wide <- read.table(text=" 
attribute DEV_share current_qty_share 
1   0.04999641 0.115217086 
2   0.050001729 0.076647464 
3   0.04999641 0.074048054 
4   0.050001729 0.071905297 
5   0.049999069 0.067865674 
6   0.049999069 0.059962063 
7   0.049999069 0.054130954 
8   0.049999069 0.052725868 
9   0.049999069 0.047421666 
10   0.049999069 0.036040466 
11   0.049999069 0.033370802 
12   0.049999069 0.029085289 
13   0.049999069 0.027047913 
14   0.04999641 0.034354363 
15   0.050001729 0.036567374 
16   0.049999069 0.039728818 
17   0.049999069 0.042222847 
18   0.049999069 0.036532247 
19   0.049999069 0.02511592 
20   0.050017684 0.040009836", 
    header = TRUE) 

data_long <- melt(data_wide, id.vars=c("attribute")) 
data_long$Color <- 
    with(data_long, 
     ifelse(variable == "current_qty_share", "darkblue", 
     ifelse(variable == "DEV_share" & attribute >=1 & attribute <8, 
       "darkred", 
       ifelse(variable == "DEV_share" & attribute >=8 & attribute <=17, 
         "green",  
         "yellow"))) 

ggplot(data=data_long, aes(x=as.factor(attribute), y=value, group=variable, fill=Color)) + 
geom_bar(stat='identity', position='dodge') + 
theme_bw() + 
geom_vline(xintercept=10, linetype = "longdash") + 
geom_vline(xintercept=17, linetype = "longdash") + 
xlab("attribute") + 
ylab("value") + 
scale_fill_manual(values=c("darkblue", "darkred", "green", "yellow")) 

enter image description here

+0

@ MLavoie: 非常感謝。你的評論真的很棒! :-)它超出了我的信念:-) –

+1

您也可以使用'read.table(...,dec =「,」)'。 (+1) – Axeman

+0

@ Axeman: 非常感謝您的評論。那麼,有時候我做到了,但是「,」不是以「」來回報。「所以我更願意通過Stringr包明確地進行替換。 –