Python:当保存为.pdf或.png时,Delaunay三角形顶点不会“排列”

时间:2018-03-16 13:20:58

标签: python matplotlib delaunay

我使用scipy.spatial创建了一组Delaunay三角形。

from matplotlib import pyplot as plt
import matplotlib
from skimage import io
from scipy.spatial import Delaunay
import numpy as np
from PIL import Image
from scipy.ndimage import rotate

h = 700
w = 700
npts = 500
pts = np.zeros((npts,2))
pts[:,0] = np.random.randint(0,w,npts)
pts[:,1] = np.random.randint(0,h,npts)

tri = Delaunay(pts)
centers = np.sum(pts[tri.simplices], axis=1, dtype='int')/3.0

#plt.figure()
fig, ax = plt.subplots()
plt.xlim(0, w)
plt.ylim(0, h)


for i in range(0,len(pts[tri.simplices])-1):
    temp_tri = plt.Polygon(pts[tri.simplices][i], color = colors[i]/256) #colors variable is a numpy.ndarray variable that contains RGB values
    plt.gca().add_patch(temp_tri)

plt.gca().set_aspect('equal')
plt.axis('off')

plt.savefig('test.pdf', bbox_inches = 'tight', dpi=fig.dpi)
plt.show()

在屏幕上,输出符合我的意图。但是,当我将其保存为pdf或png时,Delaunay三角形的顶点不匹配(当我通过plt.show()查看它们时它们会这样做)

下图是整个图片的一部分,只是为了突出顶点不匹配的位置。

Delaunay triangles with vertices that do not match.

我发现有关plt.show()和fitsave()显示的不同图像问题的建议很少说我应该匹配dpi,我已经完成了。

请告知我应该尝试什么。非常感谢你!

1 个答案:

答案 0 :(得分:0)

我无法说明为什么它无法为三角形生成正确的点,但一般情况下,从顶点创建PolyCollection可能更好,而不是单个三角形。

在这种情况下,问题不会出现。

pc = PolyCollection(pts[tri.simplices], 
                    facecolors=np.random.rand(len(pts[tri.simplices]),3),
                    edgecolor="face",linewidth=0.1)
plt.gca().add_collection(pc)

enter image description here

这里看到一些剩余的重叠,这是由于线宽。较小的线宽在pdf中看起来会更好,例如linewidth=0.01,但可能导致" white"屏幕上的图形中的线条。您可以使用该参数,直到您对结果感到满意为止。

enter image description here