【问题标题】:Plotnine - adding vertical lines and histograms to same chartPlotnine - 在同一图表中添加垂直线和直方图
【发布时间】:2019-08-15 02:43:57
【问题描述】:

我正在尝试弄清楚如何在 python 中执行此操作,因为我对它与 R 相比有点新。

import plotnine as p9
import pandas as pd
import numpy as np

###load the data here...
dataset=pd.read_csv('https://gist.githubusercontent.com/curran/a08a1080b88344b0c8a7/raw/d546eaee765268bf2f487608c537c05e22e4b221/iris.csv')

什么不工作的例子......不知道我做错了什么......

p9.ggplot(dataset, p9.aes(x='sepal_width'))+p9.geom_density()+p9.geom_vline( p9.aes(xintercept='sepal_length.mean()', color='species'))

为什么颜色不起作用?我想要一个具有适当颜色的垂直线组

如果我能叠加直方图也很棒。

【问题讨论】:

    标签: python plotnine


    【解决方案1】:

    您必须单独进行数据操作。如果计算在stat 中完成,Plotnine/ggplot 将计算正确的平均值。对于您的情况,计算是通过映射完成的,即xintercept='sepal_length.mean()'xintercept 映射到sepal_length 平均值,它不关心color='species',所以xintercept 是全局平均值!

    from plotnine import *
    from plydata import *
    
    df = (
        dataset
        >> group_by('species')
        >> summarise(sl_mean='mean(sepal_length)')
    )
    
    (ggplot(dataset, aes(x='sepal_width'))
     + geom_density()
     + geom_vline(df, aes(xintercept='sl_mean', color='species'))
    )
    

    添加直方图

    (ggplot(dataset, aes(x='sepal_width'))
     + geom_histogram(aes(y='stat(density)'), alpha=.2)
     + geom_density()
     + geom_vline(df, aes(xintercept='sl_mean', color='species'))
    )
    

    【讨论】:

    • 我使用 plydata 进行操作,因为它对我来说更快,但您可以使用直接 pandas 来完成。
    • 你觉得 plydata 比 dfplyr 更好吗?我知道它们是 Dplyr 实现的一些变体
    • @runningbirds,我有点偏见,因为我创建了 plotnine 和 plydata。我在其他 dplyr 实现中遇到的主要问题是管理器变量 X 的使用,我发现它很笨重。否则,使用适合你的任何东西。
    • 好的,我感谢 @has2k1 所做的所有工作,plotnine 正在使迁移到 python 变得更容易。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-25
    • 2021-08-11
    相关资源
    最近更新 更多