【问题标题】:Confused with histogram plotting in Python对 Python 中的直方图绘图感到困惑
【发布时间】:2017-05-10 21:50:50
【问题描述】:

您好,我正在尝试在 Python 中绘制直方图。 y 轴需要达到 1e+19 的​​值,x 轴需要从 0 到 10。我很困惑,因为我不确定 python 是如何绘制它的。我认为它是在 x 轴上绘制我的 y 轴数据矩阵。

flux_norm= (np.multiply(n,flux))
plt.hist(flux_norm, bins=30)
plt.xlim(0,10)
plt.ylim(0,10**19)
plt.title("Histogram of Normalized Flux")
plt.xlabel("Energy (MeV)")
plt.ylabel("Normalized flux")

上面的代码给了我一个空白图表

flux_norm= (np.multiply(n,flux))
plt.hist(flux_norm, bins=30)
plt.title("Histogram of Normalized Flux")
plt.xlabel("Energy (MeV)")
plt.ylabel("Normalized flux")

上面的代码给了我一个图表,但只将我的 y 轴设置为 2!我的 x 轴在 1e+19

我查看了在 python 上绘制直方图的一般方法,但我找不到与我的案例类似的示例。 请发送帮助

【问题讨论】:

    标签: python python-3.x graph histogram


    【解决方案1】:

    您的第二个代码应该可以正常工作,这会输出以下直方图:

    import matplotlib.pyplot as plt
    import numpy as np
    
    
    flux = np.arange(1,10**19,10**17)
    n = np.arange(0,100,1)
    flux_norm= (np.multiply(n,flux))
    plt.hist(flux_norm, bins = 30)
    ##plt.xlim(0,10)
    ##plt.ylim(0,10**19)
    plt.title("Histogram of Normalized Flux")
    plt.xlabel("Energy (MeV)")
    plt.ylabel("Normalized flux")
    
    plt.show()
    

    【讨论】:

    • Aguiar 我明白了,但这并不是我在绘制大量点时遇到问题,而是我的通量矩阵是一个 7 元素数组,每个元素的值为1e+19 级左右。你知道怎么画图吗?感谢您的帮助!
    • 整个数据中只有 7 个元素?恐怕这太少了,无法在直方图中表示。首先,尝试让matplotlib 选择垃圾箱,通过删除plt.hist(flux_norm, bins = 30) 中的, bins = 30,然后让我们知道发生了什么。
    • Aguiar 好吧,这更有意义我想我只是没有得到直方图的概念,哈哈。但是是的,只有 7 个元素,但老师想要一个直方图。
    【解决方案2】:

    显然,在第一种情况下,在可见范围内没有绘制数据

    plt.xlim(0,10)
    plt.ylim(0,10**19)
    

    这是hist 中的第一个参数x 的工作原理 - 来自matplotlib.pyplot docs

    x : (n,) 数组或 (n,) 数组序列

    输入值,这需要单个数组或数组序列 不要求长度相同

    【讨论】:

    • 由于这是一个直方图,在ylim(0,10**19) 中没有任何价值是很不寻常的,我的猜测是数据没有那么大,然后为y 设置了一个非常高的上限值不放大就不可能看到实际的直方图。
    • @matusko 那么如何指定 y 值?
    • @Katey 直方图不能这样工作,histogram 将始终在 y 轴上显示数据的频率。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-04
    • 1970-01-01
    • 2019-03-14
    • 2013-08-20
    • 2023-03-17
    相关资源
    最近更新 更多