【问题标题】:Scatterplot with categorical x-axis (and uncertainties boxes) in RR中带有分类x轴(和不确定性框)的散点图
【发布时间】:2016-07-13 12:19:00
【问题描述】:

我对在几个光伏板系统上测量的数据进行了一些计算。我有 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 个值。并且与每个点关联的框对应于不确定性(在第二个矩阵中给出)。

【问题讨论】:

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

标签: r scatter-plot boxplot


【解决方案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 对分组箱线图的回答。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-09
    • 2019-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-07
    相关资源
    最近更新 更多