matplotlib调用axes.get_xticklabels()获取坐标轴标签返回空字符串问题问询
问题原因
- 脚本运行时matplotlib默认处于非交互模式,
plt.draw()在该模式下不会触发完整的渲染管线,刻度标签的文本值只有在最终渲染(触发show()/savefig())时才会被真正填充。 - 交互终端逐行运行时默认开启了交互模式,每次绘图操作都会自动触发部分渲染逻辑,所以可以正常拿到标签。
解决方案
最直接的修改是把你调用的plt.draw()换成axes所属画布的canvas.draw()方法,这个方法会强制完成完整的渲染流程,填充所有标签文本:
ax=0 for i in yvar: hist00, ext00, asp00 = histogram(np.log10(df[spn[xvar]]), np.log10(df[spn[i]]), 100, False) axes[ax].imshow(hist00, norm = matplotlib.colors.LogNorm(), extent = ext00, aspect = asp00) # 替换原来的plt.draw(),强制触发画布完整渲染 axes[ax].figure.canvas.draw() for item in axes[ax].get_xticklabels(): print(item.get_text()) ax +=1
如果你不想提前触发全画布渲染,也可以手动调用x轴的定位器和格式化器生成标签,不需要依赖渲染流程:
x_axis = axes[ax].xaxis # 手动计算刻度位置和对应文本 locs = x_axis.get_majorticklocs() labels = [x_axis.get_major_formatter().format_data_short(loc) for loc in locs] print(labels)
内容的提问来源于stack exchange,提问作者syzygy350
相关产品推荐
相关产品推荐

