最近本人在绘制相关数据的序列图的时候,遇到了一个seaborn画图x轴的显示问题,具体见下面分析:

有一个这样的dataframe类型数据df: 

    max_sumI    mobile_p
0   0.172865      0.00
1   0.210638      0.05
2   0.235263      0.10
3   0.252968      0.15
4   0.266577      0.20
5   0.276553      0.25
6   0.285253      0.30
7   0.291333      0.35
8   0.297852      0.40
9   0.302255      0.45
10  0.305111      0.50
11  0.309387      0.55
12  0.312710      0.60
13  0.315155      0.65
14  0.316925      0.70
15  0.318176      0.75
16  0.319028      0.80
17  0.320157      0.85
18  0.321648      0.90
19  0.322782      0.95
20  0.323612      1.00

想使得max_sumI为y轴,mobile_p为x轴,调用以下代码:

# 绘制图表
plt.figure(figsize=(8, 6))
sns.pointplot(data=df, x = 'mobile_p', y= 'max_sumI', label='patch_size = 10', markers='o', color='blue')

sns.set_theme(style='ticks')

plt.xlabel('mobile_probability')
plt.ylabel('MAX rho_I')
plt.title('Maximum infection density under different mobility probabilities')
# 显示图例
plt.legend()

plt.show()

生成结果图如下:

现在x轴太拥挤了,我想让范围(0,1)之间刻度为0.1,即0.0,0.1,....0.9,1.0,根据网上的说法应该设置代码——

plt.xticks(np.arange(0, 1.1, 0.1))

但事实上适用seaborn包画图sns.pointplot,也就是上面的画图代码会出现下面这种情况,x轴全都挤在一起了——

这时需要调整代码刻度为:

plt.xticks(np.arange(0, 21, 2))

也就是x轴20个数范围0到20,每隔2就显示一个刻度值,竟然得到了我想要的结果:

值得注意的是,这个问题只在seaborn画图时遇到了,如果用plt.plot画图则没有这个问题,但是matplotlib画图我感觉不怎么好看,一直用的seaborn。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐