使用分箱 X 值 Python 制作条形图

Posted

技术标签:

【中文标题】使用分箱 X 值 Python 制作条形图【英文标题】:Make Bar Chart With Binned X Values Python 【发布时间】:2020-11-07 19:16:35 【问题描述】:

我想制作一个条形图,其中每 10 个 x 值具有分箱值。这是我的 bins 数组:bins = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100] 我不想使用直方图,因为我有要使用的特定 y 值,而不仅仅是分箱值的频率。我有一个包含两列的 pandas 数据框:yardline_100(这些值正在“分箱”,它们总是介于 0 和 100 之间)和epa。我想让我的yardline_100 在 x 上,epa 在 y 上。我该怎么做呢? plt.hist() 只接受一个数据参数。而且我不知道如何使 plt.bar() 使用分箱值。建议?

【问题讨论】:

你想用垃圾箱里的EPA做什么?平均他们?将所有内容绘制为点?求和? 【参考方案1】:

IIUC,你想要这样的东西吗?

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns 

df = pd.DataFrame('yardline_100':np.random.randint(0,100,200), 'epa':np.random.random(200))
df['bin'] = pd.cut(df['yardline_100'], bins=range(0,101,10), labels=[f'l-l+10' for l in range(0,91,10)])

fig,ax = plt.subplots(2,2, figsize=(15,8))
ax=ax.flatten()
sns.stripplot(x='bin', y='epa', data=df, ax=ax[0])
sns.violinplot(x='bin', y='epa', data=df, ax=ax[1])
sns.boxplot(x='bin', y='epa', data=df, ax=ax[2])
sns.barplot(x='bin', y='epa', data=df, ax=ax[3])

输出:


更改条形宽度

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns 

df = pd.DataFrame('yardline_100':np.random.randint(0,100,200), 'epa':np.random.random(200))
df['bin'] = pd.cut(df['yardline_100'], bins=range(0,101,10), labels=[f'l-l+10' for l in range(0,91,10)])

fig,ax = plt.subplots(figsize=(15,8))

sns.barplot(x='bin', y='epa', data=df, ax=ax)

def change_width(ax, new_value) :
    for patch in ax.patches :
        current_width = patch.get_width()
        diff = current_width - new_value

        # we change the bar width
        patch.set_width(new_value)

        # we recenter the bar
        patch.set_x(patch.get_x() + diff * .5)

change_width(ax, 1.)

输出:

【讨论】:

正是我要找的,谢谢!唯一的问题是,有没有办法去除 sns.barplot() 上的条之间的空间?另外,所以我理解正确, sns.barplot() 取平均值,对吗? @lowlyprogrammer 是的。 (seaborn.pydata.org/generated/seaborn.barplot.html)...而且,我添加了一个解决方案,可以更改条形宽度,消除条形之间的空间。

以上是关于使用分箱 X 值 Python 制作条形图的主要内容,如果未能解决你的问题,请参考以下文章

如何制作每个 X 轴项目有两个值的垂直条形图

教你如何用Python制作花式条形图

python - 如何在条形图顶部显示值[重复]

使用 python dict 使用 Plotly express 创建条形图

使用 C3 制作简单的条形图,x 轴上有单独的列

生成python按图分组的条形图时间序列