x 轴标签在 matplotlib 中消失,基本绘图在 python 中

x axis label disappearing in matplotlib and basic plotting in python

我是 matplotlib 的新手,我发现它非常混乱。我在 matplotlib 教程网站上花了很多时间,但我仍然无法真正理解如何从头开始构建图形。对我来说,这意味着手动完成所有操作......不使用 plt.plot() 函数,而是始终设置图形、轴手柄。

谁能解释一下如何从头开始设置图形?

现在,我有这段代码可以生成双 y 轴图。但是我的 xlabels 消失了,我不知道为什么

fig, ax1 = plt.subplots()
ax1.plot(yearsTotal,timeseries_data1,'r-')
ax1.set_ylabel('Windspeed [m/s]')
ax1.tick_params('y',colors='r')

ax2 = ax1.twinx()
ax2.plot(yearsTotal,timeseries_data2,'b-')
ax2.set_xticks(np.arange(min(yearsTotal),max(yearsTotal)+1))
ax2.set_xticklabels(ax1.xaxis.get_majorticklabels(), rotation=90)
ax2.set_ylabel('Open water duration [days]')
ax2.tick_params('y',colors='b')

plt.title('My title')
fig.tight_layout()
plt.savefig('plots/my_figure.png',bbox_inches='tight')
plt.show()

根据你的代码,它并没有消失,它是由这两个函数设置(覆盖)的:

ax2.set_xticks(np.arange(min(yearsTotal),max(yearsTotal)+1))
ax2.set_xticklabels(ax1.xaxis.get_majorticklabels(), rotation=90)

set_xticks() on the axes will set the locations and set_xticklabels() 将使用字符串标签列表设置 xtick 标签。

因为您使用的是 twinx,所以仅在原始轴 (ax1) 上操作是有意义的。 此外,在您调用 ax1.xaxis.get_majorticklabels() 的地方没有定义滴答标签。

如果你想手动设置刻度和刻度标签,你可以使用你自己的数据来这样做(虽然我不知道为什么你更喜欢这个而不是使用自动标签)通过指定一个列表或数组

ticks = np.arange(min(yearsTotal),max(yearsTotal)+1)
ax1.set_xticks(ticks)
ax1.set_xticklabels(ticks)

这里的ticklabels和tickposition是一样的,你也可以直接做

ax1.set_xticks(np.arange(min(yearsTotal),max(yearsTotal)+1))
plt.setp(ax1.get_xticklabels(), rotation=70)

完整示例:

import matplotlib.pyplot as plt
import numpy as np; np.random.seed(1)

yearsTotal = np.arange(1977, 1999)
timeseries_data1 = np.cumsum(np.random.normal(size=len(yearsTotal)))+5
timeseries_data2 = np.cumsum(np.random.normal(size=len(yearsTotal)))+20

fig, ax1 = plt.subplots()
ax1.plot(yearsTotal,timeseries_data1,'r-')
ax1.set_ylabel('Windspeed [m/s]')
ax1.tick_params('y',colors='r')
ax1.set_xticks(np.arange(min(yearsTotal),max(yearsTotal)+1))
plt.setp(ax1.get_xticklabels(), rotation=70)

ax2 = ax1.twinx()
ax2.plot(yearsTotal,timeseries_data2,'b-')
ax2.set_ylabel('Open water duration [days]')
ax2.tick_params('y',colors='b')

plt.title('My title')
fig.tight_layout()
plt.show()