使用分箱 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 制作条形图的主要内容,如果未能解决你的问题,请参考以下文章