0

我有一个数据集,在 5 年内观察到两个变量(发生率(0-100)和严重性(0-5)。它看起来像这样。

cbb.incidence   avg.severity    Year
1   86.666667   2.0333333   2009
2   83.333333   1.8666667   2009
3   20.000000   1.2000000   2009
4   26.666667   1.2666667   2010
5   86.666667   1.9000000   2010
6   86.666667   1.8666667   2010
7   86.666667   2.0333333   2011
8   83.333333   1.8666667   2011
9   20.000000   1.2000000   2012
10  26.666667   1.2666667   2012
11  86.666667   1.9000000   2013
12  86.666667   1.8666667   2013

我想要得到的是一个每年有两个箱线图的数字,每个变量一个。我在这里发现了关于堆栈溢出的完全相同的问题:在一张图中绘制多个箱线图

因此,我按照示例中的描述“融化”了数据,然后将其绘制为描述的:

meltedData<-melt(incidence_all, id.var='Year')
ggplot(data=meltedData, aes(x=Year, y=value)) +
geom_boxplot(aes(fill=variable))

数据似乎是正确的格式融化的数据看起来像这样(这是一个子集,有 >2000 行):

     Year  variable       value
1017 2009  avg.severity   1.5333333
1018 2009  avg.severity   2.1333333
1019 2009  avg.severity   2.0666667
1020 2009  avg.severity   2.0000000
1021 2009  avg.severity   2.0666667
1022 2009  avg.severity   1.6333333
1023 2009  avg.severity   1.5666667
1024 2009  cbb.incidence  16.777775
1025 2009  cbb.incidence  35.888865

见上面的代码

请问各位R-wizards请告诉我我做错了什么?

另外,我已经知道我的两个变量的比例非常不同(发生率是 0-100,严重性是 1-5)所以如果我简单地用相同的 y 轴比例绘制两个变量,较小的值将是不可读的. 我想要一个双 y 轴,一个在左边,一个在右边,每个变量都被缩放到不同的 y 轴。我还没有看到具有此功能的箱线图示例。有人可以推荐如何解决这个问题,最好是在ggplot中吗?

谢谢你!!

4

1 回答 1

2

尝试首先将年份作为因素:

incidence_all$Year=factor(incidence_all$Year)

meltedData<-melt(incidence_all, id.var="Year")
ggplot(data=meltedData, aes(x=Year, y=value)) +
  geom_boxplot(aes(fill=variable))

你会得到这样的东西: 在此处输入图像描述

对于第二个问题,一种选择是重新调整:

incidence_all$avg.severitys=incidence_all$avg.severity*100/max(incidence_all$avg.severity)

meltedData<-melt(incidence_all[,-2], id.var="Year")
ggplot(data=meltedData, aes(x=Year, y=value)) +
  geom_boxplot(aes(fill=variable))

在此处输入图像描述

于 2015-10-13T01:27:33.210 回答