matplotlib绘制表格时单元格数值不显示问题求助
问题原因
表格数值不显示是两个逻辑错误导致的:
- 你提前用
plt.subplots()新建的画布和轴,没有被后续的mpf.plot()复用。mplfinance默认会自己生成全新的画布绘图,你之前在自建轴上画的表格要么被新画布覆盖,要么渲染时单元格底色盖在了文本上层,只留下表格框。 - 表格绘制后没有绑定到最终输出的画布上,文本层没有被正确渲染。
修复方法
不要提前自建画布,先调用mpf.plot()并设置returnfig=True拿到它生成的画布、轴对象,再在对应的轴上绘制表格,同时给表格设置更高的图层优先级避免被遮挡。
修改后的可运行代码如下:
import pandas as pd import mplfinance as mpf import matplotlib.pyplot as plt # 提前配置mplfinance样式 mc = mpf.make_marketcolors(up='g', down='r') s = mpf.make_mpf_style(marketcolors=mc) # 绘制K线,返回画布和轴列表:axlist[0]是价格主图轴,axlist[1]是成交量副图轴 fig, axlist = mpf.plot( pdata, type='candle', figsize=(13, 5), ylabel="Price", title=str(company), returnfig=True, # 核心参数,必须开启才能拿到mplfinance生成的轴对象 volume=True, style=s ) # 选择要放置表格的轴,这里选价格主图 target_ax = axlist[0] # 绘制表格 table = target_ax.table( cellText=[[1, 2]], colLabels=["A", "B"], loc='upper left', # 建议指定明确位置,避免和K线内容重叠 zorder=10 # 提高表格图层优先级,防止被K线、网格线遮挡 ) # 可选:手动固定表格字体大小,避免默认字体过小看不清 table.auto_set_font_size(False) table.set_fontsize(10) # 可选:如果出现文本和单元格背景同色的情况,遍历强制设置文本为黑色 # for cell in table.get_celld().values(): # cell.set_text_props(color='black') fig.tight_layout() plt.show()
补充说明
- 如果需要把表格放在不遮挡K线的位置,可以给
table()传bbox参数手动指定坐标,比如bbox=[0.05, 0.9, 0.15, 0.07],四个参数分别是左、下、宽、高的轴内相对坐标。 - 不要在
mpf.plot()调用前执行plt.subplots()新建画布,mplfinance有独立的多子图布局逻辑,提前自建的画布不会被自动关联,很容易出现图层冲突、内容不显示的问题。
内容的提问来源于stack exchange,提问作者R.S4697
相关产品推荐
相关产品推荐

