格式化数据以在 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))
我有一个数据集,其中包含 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))