gpt4 book ai didi

r - 在 ggplot 中通过美学映射在每个组中显示 stat_summary

转载 作者:行者123 更新时间:2023-12-01 00:17:36 24 4
gpt4 key购买 nike

我接近绘制我想要的图,但还没有完全弄清楚 stat_summary是显示所需绘图的正确方法。

所需的输出是散点图,每个类别中每年都有一条中线。例如,在下面的图中,我想要 A 类中 1999、2000 和 2001 年的值的中值线(即按颜色划分的 3 条线),然后是 B 类中的相同值(因此总共 6 条中线)。

我看了here ,但这似乎没有达到我想要的效果,因为它使用了刻面。

我的图看起来像是在每个类别的中位数之间画一条线。可以 stat_summary只需在每个类别中绘制一条中线,或者我是否需要使用不同的方法(例如计算中位数并将每条线按类别添加到图中?

enter image description here

可重现的简单示例

library(tidyverse)
library(lubridate)

# Sample data
Date <- sort(sample(seq(as.Date("1999-01-01"), as.Date("2002-01-01"), by = "day"), 500))
Category <- rep(c("A", "B"), 250)
Value <- sample(100:500, 500, replace = TRUE)

# Create data frame
mydata <- data.frame(Date, Category, Value)

# Plot by category and color by year
p <- ggplot(mydata, aes(x = Category, y = Value,
color = factor(year(Date))
)
) +
geom_jitter()
p


# Now add median values of each year for each group
p <- p +
stat_summary(fun.y = median,
geom = "line",
aes(color = factor(year(Date))),
group = 1,
size = 2
)
p

最佳答案

您要查找的实际上是一个点,即使它看起来像一条线,因为您不想连接观测值(线的作用),您只想显示离散值(点的作用)。

一种与您链接的帖子非常相似的方法是做您的 stat_summary并使用一个基本上是大破折号的形状。我拒绝了抖动点的 alpha 和大小,以更好地将它们与中位数区分开来。对于中位数,我保持颜色分配不变,但将组设置为年份和类别之间的交互作用,因此将计算六个不同的中位数。

请注意,我为随机数生成设置了一个种子并将结束日期更改为 12/31/2001 而不是 1/1/2002,因为您说您预计 3 年,但在一代中我得到了一些观察结果 1/1/2002 年。

library(tidyverse)
library(lubridate)

set.seed(987)
Date <- sort(sample(seq(as.Date("1999-01-01"), as.Date("2001-12-31"), by = "day"), 500))
Category <- rep(c("A", "B"), 250)
Value <- sample(100:500, 500, replace = TRUE)

# Create data frame
mydata <- data.frame(Date, Category, Value)

mydata <- mydata %>%
mutate(year = year(Date) %>% as.factor())

ggplot(mydata, aes(x = Category, y = Value, color = year)) +
geom_jitter(size = 0.6, alpha = 0.6) +
stat_summary(fun.y = median,
geom = "point",
aes(group = interaction(Category, year)),
shape = 95, size = 12, show.legend = F)



创建于 2018-07-01 由 reprex package (v0.2.0)。

关于r - 在 ggplot 中通过美学映射在每个组中显示 stat_summary,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51126843/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com