我使用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()查看它们时它们会这样做)
下图是整个图片的一部分,只是为了突出顶点不匹配的位置。
我发现有关plt.show()和fitsave()显示的不同图像问题的建议很少说我应该匹配dpi,我已经完成了。
请告知我应该尝试什么。非常感谢你!
答案 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)
这里看到一些剩余的重叠,这是由于线宽。较小的线宽在pdf中看起来会更好,例如linewidth=0.01
,但可能导致" white"屏幕上的图形中的线条。您可以使用该参数,直到您对结果感到满意为止。