R中带有分类x轴(和不确定性框)的散点图

时间:2016-07-13 12:19:00

标签: r scatter-plot boxplot

我对几个光伏电池板系统测量的数据进行了一些计算。我有11种不同的光伏系统,每种都有3种不同的数值。

我的结果是一个矩阵,有11行(每个对应一个光伏系统)和3列(包含为每个系统计算的3个数值)。

这是一个可重复性最小的矩阵:

            monthly_LR monthly_CSD monthly_HW
solon            0.398       0.417       0.48
sanyo            0.489       0.479       0.59
atersa              NA          NA         NA
sunpower         0.129          NA       0.19
schott_efg       0.387       0.486       0.47
BP               0.235       0.161       0.22
solarworld       1.153       1.245       1.25
schott_main      0.531       0.628       0.62
wurth            2.889       2.886       2.85
first            1.631       1.651       1.64
mhi              0.974       0.888       1.02

以及相应的dput输出,以便您可以重现它:

structure(c(0.398, 0.489, NA, 0.129, 0.387, 0.235, 1.153, 0.531, 
2.889, 1.631, 0.974, 0.417, 0.479, NA, NA, 0.486, 0.161, 1.245, 
0.628, 2.886, 1.651, 0.888, 0.48, 0.59, NA, 0.19, 0.47, 0.22, 
1.25, 0.62, 2.85, 1.64, 1.02), .Dim = c(11L, 3L), .Dimnames = list(
c("solon", "sanyo", "atersa", "sunpower", "schott_efg", "BP", 
"solarworld", "schott_main", "wurth", "first", "mhi"), c("monthly_LR", 
"monthly_CSD", "monthly_HW")))    `

我还有另一个包含与第一个矩阵的每个值相关的不确定性的矩阵:

           monthly_LR_uncertainty    monthly_CSD_uncertainty  monthly_HW_uncertainty
solon                        0.14                    0.09                    0.07
sanyo                        0.13                    0.06                    0.07
atersa                         NA                    0.13                      NA
sunpower                     0.18                    0.18                    0.20
schott_efg                   0.14                    0.07                    0.06
BP                           0.14                    0.14                    0.15
solarworld                   0.16                    0.04                    0.03
schott_main                  0.15                    0.08                    0.07
wurth                        0.12                    0.10                    0.11
first                        0.08                    0.09                    0.10
mhi                          0.08                    0.07                    0.08

以及相应的dput输出,以便您可以重现它:

structure(c(0.14, 0.13, NA, 0.18, 0.14, 0.14, 0.16, 0.15, 0.12, 
0.08, 0.08, 0.09, 0.06, 0.13, 0.18, 0.07, 0.14, 0.04, 0.08, 0.1, 
0.09, 0.07, 0.07, 0.07, NA, 0.2, 0.06, 0.15, 0.03, 0.07, 0.11, 
0.1, 0.08), .Dim = c(11L, 3L), .Dimnames = list(c("solon", "sanyo", 
"atersa", "sunpower", "schott_efg", "BP", "solarworld", "schott_main", 
"wurth", "first", "mhi"), c("monthly_LR_uncertainty", "monthly_CSD_uncertainty", 
"monthly_HW_uncertainty")))    `

现在,这里是我想要获得的散点图的类型(我几乎得到了我想要的箱形图,但现在我更喜欢散点图):

我希望x轴是分类的,就像我制作一个箱形图(即11行中每一行的一个类别)。

在x轴上的每个类别之上,我希望有3个点对应于第一个矩阵的相应行中的3个值,方框表示结果的不确定性。

下面的图片(由同一个实验室的研究人员撰写的文章中的图表,但现在已从实验室中删除)显示了我想要获得的内容。 x轴上的11个类别对应于我的11行。每个类别(蓝色,红色,绿色)的三个不同点对应于第一个矩阵中每个类别的3个值。与每个点相关联的框对应于不确定性(在第二个矩阵中给出)。

enter image description here

1 个答案:

答案 0 :(得分:1)

假设a是带有均值的表,而b是带有不确定性的表:

# x axis width
x = 1:nrow(a)

# horizontal offset for data of same group
offset = 0.2

# draw empty plot
plot(NULL, xlim=c(0, nrow(a)), ylim=c(0, max(a,na.rm=T)), xaxt='n', ylab='performance', xlab='')

# add error bars (arrows with angle=90)
arrows(x0=x, x1=x, y0 = a[,1]-0.5*b[,1], y1 = a[,1]+0.5*b[,1], angle=90, code=3, len=0.01)
arrows(x0=x-offset, x1=x-offset, y0 = a[,2]-0.5*b[,2], y1 = a[,2]+0.5*b[,2], angle=90, code=3, col=2, len=0.02)
arrows(x0=x+offset, x1=x+offset, y0 = a[,3]-0.5*b[,3], y1 = a[,3]+0.5*b[,3], angle=90, code=3, col=4, len=0.02)

# add points
points(x, a[,1], pch=1, col=1)
points(x-offset, a[,2], pch=2, col=2)
points(x+offset, a[,3], pch=3, col=4)

# axis labels
axis(1, at = 1:nrow(a), labels = rownames(a), las=3)

# add legend
legend(x='topleft', legend=colnames(a), col=c(1,2,4), pch=c(1,2,3), inset=0.02)

另请查看分组箱图的this答案。