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

cld4siwp  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(106)

此问题在此处已有答案

Bar plot with irregular spacing(1个答案)
Why is the plotted line blurry?(1个答案)
11天前关闭。
正如下面的截图所示,我用Matplotlib绘制了一个直方图,仔细观察可以发现有轻微的垂直线伪影。
原因可能有很多。

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


的数据
为了测试(1.),我从我的Linux服务器上下载了pdf文件到我运行VS代码示例的同一台笔记本电脑上。
我用微软Edge浏览器打开它,看到了同样的效果,如果不是更明显的话。见下图。

  • 很明显,这是由于将单个直方图条渲染或绘制为单个块而不是连续形状所导致的问题。这可能是绘制可缩放矢量图形图元的固有限制。*



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

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

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

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

2cmtqfgy

2cmtqfgy1#

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

相关问题