Matplotlib中重叠曲线"pixelization"如何处理
How to deal with the "pixelization" of overlapping curves in Matplotlib
我有以下问题:当我绘制两条或多条曲线(具有相同的线宽)时,它们看起来 "pixelized" 在它们重叠的区域。
这是一个例子:
x = np.linspace(0, np.pi, 100)
y1 = np.sin(x)
y2 = np.zeros(x.shape)
y2[:51] = np.sin(x[:51])
y2[51:] = 2 - np.sin(x[51:])
fig, ax = plt.subplots(1, 1, figsize=(3,3))
ax.plot(x, y1, lw=4, color='k')
ax.plot(x, y2, lw=4, color='yellow')
plt.show()
据我了解,发生这种情况是因为曲线边缘的像素具有一定程度的透明度,这使它们看起来更加平滑。然而,在重叠曲线的情况下存在这种副作用:第一条曲线的边缘像素通过第二条曲线的边缘像素可见。
如何处理这种副作用?一个想法是增加最后一条曲线的宽度,但是这个解决方案对我来说并不理想,因为我希望曲线在它们不重叠的区域具有完全相同的宽度。
您描述的效果称为抗锯齿。通常希望获得更平滑的图像。您可以针对每个艺术家关闭抗锯齿功能。 (然而,not all 艺术家们真的服从每个后端的设置。)
对于 plot
这可能看起来像
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, np.pi, 100)
y1 = np.sin(x)
y2 = np.zeros(x.shape)
y2[:51] = np.sin(x[:51])
y2[51:] = 2 - np.sin(x[51:])
fig, axes = plt.subplots(1,2, figsize=(6,3))
for aa, ax in zip([True, False], axes.flat):
ax.plot(x, y1, lw=4, color='k', antialiased=aa)
ax.plot(x, y2, lw=4, color='yellow', antialiased=aa)
plt.show()
因此,当关闭抗锯齿功能时,像素要么被线条的相应颜色占用,要么不被占用。
我有以下问题:当我绘制两条或多条曲线(具有相同的线宽)时,它们看起来 "pixelized" 在它们重叠的区域。 这是一个例子:
x = np.linspace(0, np.pi, 100)
y1 = np.sin(x)
y2 = np.zeros(x.shape)
y2[:51] = np.sin(x[:51])
y2[51:] = 2 - np.sin(x[51:])
fig, ax = plt.subplots(1, 1, figsize=(3,3))
ax.plot(x, y1, lw=4, color='k')
ax.plot(x, y2, lw=4, color='yellow')
plt.show()
据我了解,发生这种情况是因为曲线边缘的像素具有一定程度的透明度,这使它们看起来更加平滑。然而,在重叠曲线的情况下存在这种副作用:第一条曲线的边缘像素通过第二条曲线的边缘像素可见。
如何处理这种副作用?一个想法是增加最后一条曲线的宽度,但是这个解决方案对我来说并不理想,因为我希望曲线在它们不重叠的区域具有完全相同的宽度。
您描述的效果称为抗锯齿。通常希望获得更平滑的图像。您可以针对每个艺术家关闭抗锯齿功能。 (然而,not all 艺术家们真的服从每个后端的设置。)
对于 plot
这可能看起来像
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, np.pi, 100)
y1 = np.sin(x)
y2 = np.zeros(x.shape)
y2[:51] = np.sin(x[:51])
y2[51:] = 2 - np.sin(x[51:])
fig, axes = plt.subplots(1,2, figsize=(6,3))
for aa, ax in zip([True, False], axes.flat):
ax.plot(x, y1, lw=4, color='k', antialiased=aa)
ax.plot(x, y2, lw=4, color='yellow', antialiased=aa)
plt.show()
因此,当关闭抗锯齿功能时,像素要么被线条的相应颜色占用,要么不被占用。