汇总统计中指定的组 geom_boxplot 无法在 r 中生成箱线图
Group-specified geom_boxplot from summary statistics fails to generate boxplots in r
我正在尝试根据模拟数据生成的汇总统计数据制作箱形图——我没有绘制原始数据。摘要数据如下所示:
require(tidyverse)
df <- tibble(Source = c("A","A","B","B","C","C"),
Group = c("y","n","y","n","y","n"),
y2.5 = c(0.592,0.471,0.182,0.285,0.024,0.031),
y25 = c(0.633,0.53,0.217,0.325,0.059,0.081),
y50 = c(0.673,0.547,0.24,0.347,0.08,0.106),
y75 = c(0.699,0.58,0.267,0.370,0.103,0.130),
y97.5 = c(0.764,0.61,0.312,0.414,0.146,0.173))
我想为每个 Source
沿 x 轴生成箱线图,并与 Group
配对。如您所见,组和源的每个组合都有一组汇总值。
我从插图中看到 geom_boxplot(aes())
接受以这种方式绘制的汇总值:
ggplot(df, aes(Source, group = Group))+
geom_boxplot(aes(ymin = y2.5, lower = y25, middle = y50, upper = y75, ymax = y97.5),
stat = "identity")
但是这些数据上的代码 运行 会生成此错误:
Error: Can't draw more than one boxplot per group. Did you forget aes(group = ...)?
我已将组参数移动到箱形图 aes()
调用中,但这会产生相同的错误消息。这感觉很像一个由深夜疏忽引起的简单问题,但我就是看不到它……也许我盯着看的时间太长了。如有任何帮助,我们将不胜感激。
我认为你不能映射到“组”(更多细节:https://ggplot2.tidyverse.org/reference/aes_group_order.html),据我所知你需要映射到像“颜色”、“填充”、“ alpha", "shape", "size", and/or "linetype" 以获得您想要的结果,例如
library(tidyverse)
df <- tibble(Source = c("A","A","B","B","C","C"),
Group = c("y","n","y","n","y","n"),
y2.5 = c(0.592,0.471,0.182,0.285,0.024,0.031),
y25 = c(0.633,0.53,0.217,0.325,0.059,0.081),
y50 = c(0.673,0.547,0.24,0.347,0.08,0.106),
y75 = c(0.699,0.58,0.267,0.370,0.103,0.130),
y97.5 = c(0.764,0.61,0.312,0.414,0.146,0.173))
ggplot(df, aes(x = Source, fill = Group)) +
geom_boxplot(aes(ymin = y2.5, lower = y25,
middle = y50, upper = y75,
ymax = y97.5),
stat = "identity")
ggplot(df, aes(x = Source, color = Group)) +
geom_boxplot(aes(ymin = y2.5, lower = y25,
middle = y50, upper = y75,
ymax = y97.5),
stat = "identity")
或者,另一种可能的替代方法是绘制组和源之间的交互,例如
ggplot(df, aes(x = interaction(Group, Source))) +
geom_boxplot(aes(ymin = y2.5, lower = y25,
middle = y50, upper = y75,
ymax = y97.5),
stat = "identity")
由 reprex package (v2.0.0)
于 2021 年 7 月 12 日创建
每个组标签都需要不同。您可以使用与源的交互来强制
ggplot(df, aes(Source))+
geom_boxplot(aes(ymin = y2.5, lower = y25, middle = y50, upper = y75, ymax = y97.5,
group = interaction(Source, Group)),
stat = "identity")
但是按照 jared_mamrot 的建议使用填充可能是更好的解决方案。
我正在尝试根据模拟数据生成的汇总统计数据制作箱形图——我没有绘制原始数据。摘要数据如下所示:
require(tidyverse)
df <- tibble(Source = c("A","A","B","B","C","C"),
Group = c("y","n","y","n","y","n"),
y2.5 = c(0.592,0.471,0.182,0.285,0.024,0.031),
y25 = c(0.633,0.53,0.217,0.325,0.059,0.081),
y50 = c(0.673,0.547,0.24,0.347,0.08,0.106),
y75 = c(0.699,0.58,0.267,0.370,0.103,0.130),
y97.5 = c(0.764,0.61,0.312,0.414,0.146,0.173))
我想为每个 Source
沿 x 轴生成箱线图,并与 Group
配对。如您所见,组和源的每个组合都有一组汇总值。
我从插图中看到 geom_boxplot(aes())
接受以这种方式绘制的汇总值:
ggplot(df, aes(Source, group = Group))+
geom_boxplot(aes(ymin = y2.5, lower = y25, middle = y50, upper = y75, ymax = y97.5),
stat = "identity")
但是这些数据上的代码 运行 会生成此错误:
Error: Can't draw more than one boxplot per group. Did you forget aes(group = ...)?
我已将组参数移动到箱形图 aes()
调用中,但这会产生相同的错误消息。这感觉很像一个由深夜疏忽引起的简单问题,但我就是看不到它……也许我盯着看的时间太长了。如有任何帮助,我们将不胜感激。
我认为你不能映射到“组”(更多细节:https://ggplot2.tidyverse.org/reference/aes_group_order.html),据我所知你需要映射到像“颜色”、“填充”、“ alpha", "shape", "size", and/or "linetype" 以获得您想要的结果,例如
library(tidyverse)
df <- tibble(Source = c("A","A","B","B","C","C"),
Group = c("y","n","y","n","y","n"),
y2.5 = c(0.592,0.471,0.182,0.285,0.024,0.031),
y25 = c(0.633,0.53,0.217,0.325,0.059,0.081),
y50 = c(0.673,0.547,0.24,0.347,0.08,0.106),
y75 = c(0.699,0.58,0.267,0.370,0.103,0.130),
y97.5 = c(0.764,0.61,0.312,0.414,0.146,0.173))
ggplot(df, aes(x = Source, fill = Group)) +
geom_boxplot(aes(ymin = y2.5, lower = y25,
middle = y50, upper = y75,
ymax = y97.5),
stat = "identity")
ggplot(df, aes(x = Source, color = Group)) +
geom_boxplot(aes(ymin = y2.5, lower = y25,
middle = y50, upper = y75,
ymax = y97.5),
stat = "identity")
或者,另一种可能的替代方法是绘制组和源之间的交互,例如
ggplot(df, aes(x = interaction(Group, Source))) +
geom_boxplot(aes(ymin = y2.5, lower = y25,
middle = y50, upper = y75,
ymax = y97.5),
stat = "identity")
由 reprex package (v2.0.0)
于 2021 年 7 月 12 日创建每个组标签都需要不同。您可以使用与源的交互来强制
ggplot(df, aes(Source))+
geom_boxplot(aes(ymin = y2.5, lower = y25, middle = y50, upper = y75, ymax = y97.5,
group = interaction(Source, Group)),
stat = "identity")
但是按照 jared_mamrot 的建议使用填充可能是更好的解决方案。