【问题标题】:Column histograms in PandasPandas 中的列直方图
【发布时间】:2014-08-22 12:35:57
【问题描述】:

假设我有一个如下数据框:

     A B C D
s1   1 2 4 2
s2   2 1 4 3
s3   1 4 1 3

我想要一个 显示每列值的直方图的条形图。也就是说,条形图显示 每列直方图 在 x 轴上彼此相邻,直方图(列)之间有间距。换句话说,这将是一个两级条形图,其中对于数据框中的每一列,我们都有代表该列的直方图的条形图。

如果它很重要,我们可以假设每列具有的可能值的数量是已知的并且对于每列都是恒定的(例如范围[0,5]

当我尝试这样做时:

df.plot(kind='bar')

我得到的东西与我想要的完全不同(x 刻度对应于行,而不是 [columns: [value0, value1, valueN])。最接近我想要的“精神”是:

df.plot(kind='density')

但我正在寻找每列的直方图描述,而不是 PDF 的叠加。

更新

希望一个例子有所帮助。我正在寻找类似下面的图(code here),但不是每组显示两个分数,而是显示我的数据框中每列值的直方图

                   

【问题讨论】:

  • 在箱形图中,X 轴包含分类数据。所以规模没有任何意义。一般来说,不同系列的取值范围会有所不同,那么您究竟想用 x 轴传达什么?重新缩放到恒定大小?如果是这样,为什么不做多个情节?如果不重新缩放,您如何设想 X 轴工作?

标签: python matplotlib pandas


【解决方案1】:

此演示文稿不会重新缩放,它会水平平移各个直方图以使它们不重叠,然后用列名称(中值)而不是表示比例来标记 X 轴。

from pandas import DataFrame
from numpy.random import randn
sample = 1000
df = DataFrame(randn(sample, 8))
accum1 = 0
accum2 = 0
spacer = 1
MyTics = []    
for colname in df.columns:
    TransformedValues = df[colname] - accum1 + accum2
    MyTics.extend([TransformedValues.median()])
    axs = (TransformedValues).hist()
    accum1 += df[colname].min()  
    accum2 += df[colname].max() + spacer    
axs.set_xticks(MyTics)
axs.set_xticklabels(df.columns)   

【讨论】:

    【解决方案2】:

    有numpy的histogram函数,还有matplotlib的histogram plotting function 'hist'

    【讨论】:

    • 谢谢。我当然知道。我想要的是在彼此旁边绘制多个histograms(每列一个)。从技术上讲,它是一个条形图(每列有多个条形表示每列中的一个直方图)。
    • 这个答案并不比仅链接的答案好,你能用示例代码和图像详细说明一下吗,还表明它可以像 OP 要求的那样与熊猫一起使用
    • weemattisnot 和 @EdChum - 我对 OP 做了一些改进。希望现在清楚一点。
    • 我现在明白了,对不起,我之前误解了...除了滚动你自己,使用np.histogram()(获取列高)和plt.bar()(绘制交错条形图),我不知道有什么快速技巧可以做你想做的事。 plt.bar() 制作交错条形图并不难。例如,这个example 展示了如何。
    猜你喜欢
    • 2015-10-12
    • 2012-10-19
    • 1970-01-01
    • 1970-01-01
    • 2016-06-06
    • 2014-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多