我如何权衡 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)