Python中使用seaborn绘制散点图时如何设置x轴仅显示指定刻度
实现方法说明
你要的效果核心是解决两个基础问题:一是原代码存在语法错误无法正常运行,二是K值跨3个数量级的线性坐标会把所有小数值的点挤在坐标轴边缘,完全无法展示分布。全程不需要挪动任何数据点的坐标,仅通过坐标轴配置调整就能达成需求。
第一步:修正原代码的语法错误
- 补全DataFrame列名定义时缺失的单引号:将
columns=['K','Result1,'Result2','Result3']改为columns=['K','Result1','Result2','Result3'] - 补全
plt.xticks()方法的闭合右括号 - 修正保存文件时的拼写错误,将
"reults"改为"results"避免保存失败
第二步:调整坐标轴尺度适配数值范围
直接在代码里加入plt.xscale('log')设置x轴为对数尺度。
注意:这一步仅改变坐标轴的数值映射规则,不会修改任何数据点的实际K值坐标,既可以让跨度极大的K值(0.001到0.5)在图上均匀展开,又能完全保留每个点对应的真实位置关系,符合“保留所有数据点对应坐标位置”的要求。
第三步:自定义x轴的可见刻度
加入两个核心设置:
- 调用
plt.minorticks_off()关闭对数坐标默认生成的细碎次要刻度 - 调用
plt.xticks(ticks=[0.001, 0.01, 0.1], labels=['0.001', '0.01', '0.1']),强制x轴仅显示你指定的三个刻度,隐藏其余所有自动生成的刻度
修正后完整可运行代码
import pandas as pd import matplotlib.pyplot as plt import seaborn as sns Data2 = {'Result1': [0.9679,0.9620,0.9618,0.9697,0.9721,0.9364], 'Result2': [0.92,0.9162,0.9236,0.9387,0.9306,0.9066], 'Result3': [0.914,0.9233,0.9334,0.9361,0.9316,0.8944], 'K': [0.001,0.005,0.01,0.05,0.1,0.5] } df2 = pd.DataFrame(Data2,columns=['K','Result1','Result2','Result3']) sns.set(style='whitegrid') sns.scatterplot(x='K', y='Result1', data=df2,label="Result1",marker='o',legend=None) sns.scatterplot(x='K', y='Result2', data=df2,label="Result2",marker='o',legend=None) sns.scatterplot(x='K', y='Result3', data=df2,label="Result3",marker='o',legend=None) plt.xlabel(r'$\alpha$', fontsize=14) plt.ylabel('performance', fontsize=14) # 设置对数坐标适配宽范围K值 plt.xscale('log') # 关闭次要细碎刻度 plt.minorticks_off() # 仅保留指定的三个可见刻度 plt.xticks(ticks=[0.001, 0.01, 0.1], labels=['0.001', '0.01', '0.1']) plt.subplots_adjust(left=0.1, right=0.8, top=0.7, bottom=0.1) plt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.) plt.savefig("results",bbox_inches = "tight")
内容的提问来源于stack exchange,提问作者TinaTz
相关产品推荐
相关产品推荐

