具有条件颜色的Pyplot曲线

时间:2018-02-13 11:17:32

标签: python matplotlib colors conditional-statements

标题可能看似简单,但我不知道实现目标的最佳方法是什么。

所以我把数据存储在列表中:

  • T,一个常见的时间序列
  • 数据1
  • 数据2
  • 依旧......

这给了我这个与X和Y共享的情节。

My plot

如您所见,我显示了3个信号周期(60 Hz)。有4个脉冲阶段和一个静止阶段。

  • Pulse1:t = [0:2]
  • Pulse2:t = [2:4]
  • Pulse3:t = [4:6]
  • Pulse4:t = [6:8]
  • 休息:t = [8:16.67]

我希望每个阶段都有不同的颜色。此外,如果在一个阶段中,一个通道没有脉冲,他将采取其余状态的颜色。 例如,上图中的通道2(从顶部!)没有脉冲直到第4阶段。所以在t = [0:6]之间曲线应该与t = [8:16.67]之间的颜色相同。

此外,我正在寻找解决问题的方法,以避免在+5和-5之间重叠。

感谢您的帮助!

修改

示例数据+代码:

Time = [3000.0, 3000.0, 3000.3, 3000.3, 3000.35, 3000.35, 3001.55, 3001.55, 3002.0, 3002.0, 3002.3, 3002.3, 3002.35, 3002.35, 3003.55, 3003.55, 3004.0, 3004.0, 3004.3, 3004.3, 3004.35, 3004.35, 3005.55, 3005.55, 3006.0, 3006.0, 3006.3, 3006.3, 3006.35, 3006.35, 3007.55, 3007.55, 3008.0, 3016.67, 3016.67, 3016.97, 3016.97, 3017.02, 3017.02, 3018.22, 3018.22, 3018.67, 3018.67, 3018.97, 3018.97, 3019.02, 3019.02, 3020.22, 3020.22, 3020.67, 3020.67, 3020.97, 3020.97, 3021.02, 3021.02, 3022.22, 3022.22, 3022.67, 3022.67, 3022.97, 3022.97, 3023.02, 3023.02, 3024.22, 3024.22, 3024.67, 3033.34, 3033.34, 3033.64, 3033.64, 3033.69, 3033.69, 3034.89, 3034.89, 3035.34, 3035.34, 3035.64, 3035.64, 3035.69, 3035.69, 3036.89, 3036.89, 3037.34, 3037.34, 3037.64, 3037.64, 3037.69, 3037.69, 3038.89, 3038.89, 3039.34, 3039.34, 3039.64, 3039.64, 3039.69, 3039.69, 3040.89, 3040.89, 3041.34]
Sig1 = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -2.7, -2.7, 0.0, 0.0, 0.675, 0.675, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -2.7, -2.7, 0.0, 0.0, 0.675, 0.675, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -2.7, -2.7, 0.0, 0.0, 0.675, 0.675, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
Sig2 = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -4.6, -4.6, 0.0, 0.0, 1.15, 1.15, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -4.6, -4.6, 0.0, 0.0, 1.15, 1.15, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -4.6, -4.6, 0.0, 0.0, 1.15, 1.15, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
Sig3 = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -1.2, -1.2, 0.0, 0.0, 0.3, 0.3, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -1.2, -1.2, 0.0, 0.0, 0.3, 0.3, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -1.2, -1.2, 0.0, 0.0, 0.3, 0.3, 0.0, 0.0]
Sig4 = [0.0, 1.15, 1.15, 0.0, 0.0, -0.2875, -0.2875, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.15, 1.15, 0.0, 0.0, -0.2875, -0.2875, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.15, 1.15, 0.0, 0.0, -0.2875, -0.2875, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
Sig5 = [0.0, 1.15, 1.15, 0.0, 0.0, -0.2875, -0.2875, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.15, 1.15, 0.0, 0.0, -0.2875, -0.2875, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.15, 1.15, 0.0, 0.0, -0.2875, -0.2875, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
Sig6 = [0.0, -2.3, -2.3, 0.0, 0.0, 0.575, 0.575, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -2.3, -2.3, 0.0, 0.0, 0.575, 0.575, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -2.3, -2.3, 0.0, 0.0, 0.575, 0.575, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
Sig7 = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 4.6, 4.6, 0.0, 0.0, -1.15, -1.15, 0.0, 0.0, 2.7, 2.7, 0.0, 0.0, -0.675, -0.675, 0.0, 0.0, 1.2, 1.2, 0.0, 0.0, -0.3, -0.3, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 4.6, 4.6, 0.0, 0.0, -1.15, -1.15, 0.0, 0.0, 2.7, 2.7, 0.0, 0.0, -0.675, -0.675, 0.0, 0.0, 1.2, 1.2, 0.0, 0.0, -0.3, -0.3, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 4.6, 4.6, 0.0, 0.0, -1.15, -1.15, 0.0, 0.0, 2.7, 2.7, 0.0, 0.0, -0.675, -0.675, 0.0, 0.0, 1.2, 1.2, 0.0, 0.0, -0.3, -0.3, 0.0, 0.0]

f, ax = plt.subplots(7, sharex=True, sharey=True, figsize=(20,10))
ax[0].set_title("My title")
f.subplots_adjust(hspace=0)
plt.setp([a.get_xticklabels() for a in f.axes[:-1]], visible=False)

ax[0].plot(Time, Sig1, label = "signal 1")
ax[1].plot(Time, Sig2, label = "signal 2")
ax[2].plot(Time, Sig3, label = "signal 3")
ax[3].plot(Time, Sig4, label = "signal 4")
ax[4].plot(Time, Sig5, label = "signal 5")
ax[5].plot(Time, Sig6, label = "signal 6")
ax[6].plot(Time, Sig7, label = "signal 7")

f.text(0.5, 0.04, 'Time (ms)', ha='center')
f.text(0.04, 0.5, 'my Y axes label', va='center', rotation='vertical')

plt.show()

此示例将为您提供我添加的相同数字(可能还有一个或两个以上的子图)。我只是更改了名称,因此愚蠢的命名:p 我还想补充一点,每个子图都应该有一个带有labbel的图例(即附近写有名字信号的颜色线);并且还应该在图表的侧面放置一个颜色图例,如下所示:

  • 色线第1阶段
  • 色线...
  • color lineResting阶段

0 个答案:

没有答案