我如何权衡 stat_smooth 与 ggplot2 中值的数量的倒数
How do I weigh stat_smooth with the inverse of the number of values in ggplot2
在 ggplot2 中给出了这样的箱线图示例:
ggplot(diamonds, aes(carat, price)) +
geom_boxplot(aes(group = cut_width(carat, 0.25)), outlier.alpha = 0.1) +
stat_smooth( method="lm", formula = y ~ poly(x,2), n= 40, se=TRUE, color="red", aes(group=1), size=1.5)
我得到一张看起来像这样的图像:
然而,stat_smooth 线受每个克拉类别中的点数影响很大。我更愿意平等对待每个类别,这意味着,在我看来,用特定的克拉值对每个点进行加权,与具有该值的点总数的倒数。 (因此,在 5 时,该点的权重为 1,在 1 时,该点的权重为 1/aBigNumber。)我已经尝试了该图的权重美学,但它破坏了箱线图。我已经尝试将重量添加到平滑中,但出现错误:
Error: ggplot2 doesn't know how to deal with data of class uneval
那么,如何对平滑函数进行加权以使类别得到平等对待(与类别中的点数成反比),并在输出中仍然保留箱线图?
你可以这样做...
library(dplyr)
diamonds2 <- diamonds %>% mutate(cutcarat=cut_width(carat, 0.25)) %>%
group_by(cutcarat) %>%
summarise(carat=mean(carat), price=mean(price))
ggplot() +
geom_boxplot(data=diamonds,
aes(x=carat, y=price, group = cut_width(carat, 0.25)),
outlier.alpha = 0.1) +
geom_smooth(data=diamonds2,
aes(x=carat, y=price), method="lm",
formula = y ~ poly(x,2), n= 40, se=TRUE, color="red", size=1.5)
在 ggplot2 中给出了这样的箱线图示例:
ggplot(diamonds, aes(carat, price)) +
geom_boxplot(aes(group = cut_width(carat, 0.25)), outlier.alpha = 0.1) +
stat_smooth( method="lm", formula = y ~ poly(x,2), n= 40, se=TRUE, color="red", aes(group=1), size=1.5)
我得到一张看起来像这样的图像:
然而,stat_smooth 线受每个克拉类别中的点数影响很大。我更愿意平等对待每个类别,这意味着,在我看来,用特定的克拉值对每个点进行加权,与具有该值的点总数的倒数。 (因此,在 5 时,该点的权重为 1,在 1 时,该点的权重为 1/aBigNumber。)我已经尝试了该图的权重美学,但它破坏了箱线图。我已经尝试将重量添加到平滑中,但出现错误:
Error: ggplot2 doesn't know how to deal with data of class uneval
那么,如何对平滑函数进行加权以使类别得到平等对待(与类别中的点数成反比),并在输出中仍然保留箱线图?
你可以这样做...
library(dplyr)
diamonds2 <- diamonds %>% mutate(cutcarat=cut_width(carat, 0.25)) %>%
group_by(cutcarat) %>%
summarise(carat=mean(carat), price=mean(price))
ggplot() +
geom_boxplot(data=diamonds,
aes(x=carat, y=price, group = cut_width(carat, 0.25)),
outlier.alpha = 0.1) +
geom_smooth(data=diamonds2,
aes(x=carat, y=price), method="lm",
formula = y ~ poly(x,2), n= 40, se=TRUE, color="red", size=1.5)