是否可以渲染没有垂直线伪影的直方图? [重复]

问题描述 投票:0回答:1

如下面的屏幕截图所示,我使用 Matplotlib 绘制了直方图。仔细检查可以发现有轻微的垂直线伪影。

可能有多种原因。

  1. VS Code 中的 PDF 渲染导致伪影,其他 PDF 阅读器产生不同的渲染效果
  2. PDF格式是原因,其他导出格式不显示相同效果
  3. 这些工件是由 Matplotlib 造成的,因为缺少一些配置或选项
  4. 透明度


为了测试 (1.),我将 pdf 文件从 Linux 服务器下载到了运行 VS Code 实例的同一台笔记本电脑。

我用 Microsoft Edge 浏览器打开它,看到了相同的效果,甚至更明显。请参阅下面的屏幕截图。

它看起来很明显是由于单个直方图条被渲染或绘制为单个块而不是某些连续形状而引起的问题。这可能是可缩放矢量图形绘制方式的内在限制。


为了测试(2.),我尝试导出为另一种矢量格式。

eps
。我在Linux系统而不是Windows上比较了这种文件格式(Windows似乎不支持eps,至少我无法用我当前安装的任何程序打开它)。

我发现:

  • eps 似乎不支持透明度
  • 我没有看到任何伪影,但这可能是由于缺乏透明度造成的

为了测试(.4),我关闭了透明度,返回使用pdf格式,发现伪影仍然存在,而且确实比以前更明显。


我的问题是导致这些伪影的原因是什么,以及如何使用 matplotlib 生成不会导致垂直线伪影的图形?

python matplotlib histogram
1个回答
0
投票

原因确实与 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。

© www.soinside.com 2019 - 2024. All rights reserved.