首页 > 解决方案 > 在现有散点图中添加不同的线

问题描述

我正在努力将不同策略组的抑郁率的不同平均线(使用不同颜色)添加到现有散点图中。例如,如果我想为无限制组添加抑郁平均线。

这是我随机截屏的数据集:

在此处输入图像描述

我的代码是这样的:

ggplot(covid_depression_2020_policy, aes(x = Location, y = Depression.2020, color = `Large Gatherings Ban`)) + 
  geom_point(alpha=0.8)

标签: rggplot2

解决方案


使用 geom_smooth() 的最佳拟合线

要将平均线添加到 ggplot 的散点图中,您可以使用geom_smooth(),它给出“平滑条件均值”或每个给定条件的最佳拟合线。

ggplot(covid_depression_2020_policy, 
    aes(x = Location, y = Depression.2020, color = `Large Gatherings Ban`)) + 
    geom_point(alpha=0.8) +
    geom_smooth()

color = `Large Gatherings Ban`由于在 的美学中指定的参数ggplot()(即),将为每个“禁止大型聚会”组创建不同颜色的线aes(...)

如果您只想要一行Large Gatherings Ban == "No Limit",您可以在数据中指定它geom_smooth(),如下所示:

geom_smooth(data = dplyr::filter(covid_depression_2020_policy, `Large Gatherings Ban` == "No Limit")) 

dplyr::filter()用于对数据集中的行进行子集化,以便仅满足列条件。

根据您尝试可视化数据的方式,其中使用的一些常见参数geom_smooth(...)包括method = lm(用于最佳拟合直线)或se = FALSE(用于删除默认置信区间功能区)。运行?ggplot2::geom_smooth()以查看更多选项。

使用 geom_hline() 的水平平均线

您可能想要创建一条没有斜率的平均线,因为您的“位置”是一个名义上的分类变量,没有有意义的顺序。因此,这里有一个斜率是没有意义的。在这种情况下,您可能希望使用geom_hline()为每个“大型聚会禁令”组绘制一条水平线。

ggplot(covid_depression_2020_policy, 
    aes(x = Location, y = Depression.2020, color = `Large Gatherings Ban`)) + 
    geom_point(alpha=0.8) +
    geom_hline( 
        data = dplyr::filter(covid_depression_2020_policy, `Large Gatherings Ban` == "No Limit"),
        aes(yintercept = mean(Depression.2020), color = `Large Gatherings Ban`)) + 
    geom_hline( 
        data = dplyr::filter(covid_depression_2020_policy, `Large Gatherings Ban` == ">50 Prohibited"),
        aes(yintercept = mean(Depression.2020), color = `Large Gatherings Ban`))

geom_hline(...)只制作一行,因此您必须为每个“大型聚会禁令”组添加它。

有关 ggplot2 教程,请参见此处。


推荐阅读