【问题标题】:Cannot get histogram to show separated bins with vertical lines无法获得直方图以显示带有垂直线的分隔箱
【发布时间】:2017-07-21 09:38:13
【问题描述】:

烦人的奇怪问题,我还没有在这个网站上找到解决方案(虽然问题已经弹出)

我正在尝试制作一个直方图,其中 bin 具有“条形样式”,其中垂直线将每个 bin 分开,但无论我将 histt​​ype 构造函数更改为什么,我都会得到一个步长填充的直方图。

这是我的代码。注意我正在使用通过 anaconda 安装的 jupyter notebook 和 python 版本 2.7.6

import numpy as np
import matplotlib.pyplot as plt

x = np.random.rand((100)) 
bins = np.linspace(0, 2, 40)
plt.title('Relative Amplitude',fontsize=30)
plt.xlabel('Random Histogram')
plt.ylabel('Frequency',fontsize=30)
plt.hist(x, bins, alpha=0.5, histtype='bar')

plt.legend(loc='upper right',fontsize=30)
plt.xticks(fontsize = 20) 
plt.yticks(fontsize = 20) 
plt.show() 

就是这样,我得到了一个没有垂直线分隔条形的阶梯填充图。烦人的是我前一阵子没有这个问题,显然有些事情发生了变化,我不知道是什么。我也尝试过 histype='barstacked' 。感谢您的帮助

【问题讨论】:

  • 你在使用任何 matplotlib 风格吗?因为我无法重现您的问题。
  • 我正在将 matplotlib 导入到我的笔记本中。我也尝试过使用 %matplotlib 命令。
  • 你在 jupyter notebook 中运行了这个例子吗?
  • 是的,我在 jupyter notebook 中运行它。您是否尝试过重新启动内核并再次运行代码?

标签: python numpy histogram


【解决方案1】:

用你的例子:

import numpy as np
import matplotlib.pyplot as plt

x = np.random.rand((100)) 
bins = np.linspace(0, 2, 40)
plt.title('Relative Amplitude',fontsize=30)
plt.xlabel('Random Histogram')
plt.ylabel('Frequency',fontsize=30)
plt.hist(x, bins, alpha=0.5, histtype='bar', ec='black')

plt.legend(loc='upper right',fontsize=30)
plt.xticks(fontsize = 20) 
plt.yticks(fontsize = 20) 
plt.show() 

生成以下图像:

主要区别在于ec 关键字参数的使用。这是“edgecolor”的缩写。在plt.hist 的文档中,它说除了所有列出的关键字参数之外,plt.hist 还为Patch 初始化器提供关键字参数。 edgecolor 是这些关键字参数之一。这就是为什么它没有在plt.hist 的文档中明确列出的原因。图中的所有条形图都是一个单独的 Patch 对象,因此您是说希望所有条形图都用黑色轮廓绘制(或 matplotlib 行话中的 edgecolor)。

【讨论】:

  • 谢谢内森!我仍然不确定为什么我现在需要添加该命令以及在没有需要之前添加该命令,但如果它有效,它就有效......
  • 关键区别在于ec关键字参数的使用。这缺少edgecolor。在plt.hist 的文档中,它说除了所有列出的关键字参数之外,plt.hist alsoPatch 初始化程序提供关键字参数。 edgecolor 是这些关键字参数之一。这就是为什么它没有在plt.hist 的文档中明确列出的原因。图中的所有条形图都是一个单独的 Patch 对象,因此您是说您希望所有条形图都用黑色轮廓绘制(或 matplotlib 行话中的 edgecolor)。
  • @ngoldbaum 将您的评论添加到您的答案中会非常有帮助,因为您的答案本身需要与 OP 的问题进行仔细比较,以便找出您所做的不同之处。谢谢!
【解决方案2】:

如果我为 edgecolor 参数和 color 参数赋予不同的颜色,它对我有用。 例如:

import numpy as np
import matplotlib.pyplot as plt

x = np.random.rand((100)) 
bins = np.linspace(0, 2, 40)
plt.title('Relative Amplitude',fontsize=30)
plt.xlabel('Random Histogram')
plt.ylabel('Frequency',fontsize=30)
plt.hist(x, bins, alpha=0.5,edgecolor='black',color='steelblue', histtype='bar')

plt.legend(loc='upper right',fontsize=30)
plt.xticks(fontsize = 20) 
plt.yticks(fontsize = 20) 
plt.show() 

【讨论】:

    【解决方案3】:

    您可以在plt.hist 中使用rwidth 参数。 注意我使用的是 matplotlib 版本 '3.4.2'。

    rwidth:float 或 None,默认值:None 条的相对宽度,作为 bin 宽度的一部分。如果没有,自动计算宽度。

    import numpy as np
    import matplotlib.pyplot as plt
    
    x = np.random.rand((100)) 
    bins = np.linspace(0, 2, 40)
    plt.title('Relative Amplitude',fontsize=30)
    plt.xlabel('Random Histogram', fontsize=30)
    plt.ylabel('Frequency',fontsize=30)
    plt.hist(x, bins, rwidth=0.6, alpha=0.5, histtype='bar')# rwidth specify the width of the bars
    # rwidth is an number between 0 and 1
    
    plt.xticks(fontsize=15) 
    plt.yticks(fontsize=15)
    plt.xlim(0,1)
    plt.show() 
    

    Which product this image(click here)

    【讨论】:

      猜你喜欢
      • 2019-10-17
      • 2020-05-14
      • 1970-01-01
      • 2019-08-11
      • 2011-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多