matplotlib中的自动缩放,将不同时间序列绘制在同一图表中

1 投票
2 回答
2559 浏览
提问于 2025-04-18 09:48

我有一个“主”数据表,里面记录了几个词的“极性”值的时间序列。我想专注于其中的4个词,所以我提取了4个单独的数据表,这些数据表包含了相同的时间序列(所有词的时间序列是一样的,但极性值不同)。

我用下面的代码把它们分别画成了4个图。

fig, axes = plt.subplots(nrows=2, ncols=2)
polarity_godzilla.plot(ax=axes[0,0]); axes[0,0].set_title('Godzilla')
polarity_henry_kissinger.plot(ax=axes[0,1]); axes[0,1].set_title('Henry Kissinger')
polarity_bmwi.plot(ax=axes[1,0]); axes[1,0].set_title('BMWi')
polarity_duran_duran.plot(ax=axes[1,1]); axes[1,1].set_title('Duran Duran')

现在,我想把这4个图放在同一个图里,这样我就能更清楚地看到每个图的大小,因为matplotlib的自动缩放可能会让人误解图的大小。

enter image description here

我有两个问题:

1)有没有办法在绘图时设置Y轴的最小值和最大值?

2)我对matplotlib不太熟悉,所以不太知道怎么用不同的颜色、标记和标签把4个变量画在同一个图里。我试过设置nrows = 1,ncols = 1,但什么都画不出来。

谢谢!

2 个回答

1

你可以尝试遍历你的 AxesSubplot 对象,然后调用 autoscale 方法,同时传入 axis 参数:

for ax in axes:
    ax.autoscale(axis='y')
1

axes[i,j].set_ylim([min,max], auto=False) 这段代码是用来设置第 i,j 个图的y轴范围的。auto=False 的意思是让你自己设置的范围不被自动调整。

你可以通过先调用 plt.hold(True) 来在同一个图上画多条线,然后画完所有的图后再调用 plt.show()plt.savefig(filename) 来显示或保存这个图。

plt.plot() 中,你可以作为第三个参数传入颜色代码。这个语法有点复杂(是从MATLAB那边来的),具体的用法可以在 matplotlib.pyplot.plot 的文档中找到。你也可以把这个参数传给 DataFrame.plot,比如可以写成 style='k--'

对于你的情况,我建议试试

fig, ax = plt.axes()
plt.hold(True)
polarity_godzilla.plot(ax=ax, style="k-o", label="Godzilla")
polarity_henry_kissinger(ax=ax, style="b-*", label="Kissinger")
#etc.
plt.legend()  #to draw a legend with the labels you provided
plt.show() #or plt.savefig(filename)

撰写回答