【问题标题】:Remove white traces around contours from tricontourf从 tricontourf 中删除轮廓周围的白色痕迹
【发布时间】:2017-05-21 09:52:44
【问题描述】:

我正在尝试用 Python 制作一个颜色图,除了这个使地图看起来很糟糕的小烦恼之外,我什么都有。

代码很简单。我只是使用值矩阵并使用 tricontourf 绘制它们。我是在我的情节中循环集合并更改边缘颜色和线宽。

我注意到以下内容。假设我想要在每个轮廓周围都有一条细白线,然后我就这样做了。

CS = plt.tricontourf(X,Y,Z, 70, cmap=cm.seismic, antialiased=True)
print CS.collections

for c in CS.collections:
    c.set_edgecolor('white')
    c.set_linewidth(1)

plt.colorbar()  
plt.show()

得到

现在显然我们看到这个并说,轮廓周围的白线看起来很糟糕,让我们摆脱它们。您可以通过多种方式执行此操作,可能通过将 linewidth=0 或颜色设置为“无”。我将在以下代码中同时执行这两项操作。我们有

CS = plt.tricontourf(X,Y,Z, 70, cmap=cm.seismic, antialiased=True)
print CS.collections

for c in CS.collections:
    c.set_edgecolor('none')
    c.set_linewidth(0)

plt.colorbar()  
plt.show()

得到

更好,但你还能看到轮廓的微弱轮廓吗?这只是颜色图的颜色变化 - 这显然是一条穿过每个轮廓的非常轻的线。

有没有办法以某种方式混合颜色图,以免发生这种情况?谢谢。

【问题讨论】:

  • 我使用 plt.contourf 作为轮廓,并在需要时使用 plt.contour 创建线条...我不熟悉 tricontourf...

标签: python python-2.7 matplotlib contour


【解决方案1】:

当您以 pdf 格式保存图片时,问题变得更加明显。随着轮廓数量的增加,图片平滑了,但是pdf还是有问题。

例如:

import numpy as np
import matplotlib.pyplot as plt
from numpy.random import uniform
x = uniform(-2,2,200)
y = uniform(-2,2,200)
z = x*np.exp(-x**2-y**2)
plt.tricontourf(x,y,z, 300, cmap="seismic", antialiased=False)
plt.colorbar()
plt.savefig('stackoverflow/tricontourf.pdf')
plt.savefig('stackoverflow/tricontourf.png', dpi=300)

但在 pdf 中仍然可以看到穿过每个轮廓的非常浅的线条。

部分解决方案是使用 tricontour 而不是 tricontourf 和一些 linewidths 选项:

import numpy as np
import matplotlib.pyplot as plt
from numpy.random import uniform
#Some Data
x = uniform(-2,2,200)
y = uniform(-2,2,200)
z = x*np.exp(-x**2-y**2)

plt.tricontour(x,y,z, 300, cmap="seismic", antialiased=False, linewidths=5)
plt.colorbar()  

plt.savefig('stackoverflow/tricontour.pdf')
plt.savefig('stackoverflow/tricontour.png', dpi=300)

tricontourf 不支持此选项。

【讨论】:

    猜你喜欢
    • 2016-02-21
    • 1970-01-01
    • 1970-01-01
    • 2016-02-16
    • 2021-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多