我正在使用
以下是用于复现问题以及输出图像的一些代码:
PolyCollection
来绘制不同大小的数据。有时,多边形非常小。如果它们太小,它们根本不会被绘制出来。我希望至少能显示轮廓线,这样你就可以知道一些数据存在。有没有设置来控制这个问题?以下是用于复现问题以及输出图像的一些代码:
import matplotlib.pyplot as plt
from matplotlib.collections import PolyCollection
from matplotlib import colors
fig = plt.figure()
ax = fig.add_subplot(111)
verts = []
edge_col = colors.colorConverter.to_rgb('lime')
face_col = [(2.0 + val) / 3.0 for val in edge_col] # a little lighter
for i in range(10):
w = 0.5 * 10**(-i)
xs = [i - w, i - w, i + w, i - w]
ys = [-w, w, 0, -w]
verts.append(list(zip(xs, ys)))
ax.set_xlim(-1, 11)
ax.set_ylim(-2, 2)
ax.add_collection(PolyCollection(verts, lw=3, alpha=0.5, edgecolor=edge_col, facecolor=face_col))
plt.savefig('out.png')
请注意,只有六个多边形是可见的,而应该有十个。
编辑:我知道我可以放大看到其他的,但是我希望在不这样做的情况下能看到一个点或轮廓或其他东西。
编辑2:通过使用PolyCollection
绘制面并使用一系列Line2D
绘制边缘(基于Patol75的答案),可以实现所需的效果。我的应用程序是一个具有许多多边形的matplotlib
动画,因此我希望为了效率而避免使用Line2D
,如果不需要两次绘制图形就更好了,所以我仍然希望得到更好的答案。
ax.add_collection(PolyCollection(verts, lw=3, alpha=0.5, edgecolor=None, facecolor=face_col, zorder=1))
for pts in verts:
ax.add_line(Line2D([pt[0] for pt in pts], [pt[1] for pt in pts], lw=3, alpha=0.5, color=edge_col,
marker='.', ms=1, mec=edge_col, solid_capstyle='projecting', zorder=2))
get_xlim
、get_ylim
、fig.get_size_inches
和fig.dpi
进行计算是一种不错的方法,但这是一个解决问题的变通方法。在实际应用中,我正在进行动画制作,其中轴限可能会发生变化,因此这种方法在这种情况下并不完全适用。形状也有点复杂,但你可以使用顶点计算边界框并将其用于宽度。 - Stanley Bak