加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

大多数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()

enter image description here

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读