分组数据的直方图

时间:2019-12-15 21:10:48

标签: python pandas matplotlib

我是Python的新手,要想解决这个问题真的很困难。

我有这样的代码

df = p.read_csv("files/athena-query-1.txt", ";")
ax = df.hist(column="distance", range=[0.0, 0.5], bins=100, by="gate_id")

我只想在单独的图表上看到每个闸门的距离分布。如果有400 gate_id,我想查看400个分布图。

它告诉我axAxesSubplot的集合。当我尝试绘制此图时,只会得到一张不可读的图。我的猜测是,它试图创建单个图表(图?)。

1 个答案:

答案 0 :(得分:0)

编辑:

我转载了一个我认为您可能意味着的最小例子:

#create dataframe with 100 random values of normal distribution for 'distance', and distributing (1,2,3,4) as 'gate_id' evenly among the values: 
df=pd.DataFrame({'distance': scipy.stats.norm.rvs(size=100), 'gate_id': 25*[1,2,3,4]})

df.hist(column='distance', range=[0.0, 0.5], bins=100, by='gate_id')

这将产生一个具有4个子图的图形,对应于'gate_id':

enter image description here

但是,如果我像您提到的那样尝试400,该数字甚至都不会显示。可能是因为它根本不足以容纳400个子图。这就是我推荐下面给出的第一个解决方案示例的原因。


原始:

如果要使用400个单独的分布图,那为什么不使用matplotlib创建400个图形呢?

from matplotlib import pyplot as plt

for i in range(400):
    fig, ax = plt.subplots()
    ax.plot(<dataframe['x']>,<dataframe['y']>)

,您也可以尝试绘制具有许多子图的巨大图形,例如

fig, ( (ax1, ax2, ax3, ...<fill up here>..., ax10), (ax11, ..., ax20), ..., (ax91, ..., ax100)) = plt.subplots(nrows=10, ncols=10)

ax1.bar(<dataframe['x']>,<dataframe['y']>)
...
ax100.bar(<dataframe['x']>,<dataframe['y']>)

这仅适用于100个子图,不确定400个图是否太大。