R barplot标准偏差

时间:2013-09-22 15:26:07

标签: r standard-deviation bar-chart

我是新用户,无法在条形图中绘制一些数据。提前抱歉,如果这很容易做到,我就是无法理解。 我有六组数据:1号,5号和10号汽车#1的3个数据集,1,5和10年的汽车#2的3个数据集,每个年龄段的每辆汽车的测量值包括1.计算汽车外部的凹痕总数和2.)去除油漆的凹痕数量。我想制作一个带有6个条形的箱线图,对应于每辆车及其各自的年龄,其中柱高是除去油漆的凹痕总数,带有标准偏差条。 这是我到目前为止所尝试的内容(仅包括2个数据集):

car1yr1 = c(rep(0, 101), rep(1, 9)) #car has 9 dents that remove paint

car1yr5 = c(rep(0, 131), rep(1, 19)) #car has 19 dents that remove paint

sd1 = sd(car1yr1)

sd2 = sd(car1yr5)

stdv = c(sd1, sd2)

car1yr1 = car1yr1[1:150]

dentsCar1 = data.frame("Car1Yr1" = car1yr1, "Car1Yr5" = car1yr5)

barplot(as.matrix(dentsCar1, ylim = c(0, 50), beside = TRUE))

我找到了一个错误栏的示例:arrows(bar, x, bar, x+ -(stdv), length = 0.15, angle = 90),但我无法使用我的数字。此外,在此示例中,y轴停止在15,但是条形Car1Yr5一直持续到19.如何绘制y轴到20或30? 再次,我是R的新人,任何帮助将不胜感激。我一直试图在我自己的关闭和解决这个问题上解决这个问题大约2个星期。感谢。

1 个答案:

答案 0 :(得分:0)

我对你的数据感到有点困惑......我假设你的例子中汽车1有101个没有去除油漆的凹痕而9个没有去掉油漆,而车2有131个没有去除,19个没有。

现在计算凹痕数的标准偏差对我来说没有多大意义......你正在绘制计数数据,所以你不应该有任何标准偏差,除非你有许多相同型号的汽车和你想看看汽车之间的差异。

最好的办法是通过以下方式计算去除油漆的凹痕百分比:

car1yr1 = c(rep(0, 101), rep(1, 9)) #car has 9 dents that remove paint
car1yr5 = c(rep(0, 131), rep(1, 19)) #car has 19 dents that remove paint

# The total number of observations is the total number of dents
total.dents.1 <- length(car1yr1)
total.dents.5 <- length(car1yr5)
# The dents that remove paint are marked as 1, the others with 0, 
# so we can just sum all of the data to get the number of paint-removing dents
dents.paint.1 <- sum(car1yr1)
dents.paint.5 <- sum(car1yr5)
# Alternatively you can use
# dents.paint.1 <- length(which(car1yr1==1))
# Calculate the %
dents.paint.perc.1 <- dents.paint.1/total.dents.1
dents.paint.perc.5 <- dents.paint.1/total.dents.5

df <- data.frame(dents.paint.perc.1, dents.paint.perc.5)

# Plot the data. 
# ylim specifies the limits of the y axis
# ylab defines the axis title. 
# las=1 puts the labels on the y axis horizontally
# names defines the labels on the x axis
barplot(as.matrix(df)*100, ylim=c(0,20), 
        ylab="% dents removing paint", las=1,
        names=c("Car 1 year 1", "Car 1 year 5"))

通常,将所有数据放在一个列表中会更好,这样您就可以使用*apply函数族对所有数据集执行重复操作。这将为您提供更清晰,更易于管理的代码。此外,如果您添加更多数据,它会自动将其添加到绘图中。