我有一个Pandas列,其数据对.0001是唯一的我想绘制一个直方图,每个独特的0.0001数据都有一个条形图。我通过以下方式实现了很大的粒度
plt.hist(df['data'], bins=500)
字符串但我希望看到每个唯一值的计数。我该怎么做呢?谢谢你
xvw2m8pv1#
由于您的值是离散的,因此在这些值之间很好地设置bin边界非常重要。如果边界与值重合,则可能会出现奇怪的舍入伪影。下面的例子每个值都有10次,但是值顶部有边界的直方图将最后两个值放入同一个bin中:
import matplotlib.pyplot as plt import numpy as np import pandas as pd df = pd.DataFrame({'data': np.repeat(np.arange(0.0005, 0.0030, 0.0001), 10)}) fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=(15, 4)) ax1.hist(df['data'], bins=np.arange(df['data'].min(), df['data'].max(), 0.0001), ec='w') ax1.set_title('bin boundaries on top of the values') ax2.hist(df['data'], bins=np.arange(df['data'].min() - 0.00005, df['data'].max() + 0.0001, 0.0001), ec='w') ax2.set_title('bin boundaries in-between the values') plt.show()
字符串
的数据请注意,边界位于两半的版本也将x刻度很好地放置在容器的中心。
vsmadaxz2#
您可以指定bin,而不是指定bin的数量bins=500:
bins=500
plt.hist(df['data'], bins=np.arange(df['data'].min(), df['data'].max(), 0.0001) )
y1aodyip3#
使用Counter不是更容易吗?
Counter
from collections import Counter cntr = Counter(df['data']) plt.bar(cntr.keys(),cntr.values())
字符串通过这种方式,您不必指定bin宽度 * 先验 *。
3条答案
按热度按时间xvw2m8pv1#
由于您的值是离散的,因此在这些值之间很好地设置bin边界非常重要。如果边界与值重合,则可能会出现奇怪的舍入伪影。下面的例子每个值都有10次,但是值顶部有边界的直方图将最后两个值放入同一个bin中:
字符串
的数据
请注意,边界位于两半的版本也将x刻度很好地放置在容器的中心。
vsmadaxz2#
您可以指定bin,而不是指定bin的数量
bins=500
:字符串
y1aodyip3#
使用
Counter
不是更容易吗?字符串
通过这种方式,您不必指定bin宽度 * 先验 *。