修复Jupyter中Matplotlib图表的Y轴数值显示异常问题
Matplotlib Y轴显示科学计数法(le6)的问题解决
问题原因
当Y轴数值范围较大(比如达到百万级别)时,Matplotlib会自动启用科学计数法来简化刻度显示,图中的"le6"代表"×106",也就是说所有Y轴刻度数值都需要乘以106才是实际的平方值。
修复方法
方法1:直接关闭科学计数法,显示完整数值
在代码中添加一行关闭Y轴科学计数法的配置,放在设置轴范围或刻度的代码之后即可:
修改后的完整代码:
import matplotlib.pyplot as plt x_values = range(1, 1001) y_values = [x**2 for x in x_values] plt.style.use('fivethirtyeight') fig, ax = plt.subplots() ax.scatter(x_values, y_values, s=1) # 设置图表标题和坐标轴标签 ax.set_title("Square numbers", fontsize=24) ax.set_xlabel("Value", fontsize=14) ax.set_ylabel("Square of Value", fontsize=14) # 设置刻度标签大小 ax.tick_params(axis='both', which='major', labelsize=14) # 设置坐标轴范围 ax.axis([0, 1100, 0, 1100000]) # 关闭Y轴科学计数法,显示完整数值 ax.ticklabel_format(style='plain', axis='y') plt.show()
方法2:自定义刻度格式,添加千分位分隔符
如果希望数值更易读,可以自定义Y轴刻度的显示格式,比如添加千分位逗号:
import matplotlib.pyplot as plt from matplotlib.ticker import FuncFormatter x_values = range(1, 1001) y_values = [x**2 for x in x_values] plt.style.use('fivethirtyeight') fig, ax = plt.subplots() ax.scatter(x_values, y_values, s=1) # 设置图表标题和坐标轴标签 ax.set_title("Square numbers", fontsize=24) ax.set_xlabel("Value", fontsize=14) ax.set_ylabel("Square of Value", fontsize=14) # 设置刻度标签大小 ax.tick_params(axis='both', which='major', labelsize=14) # 设置坐标轴范围 ax.axis([0, 1100, 0, 1100000]) # 自定义Y轴刻度格式,添加千分位逗号 def format_y_ticks(value, tick_number): return f'{int(value):,}' ax.yaxis.set_major_formatter(FuncFormatter(format_y_ticks)) plt.show()
内容的提问来源于stack exchange,提问作者voided
相关产品推荐
相关产品推荐

