如何在Seaborn中为三个子图中的单独一个设置自定义刻度?
Seaborn单个子图单独设置刻度的解决方案
你可以直接通过子图对应的Axes对象的方法实现单图刻度配置,不需要全局修改所有子图的设置:
你之前使用的plt.xticks()、plt.yticks()是全局操作,只会作用于当前处于激活状态的子图。当你已经显式将不同子图赋值给ax1、ax2、ax3三个变量后,直接调用对应Axes对象的set_yticks()方法即可单独设置对应子图的刻度。
修改后的示例代码如下,只需要在绘制完第三个子图后加一行配置代码即可:
import seaborn as sns import pandas as pd import matplotlib.pyplot as plt ts = pd.Series(df_1["total_purchase"]).str.split(expand=True) # 从$符号中拆分数值 df_1["purchase_float"] = ts[0].astype(float) # 转浮点类型用于绘图 df_1 = df_1.reset_index() # 重置索引作为第一列 sns.set_theme(style="whitegrid") fig, (ax1, ax2, ax3) = plt.subplots(3,1,figsize=(12,12)) sns.barplot(x='purchase_float', y='employee_name', data=df_1, ax=ax1) sns.barplot(y='customer_canada', x='employee_name', data=df_1, ax=ax2) sns.barplot(y='customer_dif_country', x='employee_name', data=df_1, ax=ax3) # 单独为ax3设置y轴刻度,可根据你的实际数据范围调整数值列表 ax3.set_yticks([0, 2, 4, 6, 8, 10]) # 如果需要自定义刻度显示的文本,可额外添加下面的代码 # ax3.set_yticklabels(['0', '2', '4', '6', '8', '10']) plt.subplots_adjust(hspace = 0.8) plt.show()
你提到的第三个子图细节缺失问题,就是默认自动生成的y轴刻度间隔过大导致的,自定义刻度值后就能完整显示所有细节:
内容的提问来源于stack exchange,提问作者Paweł Pedryc
相关产品推荐
相关产品推荐

