首页 > 解决方案 > 如何在离散的 X 轴上获得平滑的密度曲线?

问题描述

我有一个带有少量级别的离散 x 轴。我想要一条显示分布的平滑曲线。当我将其保留gear为一个因素时,我得到的条形并不是我正在寻找的,当我gear用作数字时,我得到锯齿状的分布,这也不完全是我正在寻找的。

有人对显示离散数据的平滑分布有什么建议吗?

library(tidyverse)

mtcars %>% 
  group_by(gear) %>% 
  summarise(mpg = mean(mpg)) %>% 
  ggplot(aes(factor(gear), mpg)) +
  geom_density(stat = "identity")

离散分布

标签: rggplot2tidyverse

解决方案


我同意这可能会造成混淆或误导的评论,因为连接分类变量意味着可能是主观或误导的频谱和间距。

但是假设它对您的用例有意义,您可以通过将因子转换为“幕后”的数字连续数据,然后将标签调整回分类类型来解决此问题。例如:

mtcars %>% 
  mutate(gear = as.factor(gear)) %>%
  group_by(gear) %>% 
  summarise(mpg = mean(mpg)) %>%
  mutate(factor_num = as.numeric(gear)) -> temp

ggplot(temp, aes(x = factor_num, y = mpg)) +
  # This geom draws a smooth line through your points
  ggalt::geom_xspline(spline_shape = -0.5) +
  geom_point() +
  scale_x_continuous(breaks = temp$factor_num, labels = temp$gear, name = "gear") +
  expand_limits(y = 0)

在此处输入图像描述


推荐阅读