python - ax[1] 图未显示
问题描述
我正在尝试在循环中创建多个图形。第一个循环ax[0]
通过添加某些图(在本例中为两个)创建上图( ),同时第二个(ax[1]
)创建下图,只有一个图。
在第二个循环的第一次迭代之后,图形被保存,第二个图形(ax[1]
)被重置。重复该过程,直到达到第二个循环的最后一次迭代。
for i in objetos: # Each object contains first upper figure info as lists of lists
data_sets = i.getProcesados() # For labeling
fechas = i.getFechas() # List of dates
promedios = i.getPromedios() # List of values
agregado = i.getAgregado() # For labeling
fig, ax = plt.subplots(2, 1, figsize = (18,13), sharex = True)
fig.subplots_adjust(hspace=0)
# FIRST LOOP -----> CREATES THE UPPER FIGURE ---------------------------------
for fecha,valor,label in zip(fechas,promedios,data_sets):
ax[0].plot_date(fecha, valor, label = label)
ax[0].legend(framealpha=1, borderpad = 0.7, frameon = True,
labelspacing = 0.7, fontsize = 17, loc='best')
# First axis (ax[0]) configuration:
x_minima = int(min([j[0] for j in fechas]))
x_maxima = int(max([j[-1] for j in fechas]))
ax[0].set_xticks(range((x_minima),(int(x_maxima)),60))
ax[0].set_xlim(x_minima,x_maxima)
ax[0].tick_params(labelsize=17)
months = mdates.MonthLocator(interval=2)
months_fmt = mdates.DateFormatter('%m')
ax[0].xaxis.set_minor_locator(months)
ax[0].xaxis.set_minor_formatter(months_fmt)
ax[0].grid(axis='y')
ax[0].grid(which='minor')
ax[0].set_title((i.getAgregado() + " (" + "Zona de " + zona + ")" + "\n"), fontsize = 24)
ax[0].set_ylabel("Deformación (cm)", fontsize = 22, labelpad = 11)
# SECOND LOOP -----> CREATES THE LOWER FIGURE ---------------------------------
piezos, registros = Piezo.EsteAgregado(agregado) # Object provinding information
for l in piezos.Piezometro:
serie = registros.loc[l]
dates = list(serie.Fechas) # List of dates
values = list(serie.Cota_piezométrica) # List of values
etiqueta = 'P - ' + str(l) # For labeling
ax[1].plot_date(dates, values, '#040405', label = etiqueta, lw=2)
ax[1].set_xlim(x_minima,x_maxima)
# Second axis (ax[1]) configuration:
years = mdates.YearLocator()
years_fmt = mdates.DateFormatter('\n%Y')
ax[1].xaxis.set_major_locator(years)
ax[1].xaxis.set_major_formatter(years_fmt)
months = mdates.MonthLocator(interval=2)
months_fmt = mdates.DateFormatter('%m')
ax[1].xaxis.set_minor_locator(months)
ax[1].xaxis.set_minor_formatter(months_fmt)
ax[1].tick_params(which = 'major', labelsize=17)
ax[1].tick_params(which = 'minor', labelsize=15,)
ax[1].legend(framealpha=1, borderpad = 0.7, frameon = True,
labelspacing = 0.7, fontsize = 18, loc='best')
ax[1].grid(axis='y')
ax[1].grid(which='minor')
ax[1].set_ylabel("Piezometría (m)", fontsize = 22, labelpad = 11)
# Figure saving:
directorio = os.path.dirname(nombreSalida)
dir_destino = os.path.join(directorio, ("Gráficas " + zona + "/"))
if not os.path.isdir(dir_destino):
os.makedirs(dir_destino)
imagen = (i.getAgregado() + '-P-' + str(l) + ".png")
plt.savefig(dir_destino + imagen)
plt.cla() # Close last axis
plt.clf()
plt.close(fig)
然而,仅显示了上图。我不知道会发生什么,所以我真的很感谢某人的帮助。发生的一件奇怪的事情是,它plt.show()
仅在尚未达到第二个循环时才有效;在第二个循环内,plt.show()
不起作用。在嵌套循环之外,正确显示了第二个循环图。
此链接允许查看错误结果。
解决方案
问题解决了。万一有人感兴趣,图中没有显示,因为日期是熊猫格式的。我不得不通过以下代码行将它们转换为 matplotlib 格式(即数字格式):
dates = [date2num(datetime.strptime(i,'%Y-%m-%d')) for i in dates]
推荐阅读
- excel - 如果文件夹已存在,则在文件夹名称中添加下一个数字
- google-chrome - 无法在 chrome 扩展中设置带下划线的 cookie 名称
- performance - gRPC 服务器在以太网上的长响应时间
- minishift - CDK 3.7.0 无法启动
- java - 在 2 个服务器之间传输 InputStream
- php - 使用 League/CSV 导出 CSV 不会编码变音符号
- javascript - 如何将文本框中的用户输入添加到 HTML 列表中
- android - Android Studio 启用 Java8 支持
- mongodb - MongoDB:如何获取超过 30 天的文档?
- docker - 如何在不更改公共 DNS 地址的情况下使用 ECR 中的最新 docker 映像更新 ECS 服务?