Matplotlib中如何用单线条连接ax.add_patch绘制的多个矩形
实现方法
在绘制矩形前按蛇形顺序计算所有矩形的中心点并连成直线,后绘制的实心黑色矩形会自动遮挡矩形内部的线段,仅露出矩形之间的连接线条,即可匹配预期效果。
修改后的完整代码如下:
import matplotlib as mpl import matplotlib.pyplot as plt from matplotlib.patches import Rectangle fig, ax = plt.subplots(1) n = 2 line_points = [] # 按蛇形顺序收集所有矩形的中心点坐标 for j in range(n): # 从下往上数,偶数行从左到右取点,奇数行从右到左取点,保证相邻点对应相邻矩形 i_iter = range(n) if j % 2 == 0 else range(n-1, -1, -1) for i in i_iter: center_x = 200 + 200*i + 5*n center_y = 200 + 200*j + 5*n line_points.append((center_x, center_y)) # 先绘制下层的连接线 xs, ys = zip(*line_points) ax.plot(xs, ys, color='black', linewidth=1) # 后绘制上层的实心矩形,自动遮盖矩形范围内的线段 for i in range(0,n): for j in range(0,n): rect = mpl.patches.Rectangle((200+200*i,200+200*j),10*n, 10*n, linewidth=1, edgecolor='black', facecolor='black') ax.add_patch(rect) ax.set_xlim(left = 0, right = 220*n) ax.set_ylim(bottom = 0, top = 220*n) plt.show()
逻辑说明
- 利用matplotlib的图层渲染顺序:先绘制的线条在下层,后绘制的不透明实心矩形在上层,无需手动计算矩形边缘的连线起止坐标,就能得到矩形间的单段连接线
- 蛇形遍历的顺序保证连线依次衔接相邻矩形,直接修改
n的取值即可适配更大尺寸的矩形网格,不需要额外调整连线逻辑。
内容的提问来源于stack exchange,提问作者Wiz123
相关产品推荐
相关产品推荐

