如下面的屏幕截图所示,我使用 Matplotlib 绘制了直方图。仔细检查可以发现有轻微的垂直线伪影。
可能有多种原因。
为了测试 (1.),我将 pdf 文件从 Linux 服务器下载到了运行 VS Code 实例的同一台笔记本电脑。
我用 Microsoft Edge 浏览器打开它,看到了相同的效果,甚至更明显。请参阅下面的屏幕截图。
它看起来很明显是由于单个直方图条被渲染或绘制为单个块而不是某些连续形状而引起的问题。这可能是可缩放矢量图形绘制方式的内在限制。
为了测试(2.),我尝试导出为另一种矢量格式。
eps
。我在Linux系统而不是Windows上比较了这种文件格式(Windows似乎不支持eps,至少我无法用我当前安装的任何程序打开它)。
我发现:
为了测试(.4),我关闭了透明度,返回使用pdf格式,发现伪影仍然存在,而且确实比以前更明显。
我的问题是导致这些伪影的原因是什么,以及如何使用 matplotlib 生成不会导致垂直线伪影的图形?
原因确实与 matplotlib 配置选项有关。
可以使用此配置选项解决问题:
histtype='stepfilled'
我碰巧在这个网页上找到了它作为示例:
https://matplotlib.org/stable/gallery/statistics/histogram_histtypes.html
我不太确定为什么这不是默认值。
这是一个示例用法:
(bin_counts, bin_edges, _) = ax.hist(likelihood_values, bins, histtype='stepfilled') #, alpha=0.5
注意:我怀疑只有当垃圾箱数量很大时才会出现伪影。就我而言,它是 100。