大多数pythonic方式绘制多个信号
发布时间:2020-12-20 11:56:29 所属栏目:Python 来源:网络整理
导读:我想将一个或多个信号绘制成一个图. 对于每个信号,可以指定单独的颜色,线宽和线条样式. 如果必须绘制多个信号,则还应提供图例. 到目前为止,我使用以下代码,允许我绘制最多三个信号. import matplotlibfig = matplotlib.figure.Figure(figsize=(8,6))subplot
我想将一个或多个信号绘制成一个图.
对于每个信号,可以指定单独的颜色,线宽和线条样式. 到目前为止,我使用以下代码,允许我绘制最多三个信号. import matplotlib fig = matplotlib.figure.Figure(figsize=(8,6)) subplot = fig.add_axes([0.1,0.2,0.8,0.75]) Signal2,Signal3,legend,t = None,None,None Signal1,= subplot.plot(xDataSignal1,yDataSignal1,color=LineColor[0],linewidth=LineWidth[0],linestyle=LineStyle[0]) if (yDataSignal2 != [] and yDataSignal3 != []): Signal2,= subplot.plot(xDataSignal2,yDataSignal2,color=LineColor[1],linewidth=LineWidth[1],linestyle=LineStyle[1]) Signal3,= subplot.plot(xDataSignal3,yDataSignal3,color=LineColor[2],linewidth=LineWidth[2],linestyle=LineStyle[2]) legend = subplot.legend([Signal1,Signal2,Signal3],[yLabel[0],yLabel[1],yLabel[2]],LegendPosition,labelspacing=0.1,borderpad=0.1) legend.get_frame().set_linewidth(0.5) for t in legend.get_texts(): t.set_fontsize(10) elif (yDataSignal2 != []): Signal2,linestyle=LineStyle[1]) legend = subplot.legend([Signal1,Signal2],yLabel[1]],borderpad=0.1) legend.get_frame().set_linewidth(0.5) for t in legend.get_texts(): t.set_fontsize(10) 是否可以推广该代码,使其更加Pythonic并通过仍然使用matplotlib和subplot支持多达n个信号? 任何建议都非常感谢. 解决方法
一个dicts列表可能是一个很好的解决方案(您甚至可以使用defaultdict来默认颜色和线宽,以防您不想指定它,阅读更多
here)
import matplotlib as mpl import matplotlib.pyplot as plt import numpy as np mysignals = [{'name': 'Signal1','x': np.arange(10,20,1),'y': np.random.rand(10),'color':'r','linewidth':1},{'name': 'Signal2','color':'b','linewidth':3},{'name': 'Signal3','color':'k','linewidth':2}] fig,ax = plt.subplots() for signal in mysignals: ax.plot(signal['x'],signal['y'],color=signal['color'],linewidth=signal['linewidth'],label=signal['name']) # Enable legend ax.legend() ax.set_title("My graph") plt.show() (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |