Anaconda3.exe
首先通过python创建一个矩阵import numpy as npimport matplotlib.pyplot as pltimport matplotlib.transforms as pboximport matplotlib.path as ppathfig = plt.figure()rect = plt.Rectangle((-1, -1), 2, 2, facecolor='#aaaaaa')plt.gca().add_patch(rect)bbox = pbox.Bbox.from_bounds(-1, -1, 2, 2)plt.xlim(-2, 2)plt.ylim(-3,3)plt.show()
接着我们随机生成6条直线data = []lines =[]for i in range(6): verts = (np.random.random((2, 2)) - 0.5) * 3.0 data.append(verts) path = ppath.Path(verts) line, = plt.plot(verts[:, 0], verts[:, 1], color='b') lines.append(line)
在这里我们就完成了题干的设置
下面我们就需要对图中的线段进行区分,并标上不同的颜色,第一种情况,矩阵是个空心的矩阵,关键代码:data = zip(linedata, lines)for dt in data: verts = dt[0] path = ppath.Path(verts) if path.intersects_bbox(bbox, False): dt[1].set_color('red')
当矩阵是实心的话,首先我们要清空,并重建题干的情况:fig.clear()lines = [] fig = plt.figure()rect = plt.Rectangle((-1, -1), 2, 2, facecolor='#aaaaaa')plt.gca().add_patch(rect)bbox = pbox.Bbox.from_bounds(-1, -1, 2, 2)plt.xlim(-2, 2)plt.ylim(-3,3)for verts in linedata: line, = plt.plot(verts[:, 0], verts[:, 1], color='b') lines.append(line)
本节主要是对intersect_bbox 的方法进行探究,完整的代码如下:import numpy as npimport matplotlib.pyplot as pltimport matplotlib.transforms as pboximport matplotlib.path as ppathfig = plt.figure()rect = plt.Rectangle((-1, -1), 2, 2, facecolor='#aaaaaa')plt.gca().add_patch(rect)bbox = pbox.Bbox.from_bounds(-1, -1, 2, 2)plt.xlim(-2, 2)plt.ylim(-3,3)linedata = []lines =[]for i in range(6): verts = (np.random.random((2, 2)) - 0.5) * 3.0 linedata.append(verts) path = ppath.Path(verts) line, = plt.plot(verts[:, 0], verts[:, 1], color='b') lines.append(line)## 用于保存到本地图片from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvascanvas = FigureCanvas(fig)canvas.print_figure('test1.png', dpi=80)data = zip(linedata, lines)for dt in data: verts = dt[0] path = ppath.Path(verts) if path.intersects_bbox(bbox, False): dt[1].set_color('red') canvas = FigureCanvas(fig)canvas.print_figure('test2.png', dpi=80)fig.clear()lines = [] fig = plt.figure()rect = plt.Rectangle((-1, -1), 2, 2, facecolor='#aaaaaa')plt.gca().add_patch(rect)bbox = pbox.Bbox.from_bounds(-1, -1, 2, 2)plt.xlim(-2, 2)plt.ylim(-3,3)for verts in linedata: line, = plt.plot(verts[:, 0], verts[:, 1], color='b') lines.append(line) data = zip(linedata, lines)for dt in data: verts = dt[0] path = ppath.Path(verts) if path.intersects_bbox(bbox): dt[1].set_color('red') canvas = FigureCanvas(fig)canvas.print_figure('test3.png', dpi=80)plt.show()