Matplotlib手绘曲线
代码:
from matplotlib import pyplot as plt
# 支持中文
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
class LineDrawer(object):
def __init__(self, line, axis, figure): # 将line(Line2D(matplotlib.artist.Artist)作为该类的一个属性,该类只做好数据处理与传递工作
self.line = line
self.axis = axis
self.figure = figure
# 用于拖拽坐标(AxesSubplot(SubplotBase, matplotlib.axes._axes.Axes))
self.press = None
self.cur_xlim = None
self.cur_ylim = None
self.x0 = None
self.y0 = None
self.x1 = None
self.y1 = None
self.xpress = None
self.ypress = None
# 用于将坐标点的存储
self.lines_x_list = [] # 各分段的总数据
self.lines_y_list = [] # 各分段的总数据
# 撤回的回收线段
self.undo_lines_x_list = []
self.undo_lines_y_list = []
#self.xs = list(line.get_xdata()) # xs属于自定义变量名
#self.ys = list(line.get_ydata())
self.cid_press = self.line.figure.canvas.mpl_connect('button_press_event', self.onPress) # 按下鼠标三键
self.cid_release = self.line.figure.canvas.mpl_connect('button_release_event', self.onRelease) # 释放鼠标三键
#self.cid_release = self.line.figure.canvas.mpl_connect('scroll_event', self.zoom_factory) # 滚轮
def Get_lines_xy_show_From_lines_xy_list(self):
#print(len(self.lines_x_list), len(self.lines_y_list))
self.lines_x_show = [] # 取出已经画好的n段曲线
self.lines_y_show = [] # 取出已经画好的n段曲线
for l in self.lines_x_list:
for x in l:
self.lines_x_show.append(x)
for l in self.lines_y_list:
for y in l:
self.lines_y_show.append(y)
def onPress(self, event):
if event.button == 3: # 鼠标右键 手绘图
self.cid_motion = self.figure