用添加的边缘颜色勾勒出的直方图

92

我在 Jupyter(Python 2) 中绘制了一个直方图,期望看到我的条形图轮廓,但实际上并没有显示。

enter image description here

我使用了以下代码:

import matplotlib.pyplot as plt
from numpy.random import normal
gaussian_numbers = normal(size=1000)
plt.hist(gaussian_numbers)
plt.title("Gaussian Histogram")
plt.xlabel("Value")
plt.ylabel("Frequency")
plt.show()

2
对于我来说,运行你的代码时,线条是存在的。你修改了默认线宽吗?第二个猜测是边缘颜色可能与条形颜色相同。(尝试调用:plt.hist(gaussian_numbers, linewidth=1, edgecolor='r')。 - Joma
12
有些人默认可以看到轮廓线,而有些人则不行,原因是他们使用不同版本的matplotlib。提问者使用的是matplotlib 2.0, 而Joma和@James使用的是matplotlib 1.5。在matplotlib 2.0中使用 edgecolor = "k" 确实可以将线条带回来。 - ImportanceOfBeingErnest
2个回答

176

看起来您的linewidth设置为零,或者edgecolor被设置为'none'。Matplotlib在2.0版本中更改了这些默认值。尝试使用:

plt.hist(gaussian_numbers, edgecolor='black', linewidth=1.2)

在此输入图片描述


请参考@ImportanceOfBeingErnest的评论,了解为什么会这样。 - honza_p
7
你是如何了解edgecolor的?在文档中没有提到它。 - Atcold
9
您的文档链接中,最后一节是“其他参数”,其中包含 **kwargskwargs 旁边的链接是补丁文档。这表明可以将可应用于补丁的任何参数作为关键字参数传递给 hist,包括 edgecolor - James
2
是的,kawrgs 是 matplotlib 中所有图形共有的一组参数。他们这样做是为了避免将它们全部复制粘贴到每个页面上。 - NoName

0
如果你想在当前运行时(例如当前的Jupyter内核)中为所有直方图显示黑色边缘颜色,你可以使用rcParams来实现。由于直方图实际上是在底层使用条形图(调用.bar),而条形图又会在Axes上添加Rectangle patches,所以要设置为True的关键是'patch.force_edgecolor'
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import rcParams
rcParams['patch.force_edgecolor'] = True   # show edgecolor

gaussian_numbers = np.random.default_rng(0).normal(0, 1, 1000)
plt.hist(gaussian_numbers);

img

相关的是,尽管edgecolorlinewidthalpha等在.hist参数中没有列出,但它们可以在矩形属性中找到(因为这些参数会改变条形的绘制方式)。这一点尤其有用,特别是当你使用其他使用matplotlib绘制直方图的库,如pandas、seaborn等。然后将补丁参数传递给改变facecolor、alpha、edgecolor等。
s = pd.Series(gaussian_numbers)
s.plot.hist(ec='k', alpha=0.5, fc='r')   # light-red bars with black outline

在相反的方向上,如果你不想显示条形图的轮廓,可以传递ec='none'
plt.hist(gaussian_numbers, ec='none');

无论rcParams设置如何,这都不会绘制边缘颜色。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接