Matplotlib直方图,带有收集箱,可实现高价值

Matplotlib直方图,带有收集箱,可实现高价值,第1张

Matplotlib直方图,带有收集箱,可实现高价值

Numpy具有处理此问题的便捷功能:

np.clip
。尽管名称听起来像什么,但它不会
删除
值,只是将它们限制在您指定的范围内。基本上,它是内嵌Artem的“脏黑客”。您可以按原样保留值,但是在
hist
调用中,只需将数组包装在
np.clip
调用中,就像这样

plt.hist(np.clip(values_A, bins[0], bins[-1]), bins=bins)

这样做有很多好处,原因如下:

  1. 它的 方式 更快-至少对于大量元素。Numpy在C级别上工作。对python列表进行 *** 作(如Artem的列表理解中所述)对每个元素都有很多开销。基本上,如果您可以选择使用numpy,则应该这样做。

  2. 您可以在需要的地方做正确的事,从而减少了在代码中出错的机会

  3. 您不需要保留数组的第二个副本,这可以减少内存使用量(这一行内除外),并进一步减少出错的机会。

  4. 使用值

    bins[0], bins[-1]
    而不是对值进行硬编码可减少再次犯错的机会,因为您可以在
    bins
    定义的位置更改箱。您无需记住在拨打电话
    clip
    或在其他任何地方进行更改。

因此,按照OP中的说明将它们放在一起:

import matplotlib.pyplot as pltimport numpy as npdef plot_histogram_01():    np.random.seed(1)    values_A = np.random.choice(np.arange(600), size=200, replace=True)    values_B = np.random.choice(np.arange(600), size=200, replace=True)    bins = np.arange(0,350,25)    fig, ax = plt.subplots(figsize=(9, 5))    _, bins, patches = plt.hist([np.clip(values_A, bins[0], bins[-1]),np.clip(values_B, bins[0], bins[-1])],          # normed=1,  # normed is deprecated; replace with density          density=True,          bins=bins, color=['#3782CC', '#AFD5FA'], label=['A', 'B'])    xlabels = bins[1:].astype(str)    xlabels[-1] += '+'    N_labels = len(xlabels)    plt.xlim([0, 325])    plt.xticks(25 * np.arange(N_labels) + 12.5)    ax.set_xticklabels(xlabels)    plt.yticks([])    plt.title('')    plt.setp(patches, linewidth=0)    plt.legend(loc='upper left')    fig.tight_layout()plot_histogram_01()


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5650213.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存