matplotlib 为什么绘制的线条模糊?

holgip5t  于 2023-05-01  发布在  其他
关注(0)|答案(1)|浏览(321)

我有一个代码,可以创建下面的图:

放大这条线,我们可以看到它不是黑色的,而是黑色的核心,侧面呈灰色/略微透明(见下图)。有没有可能让这条线完全变黑?

下面是用于绘图的代码:

import matplotlib.pyplot as plt
import numpy as np

plt.plot([10,10],[10,20],color='k',linewidth=1)
plt.show()

增加dpi不起作用,我希望线宽保持不变。

bweufnob

bweufnob1#

您看到的效果称为antialiasing,在计算机图形学中很重要,可以使以任何Angular 绘制的线条在以相同粗细绘制时看起来相似。
几乎总是,当以像素计算时,距离的度量值不是整数值。如果没有抗锯齿,x和y位置需要舍入到最近的像素。
plt.plot()(以及类似的函数)有一个可选参数antialiased=,您可以将其设置为False以查看情况。根据您的具体应用程序,这可能对您有用。
这里有一个例子。它使用lw=0.2来更强烈地显示效果。使用较粗的线条,同样的效果仍然存在,但不太明显。注意matplotlib以“points”(1/72英寸,类似于用于指示字体大小的“points”)来测量线条。由于不同的舍入和位置不落在整数像素上,一些线更粗,对角线看起来非常锯齿状。

from matplotlib import pyplot as plt

plt.plot([i // 10 * 10 for i in range(0, 100, 5)], [0, 10] * 10, antialiased=False, color='black', lw=0.2)

放大视图:

PS:下面是一个plt.contour()的例子:

import numpy as np
from matplotlib import pyplot as plt

xs, ys = np.meshgrid(np.linspace(0, 1, 30), np.linspace(0, 1, 20))
zs = np.random.randn(*xs.shape).cumsum(axis=0).cumsum(axis=1)

plt.contour(xs, ys, zs, cmap='Spectral', antialiased=False)
plt.show()

这是它看起来像整体和放大:

我用maptlotlib 3测试了这个。Windows上的5.3,支持“TkAgg”。
另一种方法是将图保存为矢量格式(例如例如.svg)并通过编辑器(如InkScape)进行进一步处理。

相关问题