【问题标题】:ggplot summarise mean value of categorical variable on y axisggplot 总结 y 轴上分类变量的平均值
【发布时间】:2020-02-05 15:04:32
【问题描述】:

我正在尝试在 R 中复制我在此 Kaggle 笔记本中找到的 Python 图:Titanic Data Science Solutions

这是生成绘图的Python代码,使用的数据集可以在here找到:

import seaborn as sns
...

grid = sns.FacetGrid(train_df, row='Embarked', size=2.2, aspect=1.6)
grid.map(sns.pointplot, 'Pclass', 'Survived', 'Sex', palette='deep')
grid.add_legend()

这里是resulting plot

survival 列采用值 0 和 1(生存或不生存),y 轴显示每个 pclass 的平均值。在寻找使用ggplot2 计算平均值的方法时,我通常会找到stat_summary() 函数。我能做的最好的就是:

library(dplyr)
library(ggplot2)
...

train_df %>%
  ggplot(aes(x = factor(Pclass), y = Survived, group = Sex, colour = Sex)) +
  stat_summary(fun.y = mean, geom = "line") +
  facet_grid(Embarked ~ .)

输出可以在here找到。

有一些问题:

  • 似乎有一个空缺的方面,可能来自于 Embarked 中的 NA?
  • 点与线不对齐
  • 线条与 Python 图中的线条不同

我想我也没有完全掌握ggplot的分层概念。我想在stat_summary() 函数中分离geom = "line",而是将其添加为+ geom_line()

【问题讨论】:

    标签: python r ggplot2 seaborn


    【解决方案1】:

    train_df$Embarked 中实际上有一个空级别(即"")。您可以在绘图之前将其过滤掉。

    train_df <- read.csv('https://raw.githubusercontent.com/datasciencedojo/datasets/master/titanic.csv')
    train_df <- subset(train_df, Embarked != "")
    
    ggplot(train_df, aes(x = factor(Pclass), y = Survived, group = Sex, colour = Sex)) +
      stat_summary(fun.data = 'mean_cl_boot') +
      geom_line(stat = 'summary', fun.y = mean) +
      facet_grid(Embarked ~ .)
    

    您可以通过使用stat_summary 绘制置信区间来复制python 图。尽管您使用 stat_summary 的台词很棒,但我已按照您的要求将其重写为 geom_line 调用。

    请注意,您的 ggplot 代码没有绘制任何点,所以我无法回答那部分,但您可能正在绘制只有许多 0 和 1 的原始值。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-05
    • 2022-07-29
    • 1970-01-01
    • 2019-10-21
    • 2020-04-18
    • 2014-05-13
    • 1970-01-01
    • 2021-06-21
    相关资源
    最近更新 更多