You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 11:45:28