如何使用多直方图制作图表

时间:2016-01-16 10:53:29

标签: r ggplot2 histogram

我在R中制作带有多个直方图的图表时遇到了一些麻烦(尝试使用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 ......),对应两个变量(&#39; DEV_share&#39; - 蓝色和&#39; current_qty_share&#39; - 绿色,黄色,红色。< / p>

两条虚线表示截止值:第一个截止值对应于第17个属性,第二个截止值对应于第10个属性。 Cutt-offs是区分“current_qty_share”的每个属性的颜色的标志。变量:17-20 - 绿色,10-16 - 黄色,1-9 - 红色。对于“DEV_share&#39;”的所有属性,蓝色都是相同的。

X轴包含属性值,“DEV_share”的Y轴cintains值。和&#39; current_qty_share&#39;。

如果您能够提示如何制作Excel模板中的图表(请参阅链接),将会非常感激。

1 个答案:

答案 0 :(得分:2)

这是帮助你开始的东西。首先,我必须更换你所有的&#34;,&#34; by&#34;。&#34;在您的数据框中。如果要显示两列,则需要将数据框从宽转换为长。我还添加了一种不同颜色的方法,你可以随意改变它。

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