r - 在 R 上添加设置列值作为最小/最大误差线
问题描述
抱歉,如果以前有人问过这个问题,但很难说清楚才能找到答案。
我有以下一组数据。在 R 中,我想为 和 构建一个PV1
条形图。对于误差线,我想将and设置为最小值,并将and设置为最大值。PV2
AvgRead
AvgUniq
MinRead
MinUniq
MaxRead
MaxUniq
如果您能提供帮助,将不胜感激。如果以前有人问过这个问题,我再次道歉。
AvgRead MinRead MaxRead AvgUniq MinUniq MaxUniq
PV1 20 10 40 40 20 80
PV2 40 20 80 80 40 160
解决方案
melt()
您需要使用和dcast()
函数稍微重塑数据reshape2
:
library(reshape2)
library(ggplot2)
df <- data.frame(
row.names = c("PV1", "PV2"),
AvgRead = c(20, 40),
MinRead = c(10, 20),
MaxRead = c(40, 80),
AvgUniq = c(40, 80),
MinUniq = c(20, 40),
MaxUniq = c(70, 160)
)
df$name <- row.names(df)
df_molten <- melt(df)
df_molten$var1 <- substr(df_molten$variable, 1, 3)
df_molten$var2 <- substr(df_molten$variable, 4, 10000)
df_cast <- dcast(df_molten, name + var2 ~ var1, value.var = "value")
ggplot(data = df_cast, aes(x = name, y = Avg, fill = var2)) +
geom_bar(stat = "identity", position = "dodge") +
geom_errorbar(
aes(ymin = Min, ymax = Max),
width = 0.5,
size = 1.3,
position = position_dodge(0.9)
)
编辑:要更改条形的顺序,您需要将 var2 更改为因子并相应地对级别进行排序:
df_cast <- dcast(df_molten, name + var2 ~ var1, value.var = "value")
df_cast$var2 <- factor(df_cast$var2, levels = c("Uniq", "Read"))
ggplot(data = df_cast, aes(x = name, y = Avg, fill = var2)) +
geom_bar(stat = "identity", position = "dodge") +
geom_errorbar(
aes(ymin = Min, ymax = Max),
width = 0.5,
size = 1.3,
position = position_dodge(0.9)
)
推荐阅读
- android - 我无法在 Android Studio 中访问“TextView”或“Button”
- azure - 如何在 node.js 中使用“@azure/ms-rest-nodeauth”获取 Azure 凭据?
- .net - 无法在 Azure 中找到 .NET 5
- python - 服务总线 CBS 身份验证已过期
- java - python列表与Java数组有何不同
- objective-c - 在 Objective C 中,将浮点数乘以 100 有时会产生一个稍微出乎意料的结果
- c# - C# 使用 system.net.FtpClient 连接显式 FTP - 证书错误
- javascript - 在按钮单击时添加 React-Select 下拉组件
- python - 如何提取numpy数组的一些特定行
- android - 改变一个变量的状态也会改变另一个变量