【问题标题】:Matplotlib histogram Not Creating Specified Number of BinsMatplotlib 直方图未创建指定数量的 bin
【发布时间】:2022-08-12 03:17:22
【问题描述】:

所以现在我有一堆数据,其中 y 值代表记录的强度,x 值是与所述强度相关的波长。目前,我正在尝试绘制给定波长的强度分布,因此在将我的数据过滤到特定波长(或“x”值)后,它看起来像:

           y0        y1       y2  ...       y47       y48       y49
675  0.005513  0.007296  0.00572  ... -0.000084 -0.004105 -0.001181

现在,我尝试使用以下代码从该数据创建直方图:

plt.hist(wavelength_338.iloc[[2], :-1], bins = 5, ec= \'skyblue\')
plt.xlabel(\"Δy (y\\u0305 -y)\")
plt.ylabel(\"Count\")
plt.title(\"Δy Distribution for 338.05 nm\")
plt.show()

请注意,我使用 Freedman-Diaconis 规则计算了垃圾箱的数量。这是情节的链接:https://imgur.com/a/LpEVyVw - 它显然制作了 5 个以上的垃圾箱,我似乎无法弄清楚为什么

  • 我怀疑你确实有五个箱,但你有不止一个直方图。但是没有你的数据很难知道。也许使用numpy.random 制作一个假数据集或删除ec=\'skyblue\'(各个直方图将具有不同的颜色)。

标签: python dataframe matplotlib statistics


【解决方案1】:

您正在选择数据框的一行。该行是一个具有一行 49 列的数据框。 plt.hist 将为每一列绘制一个直方图:

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

wavelength_338 = pd.DataFrame(np.random.randn(5, 50), columns=[f"y{i}" for i in range(50)])
one_row = wavelength_338.iloc[[2], :-1]

该行看起来像: y0 y1 y2 ... y46 y47 y48 2 0.111689 0.038995 0.119713 ... 0.427522 0.549125 0.668667

A histogram looks like:
```python
plt.hist(one_row, bins=5)

您可以转置该行以使其成为具有 49 个元素的一列,然后绘制直方图:

plt.hist(one_row.T, bins=5)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-03
    • 2013-04-03
    • 2016-10-14
    • 2011-10-22
    • 1970-01-01
    • 2016-12-30
    相关资源
    最近更新 更多