格式化数据以在 R 中显示多个箱形图,还在 R 中创建双 y 轴

formatting data to display mulitple boxplots in R, also creating double y-axis in R

我有一个数据集,其中包含 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

我想要得到的是一个数字,每年有两个箱线图,每个变量一个。我在堆栈溢出时发现了我完全相同的问题:Plot multiple boxplot in one graph

所以我 "melt" 他们在示例中描述的数据,然后按照描述绘制它:

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 中吗?

谢谢!

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

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))