如何调整Matplotlib图表布局以在右侧预留空间显示最新数据标签?
解决Matplotlib图表右侧空间不足,添加最新温湿度数据标签的问题
修改后的完整代码
import pandas as pd from matplotlib import pyplot as plt testdate = "12.12.2022" Raspilog = pd.read_csv(r'path/to/logfile/logger.csv', header=0) Raspilog_CDate = Raspilog[Raspilog.Date == testdate] # 初始化画布,保持电子墨水屏的固定分辨率 fig, ax = plt.subplots(figsize=(2.50, 1.28)) # 绘制温度曲线 ax.plot(Raspilog_CDate.Time, Raspilog_CDate.Temperature, color=(0.93, 0.11, 0.14), linewidth=3) ax.set(ylim=(-10, 30)) # 绘制湿度曲线(双Y轴) ax2 = ax.twinx() ax2.plot(Raspilog_CDate.Time, Raspilog_CDate.Humidity, color="black", linewidth=1.5) ax2.set(ylim=(0, 100)) # 设置X轴刻度 t = [Raspilog_CDate.Time.min(), Raspilog_CDate.Time.max()] plt.xticks(t, t) # 压缩图表X轴范围,右侧预留约15%的空间 x_min, x_max = ax.get_xlim() ax.set_xlim(x_min, x_max * 0.85) # 设置刻度字体大小 ax.xaxis.set_tick_params(labelsize=8) ax.yaxis.set_tick_params(labelsize=8) ax2.yaxis.set_tick_params(labelsize=8) # 显示日期标签 plt.text(0.5, 0.9, testdate, horizontalalignment='center', verticalalignment='center', transform=ax.transAxes, fontsize=8) # 获取最新一行数据并在右侧空白区显示 latest_data = Raspilog_CDate.iloc[-1] latest_text = (f"最新数据:\n{latest_data.Time}\n" f"温度: {latest_data.Temperature}°C\n" f"湿度: {latest_data.Humidity}%") # 使用axes相对坐标系定位文本 plt.text(0.88, 0.5, latest_text, horizontalalignment='left', verticalalignment='center', transform=ax.transAxes, fontsize=7) plt.tight_layout(pad=0) # plt.savefig('logplot.png') plt.show()
关键改动说明
- 压缩图表空间:通过
ax.set_xlim(x_min, x_max * 0.85)将图表的X轴右侧范围缩小到原范围的85%,直接在右侧腾出空白区域,避免图表占满整个画布。 - 获取最新数据:用
Raspilog_CDate.iloc[-1]提取目标日期的最后一行测量数据,也就是最新的温湿度记录。 - 添加数据标签:使用
plt.text()并配合transform=ax.transAxes(基于axes的相对坐标系),将文本固定在右侧区域,确保在电子墨水屏的固定分辨率下位置稳定。调整fontsize=7适配小尺寸画布,避免文本溢出。 - 优化布局:去掉
tight_layout的多余参数,仅保留pad=0,确保画布空间被最大化利用。
内容的提问来源于stack exchange,提问作者lilaaffe
相关产品推荐
相关产品推荐

