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

Matplotlib绘制直方图时图表下方添加文本不显示如何解决

问题描述

我正在尝试使用matplotlib结合pandas绘制直方图,目标是在直方图下方左侧添加来源标注文本'*) Source: Some institution',使用的初始代码如下,运行后文本无法正常显示:

import pandas as pd
import numpy as np
pd.set_option('max_columns', None)
import matplotlib.pyplot as plt
import matplotlib as mpl

data = {
         'type_sale': ['g_1','g_2','g_3','g_4','g_5','g_6','g_7','g_8','g_9','g_10'],
         'open':[70,20,24,80,20,20,60,20,20,20],
        
        }

df = pd.DataFrame(data, columns = ['type_sale',
                                   'open',
                                   ])

df.hist(bins=20, color ='red')
df.text(0.05, -0.02, '*) Source: Some institution')
plt.show()
故障原因

代码存在两个核心问题:

  1. 调用对象错误:text是matplotlib坐标轴(Axes)对象的方法,pandas的DataFrame实例本身没有该方法,直接在df上调用自然无法生效
  2. 坐标与布局问题:即使拿到正确的坐标轴对象,直接使用数据坐标系设置负y值的文本,会落在默认坐标轴显示范围外,且默认画布边距没有预留底部文本的显示空间,就算文本渲染了也会被裁剪。
修正方案
  1. 接收df.hist()返回的坐标轴对象,pandas hist方法返回Axes数组,单列数据的直方图取[0][0]即可拿到对应绘图轴
  2. 使用坐标轴相对坐标系放置文本,该坐标系下(0,0)对应坐标轴左下角、(1,1)对应坐标轴右上角,不受数据数值范围影响,适合放置固定位置的注释
  3. 调整画布底部边距,为下方的来源文本预留足够显示空间,避免被裁剪。

修正后的可运行代码:

import pandas as pd
import numpy as np
pd.set_option('max_columns', None)
import matplotlib.pyplot as plt
import matplotlib as mpl

data = {
         'type_sale': ['g_1','g_2','g_3','g_4','g_5','g_6','g_7','g_8','g_9','g_10'],
         'open':[70,20,24,80,20,20,60,20,20,20],
        }

df = pd.DataFrame(data, columns=['type_sale', 'open'])

# 获取hist返回的坐标轴对象
ax = df.hist(bins=20, color='red')[0][0]
# 使用轴相对坐标放置左下角来源文本
ax.text(0.05, -0.18, '*) Source: Some institution', transform=ax.transAxes)
# 调整底部边距,预留文本显示空间
plt.subplots_adjust(bottom=0.2)
plt.show()

注:可根据实际显示效果调整ax.text的y参数(数值越小文本越靠下)、subplots_adjust的bottom参数(数值越大底部预留空间越多),直到文本位置符合预期。

内容的提问来源于stack exchange,提问作者silent_hunter

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 09:57:19