最近本人在绘制相关数据的序列图的时候,遇到了一个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。