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

R中带有分类x轴(和不确定性框)的散点图,r,scatter-plot,boxplot,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 a

我对几个光伏板系统的测量数据进行了一些计算。我有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")))    `
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")))    `
我还有另一个矩阵,它包含与第一个矩阵的每个值相关的不确定性:

           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.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")))    `
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个值。与每个点相关的方框对应于不确定性(在第二个矩阵中给出)


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

还可以查看分组箱线图的答案。

您可能需要误差条,这是我想要的散点图上的误差条,误差值包含在第二个矩阵中。但除此之外,我不知道如何在没有误差条的情况下获得散点图。为了使其可再现,请以可再现的方式提供数据,例如
dput
。或者显示创建矩阵的代码。有一种方法可以从剪贴板中获取R中的数据,但它非常不可靠。好吧,对不起,我认为在我的帖子中这样呈现数据就足以让其他人能够重现我的矩阵。我会继续工作,编辑我的帖子。完成!在我的两个矩阵的下面,我添加了相应的dput输出。