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

Matplotlib帕累托图左侧Y轴设置指数缩放并显示常规数字

解决方法

要实现左侧Y轴的对数刻度(指数增长)且显示常规数字标签,你需要对ax1的Y轴做以下调整:

  1. 将Y轴设置为对数刻度
  2. 自定义刻度位置与显示标签
  3. 调整Y轴范围(对数轴不能包含0,所以从1开始)

修改后的完整代码如下:

import matplotlib.pyplot as plt
import pandas as pd

# 保留你的绘图逻辑,仅修改左侧Y轴设置
fig, axes = plt.subplots()
ax1 = df1.plot(use_index=False, x='index_column', y='total_dollars_spent', kind='bar', ax=axes)
ax2 = df1.plot(use_index=True, y='percent', marker='D', color="C1", kind='line', ax=axes, secondary_y=True)

# 切换左侧Y轴为对数刻度
ax1.set_yscale('log')
# 自定义对数刻度的位置(匹配10的整数次幂)
custom_ticks = [1, 10, 100, 1000, 10000]
ax1.set_yticks(custom_ticks)
# 设置刻度显示为常规数字,替代默认的10^x格式
ax1.set_yticklabels([str(tick) for tick in custom_ticks])
# 调整Y轴范围,对数轴不能包含0,设为1到15000
ax1.set_ylim([1, 15000])

# 右侧百分比轴保持原有设置
ax2.set_ylim([0, 110])

plt.show()

关键修改说明:

  • ax1.set_yscale('log'):把线性Y轴切换为对数刻度,实现指数增长的刻度间隔
  • set_yticks():手动指定你需要的刻度节点,比如1、10、100这类10的整数次幂值
  • set_yticklabels():将刻度标签转为常规数字字符串,替换默认的科学计数法或10^x格式
  • 对数轴无法包含0,因此把ylim下限从0改为1;如果你的数据有接近0的值,可以根据实际情况调整下限(比如0.1)

如果你的total_dollars_spent数据存在0值,对数轴会报错,此时可以给数据加微小偏移(比如df1['total_dollars_spent'] += 1),或者把Y轴下限设为大于0的最小值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 11:05:19