r - 我在 ggplot2 中带有错误栏的条形图是错误的
问题描述
最小的可重现示例在这里:
library(ggplot2)
vals <- c(10, 12, 13, 20, 21, 28)
err <- c(0.85, 1.2, 0.9, 1.35, 2.2, 0.98)
cat <- c(rep("A",3),rep("B",3))
df <- data.frame(vals, err, cat)
df$cat<- as.factor(df$cat)
ggplot(df, aes(x=cat, y=vals, fill=vals)) +
geom_bar(stat='identity', position='dodge') +
geom_errorbar(aes(ymin=vals-err, ymax=vals+err), width=.1)
但是我希望每个cat
. 更接近于此:
我在这里做错了什么?
解决方案
如果每一行都是单独的观察,则需要明确说明。做一个索引变量,把它变成一个因子,然后把它放在 x 轴上。
如果obs
跨类别重复(例如,如果 A 和 B 都obs
编号为 1、2 和 3),则cat
使用facet_wrap(~ cat)
.
vals <- c(10, 12, 13, 20, 21, 28)
err <- c(0.85, 1.2, 0.9, 1.35, 2.2, 0.98)
cat <- c(rep("A",3),rep("B",3))
df <- data.frame(vals, err, cat)
df$cat<- as.factor(df$cat)
df$obs <- factor(1:nrow(df))
ggplot(df, aes(x=obs, y=vals, fill=cat)) +
geom_col(position='dodge') +
geom_errorbar(aes(ymin=vals-err, ymax=vals+err))
推荐阅读
- c# - Xamarin .NET API 使用 Refit 错误 Refit.ApiException
- asp.net-core - Visual Studio 2019 QuickWatch 在 ASP.NET Core Blazor WebAssembly Program.cs 文件中显示无法评估(Unable to evaluate)
- python - 从网页抓取时出现 IndexError
- python - 如何使用 django-two-factor-auth 在 django 中为现有用户获取 OTP 令牌
- javascript - UnhandledPromiseRejectionWarning: RangeError [EMBED_FIELD_VALUE]: MessageEmbed 字段值不能为空
- android - RxBLELibraries/RxAndroidBle:状态为 8(GATT_INSUF_AUTHORIZATION 或 GATT_CONN_TIMEOUT)
- angular - 拖动事件触发了几秒钟
- c# - meshbuilder AddPolygon() 方法的奇怪行为的原因是什么?
- automation - 如何从空手道 API 自动化中的功能文件中验证针对多个数据库实例的 API 响应?
- server - Recaptcha 将 Formmail 的“电子邮件”(发件人)字段替换为我的服务器地址。如果没有 Recaptcha,From 字段可以正常工作。为什么?