Matplotlib帕累托图左侧Y轴设置指数缩放并显示常规数字
解决方法
要实现左侧Y轴的对数刻度(指数增长)且显示常规数字标签,你需要对ax1的Y轴做以下调整:
- 将Y轴设置为对数刻度
- 自定义刻度位置与显示标签
- 调整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
相关产品推荐
相关产品推荐

