提问人:FreelanceConsultant 提问时间:11/9/2023 最后编辑:Trenton McKinneyFreelanceConsultant 更新时间:11/10/2023 访问量:56
是否可以在没有垂直线伪影的情况下渲染直方图?[复制]
Is it possible to render a histogram without vertical line artifacts? [duplicate]
问:
从下面的屏幕截图中可以看出,我使用 Matplotlib 绘制了一个直方图。仔细观察可以看出有轻微的垂直线伪像。
可能有多种原因。
- VS Code 中的 PDF 呈现会导致伪影,而其他 PDF 阅读器会产生不同的呈现效果
- PDF格式是原因,其他导出格式不显示相同的效果
- 这些伪影是由 Matplotlib 导致的,由于缺少一些配置或选项
- 透明度
为了测试 (1.)我将 pdf 文件从我的 Linux 服务器下载到我正在运行 VS Code 实例的同一台笔记本电脑上。
我用Microsoft Edge浏览器打开了它,看到了同样的效果,如果不是更明显的话。请参见下面的屏幕截图。
这看起来很显然是一个问题,因为单个直方图条被渲染或绘制为单独的块,而不是一些连续的形状。这可能是绘制可缩放矢量图形基元的内在限制。
为了测试(2.),我尝试导出为另一种矢量格式。.我在 Linux 系统而不是 Windows 上比较了这种文件格式(Windows 似乎不支持 eps,至少我无法用我当前安装的任何程序打开它)。eps
我发现:
- EPS 似乎不支持透明度
- 我没有看到任何伪影,但这可能是由于缺乏透明度
为了测试(.4),我关闭了透明度,重新使用pdf格式,发现伪影仍然存在,而且确实比以前更明显。
我的问题是是什么导致了这些伪影,以及如何使用 matplotlib 生成不会导致垂直线伪影的图形?
答:
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。
评论