是否可以在没有垂直线伪影的情况下渲染直方图?[复制]

Is it possible to render a histogram without vertical line artifacts? [duplicate]

提问人:FreelanceConsultant 提问时间:11/9/2023 最后编辑:Trenton McKinneyFreelanceConsultant 更新时间:11/10/2023 访问量:56

问:

从下面的屏幕截图中可以看出,我使用 Matplotlib 绘制了一个直方图。仔细观察可以看出有轻微的垂直线伪像。

可能有多种原因。

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

Matplotlib Histogram


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

我用Microsoft Edge浏览器打开了它,看到了同样的效果,如果不是更明显的话。请参见下面的屏幕截图。

这看起来很显然是一个问题,因为单个直方图条被渲染或绘制为单独的块,而不是一些连续的形状。这可能是绘制可缩放矢量图形基元的内在限制。

enter image description here


为了测试(2.),我尝试导出为另一种矢量格式。.我在 Linux 系统而不是 Windows 上比较了这种文件格式(Windows 似乎不支持 eps,至少我无法用我当前安装的任何程序打开它)。eps

我发现:

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

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


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

python matplotlib 直方图

评论

0赞 FreelanceConsultant 11/10/2023
所有链接的问题都没有回答这个问题。有人建议使用矢量图形格式,我已经在这里做过了。另一个同样仅与栅格格式相关。

答:

0赞 FreelanceConsultant 11/9/2023 #1

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