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

如何创建显示平均价格的柱状图?代码执行后未显示平均价格

解决柱状图不显示平均价格的问题

你的代码核心问题是柱状图上方文本的坐标计算错误,导致文本位置偏移甚至超出可视范围,所以看不到平均价格。以下是修正后的代码及改动说明:

修正后的完整代码

import numpy as np
import matplotlib.pyplot as plt

# 假设labels、values、levels_values是已定义的变量
avg_values = {}

for i in labels:
    valuesforlevel = values[levels_values['town']==i]
    avg = np.average(valuesforlevel)
    print("Average for level " + i + " is {:.0f}".format(avg))
    avg_values[i] = avg

plt.figure(1, figsize=(12, 8))  # 原50x50尺寸过大,调整为合理范围
barchart = plt.bar(list(avg_values.keys()), list(avg_values.values()), color='#d62728')

# 计算最大价格用于设置文本偏移量
max_price = max(avg_values.values())

for i in range(len(barchart)):
    bar = barchart[i]
    x, y = bar.get_xy()
    w = bar.get_width()  # 获取柱子宽度
    h = bar.get_height()
    # 调整文本位置:水平居中在柱子上方,垂直方向轻微偏移避免贴顶
    plt.text(
        x + w/2,  # 柱子水平中心位置
        h + max_price * 0.01,  # 柱子顶部上方偏移1%最大价格的距离
        "{:.0f}".format(list(avg_values.values())[i]),
        fontsize=12,
        ha='center'  # 水平居中对齐
    )

plt.title('Resale price', fontsize=16)
plt.ylabel('Resale price', fontsize=14)
plt.yticks(fontsize=10)
plt.xticks(fontsize=12, rotation='vertical')

plt.tight_layout()  # 自动调整布局,防止标签被截断
plt.show()

关键改动点

  • 文本坐标修正:原代码用柱子左下角的x值作为文本位置,改成x + w/2让文本居中在柱子顶部;同时给y坐标增加小偏移量,避免和柱子顶部完全重合。
  • 画布尺寸优化:原figsize=(50,50)过大,会导致元素显示比例失调,调整为更实用的(12,8)。
  • 布局自动调整:添加plt.tight_layout(),防止x轴垂直标签被画布边缘截断。
  • 补充必要导入:添加numpy和matplotlib.pyplot的导入语句(如果你的代码里已包含可忽略)。

额外排查点

如果仍看不到文本,检查以下内容:

  • 确认avg_values不是空字典,且内部包含有效数值
  • 根据数据范围调整文本的fontsize和偏移量,确保文本落在画布可视区域内

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 05:02:41