Matplotlib:如何从列表中绘制数据,添加两个 y 轴?
Matplotlib: how to plot data from lists, adding two y-axes?
我需要用 matplotlib
制作一些情节,但我很不擅长。我有五个 lists
,每个包含 100
个值。它们的值因以下因素而异:
我希望能够从中生成两个 line-and-marker
图表:
- 第一个图涉及清单 1、2、3 和 4,并且有 两个 y 轴。列表 1、2 和 3 依赖于常规 y 轴,而列表 4 依赖于 添加的 y 轴,如下所示:
- 第二个必须仅绘制列表 4 和 5,但使用常规 y 轴。
在继续之前,我需要将每个 list
变成 numpy array
吗?无论如何,我没弄清楚如何用 matplotlib
进行绘图。任何帮助都感激不尽。谢谢!
你只需要制作一个twinx
axes to plot list 4
on a separate y axis. You can see an example here。
这是一个简短的脚本,可以执行您想要的操作。在这种情况下无需转换为 numpy
数组。
import matplotlib.pyplot as plt
# Some sample lists
l1 = [0.7,0.8,0.8,0.9,0.8,0.7,0.6,0.9,1.0,0.9]
l2 = [0.2,0.3,0.1,0.0,0.2,0.1,0.3,0.1,0.2,0.1]
l3 = [0.4,0.6,0.4,0.5,0.4,0.5,0.6,0.4,0.5,0.4]
l4 = [78,87,77,65,89,98,74,94,85,73]
l5 = [16,44,14,55,34,36,76,54,43,32]
# Make a figure
fig = plt.figure()
# Make room for legend at bottom
fig.subplots_adjust(bottom=0.2)
# The axes for your lists 1-3
ax1 = fig.add_subplot(211)
# A twin axis for list 4. This shares the x axis, but has a separate y axis
ax2 = ax1.twinx()
# Plot lines 1-3
line1 = ax1.plot(l1,'bo-',label='list 1')
line2 = ax1.plot(l2,'go-',label='list 2')
line3 = ax1.plot(l3,'ro-',label='list 3')
# Plot line 4
line4 = ax2.plot(l4,'yo-',label='list 4')
# Some sensible y limits
ax1.set_ylim(0,1)
ax2.set_ylim(0,100)
# Your second subplot, for lists 4&5
ax3 = fig.add_subplot(212)
# Plot lines 4&5
ax3.plot(l4,'yo-',label='list 4')
line5 = ax3.plot(l5,'mo-',label='list 5')
# To get lines 1-5 on the same legend, we need to
# gather all the lines together before calling legend
lines = line1+line2+line3+line4+line5
labels = [l.get_label() for l in lines]
# giving loc a tuple in axes-coords. ncol=5 for 5 columns
ax3.legend(lines, labels, loc=(0,-0.4), ncol=5)
ax3.set_xlabel('events')
# Display the figure
plt.show()
import matplotlib.pyplot as plt
l1 = [0.1,0.2,0.3,0.5,0.8,1.7,3.6,6.9,9.0,3.9]
l2 = [100,80,70,40,30,20,10,8,5,3]
fig = plt.figure()
fig.subplots_adjust(bottom=0.2)
ax1 = fig.add_subplot(211)
ax2 = ax1.twinx()
line1 = ax1.plot(l1,'bo-',label='list 1', color="blue")
line2 = ax2.plot(l2,'yo-',label='list 2', color="green")
ax1.set_xlabel('X-axis', color="red")
ax1.set_ylabel('Y1-axis', color="blue")
ax2.set_ylabel('Y2-axis', color="green")
plt.show()
我需要用 matplotlib
制作一些情节,但我很不擅长。我有五个 lists
,每个包含 100
个值。它们的值因以下因素而异:
我希望能够从中生成两个 line-and-marker
图表:
- 第一个图涉及清单 1、2、3 和 4,并且有 两个 y 轴。列表 1、2 和 3 依赖于常规 y 轴,而列表 4 依赖于 添加的 y 轴,如下所示:
- 第二个必须仅绘制列表 4 和 5,但使用常规 y 轴。
在继续之前,我需要将每个 list
变成 numpy array
吗?无论如何,我没弄清楚如何用 matplotlib
进行绘图。任何帮助都感激不尽。谢谢!
你只需要制作一个twinx
axes to plot list 4
on a separate y axis. You can see an example here。
这是一个简短的脚本,可以执行您想要的操作。在这种情况下无需转换为 numpy
数组。
import matplotlib.pyplot as plt
# Some sample lists
l1 = [0.7,0.8,0.8,0.9,0.8,0.7,0.6,0.9,1.0,0.9]
l2 = [0.2,0.3,0.1,0.0,0.2,0.1,0.3,0.1,0.2,0.1]
l3 = [0.4,0.6,0.4,0.5,0.4,0.5,0.6,0.4,0.5,0.4]
l4 = [78,87,77,65,89,98,74,94,85,73]
l5 = [16,44,14,55,34,36,76,54,43,32]
# Make a figure
fig = plt.figure()
# Make room for legend at bottom
fig.subplots_adjust(bottom=0.2)
# The axes for your lists 1-3
ax1 = fig.add_subplot(211)
# A twin axis for list 4. This shares the x axis, but has a separate y axis
ax2 = ax1.twinx()
# Plot lines 1-3
line1 = ax1.plot(l1,'bo-',label='list 1')
line2 = ax1.plot(l2,'go-',label='list 2')
line3 = ax1.plot(l3,'ro-',label='list 3')
# Plot line 4
line4 = ax2.plot(l4,'yo-',label='list 4')
# Some sensible y limits
ax1.set_ylim(0,1)
ax2.set_ylim(0,100)
# Your second subplot, for lists 4&5
ax3 = fig.add_subplot(212)
# Plot lines 4&5
ax3.plot(l4,'yo-',label='list 4')
line5 = ax3.plot(l5,'mo-',label='list 5')
# To get lines 1-5 on the same legend, we need to
# gather all the lines together before calling legend
lines = line1+line2+line3+line4+line5
labels = [l.get_label() for l in lines]
# giving loc a tuple in axes-coords. ncol=5 for 5 columns
ax3.legend(lines, labels, loc=(0,-0.4), ncol=5)
ax3.set_xlabel('events')
# Display the figure
plt.show()
import matplotlib.pyplot as plt
l1 = [0.1,0.2,0.3,0.5,0.8,1.7,3.6,6.9,9.0,3.9]
l2 = [100,80,70,40,30,20,10,8,5,3]
fig = plt.figure()
fig.subplots_adjust(bottom=0.2)
ax1 = fig.add_subplot(211)
ax2 = ax1.twinx()
line1 = ax1.plot(l1,'bo-',label='list 1', color="blue")
line2 = ax2.plot(l2,'yo-',label='list 2', color="green")
ax1.set_xlabel('X-axis', color="red")
ax1.set_ylabel('Y1-axis', color="blue")
ax2.set_ylabel('Y2-axis', color="green")
plt.show()