如何将matplotlib散点图坐标轴单位从10e9改为10e6且双轴刻度一致
解决代码
import pandas as pd import matplotlib.pyplot as plt from matplotlib.ticker import FuncFormatter # 数据处理逻辑保持原有逻辑不变 mtcars = pd.read_csv('https://gist.githubusercontent.com/seankross/a412dfbd88b3db70b74b/raw/5f23f993cd87c283ce766e7ac6b329ee7cc2e1d1/mtcars.csv') mtcars['qsec'] = mtcars['qsec']*100000000 mtcars['wt'] = mtcars['wt'] *100000000 # 自定义百万单位刻度格式化函数 def million_unit(x, pos): return f"{x/1e6:.1f}" plt.scatter(x=mtcars['qsec'], y=mtcars['wt']) ax = plt.gca() # 同时给x、y轴应用相同的格式化规则 ax.xaxis.set_major_formatter(FuncFormatter(million_unit)) ax.yaxis.set_major_formatter(FuncFormatter(million_unit)) # 强制双轴刻度完全一致 value_max = max(mtcars['qsec'].max(), mtcars['wt'].max()) value_min = min(mtcars['qsec'].min(), mtcars['wt'].min()) plt.xlim(value_min, value_max) plt.ylim(value_min, value_max) plt.axis('equal') # 可选配置:补充单位说明 plt.xlabel('qsec(百万单位)') plt.ylabel('wt(百万单位)') plt.show()
常见遗漏操作点
- 只配置了单轴的刻度缩放规则,没有同时对x、y轴应用同一个格式化逻辑
- 未手动统一双轴的取值范围,matplotlib默认会根据两个字段的数值分布自动适配不同的刻度区间
- 未开启等比例显示,就算取值范围一致,画布默认比例也会导致刻度视觉间距不同
内容的提问来源于stack exchange,提问作者User981636
相关产品推荐
相关产品推荐

