如何为Matplotlib子图组分别设置X轴最大值?
统一子图组X轴最大值的实现方案
问题描述
我尝试通过以下代码可视化特征重要性:
import pandas as pd import matplotlib.pyplot as plt import seaborn as sns df_A_scr = pd.DataFrame({'Features' : ['age', 'weight', 'height', 'walk'], 'importance score': [0.153, 0.105, 0.105, 0.071] }) df_B_scr = pd.DataFrame({'Features' : ['age', 'weight', 'height', 'walk'], 'importance score': [0.144, 0.112, 0.093, 0.068] }) df_A_conf = pd.DataFrame({'Features' : ['blood pressure', 'creatinine', 'stroke'], 'importance score': [0.102, 0.0903, 0.083] }) df_B_conf = pd.DataFrame({'Features' : ['blood pressure', 'creatinine', 'stroke'], 'importance score': [0.095, 0.088, 0.085] }) fig, axes = plt.subplots(2, 2, figsize=(10, 8)) sns.barplot('importance score','Features',data=df_A_scr, ax=axes[0, 0], color='darkorange').set_title('set_A') sns.barplot('importance score','Features',data=df_B_scr, ax=axes[0, 1], color='darkorange').set_title('set_A') sns.barplot('importance score','Features',data=df_A_conf, ax=axes[1, 0], color='green').set_title('set_B') sns.barplot('importance score','Features',data=df_B_conf, ax=axes[1, 1], color='green').set_title('set_B') sns.set_style("whitegrid", {'grid.linestyle': '--'}) axes[0,1].set_yticklabels([]); axes[1,1].set_yticklabels([]); axes[0,1].set_ylabel(''); axes[1,1].set_ylabel(''); plt.subplots_adjust(hspace=0.3)
生成了2×2的子图布局,其中第一行两个为set_A组,第二行两个为set_B组。现希望将set_A组子图的X轴最大值统一设为0.16,set_B组子图的X轴最大值统一设为0.12,请问是否可行及如何实现?
解决方案
完全可行,通过Matplotlib的set_xlim()方法即可为不同组的子图设置统一的X轴上限,具体实现如下:
修改后的完整代码
import pandas as pd import matplotlib.pyplot as plt import seaborn as sns df_A_scr = pd.DataFrame({'Features' : ['age', 'weight', 'height', 'walk'], 'importance score': [0.153, 0.105, 0.105, 0.071] }) df_B_scr = pd.DataFrame({'Features' : ['age', 'weight', 'height', 'walk'], 'importance score': [0.144, 0.112, 0.093, 0.068] }) df_A_conf = pd.DataFrame({'Features' : ['blood pressure', 'creatinine', 'stroke'], 'importance score': [0.102, 0.0903, 0.083] }) df_B_conf = pd.DataFrame({'Features' : ['blood pressure', 'creatinine', 'stroke'], 'importance score': [0.095, 0.088, 0.085] }) fig, axes = plt.subplots(2, 2, figsize=(10, 8)) sns.barplot('importance score','Features',data=df_A_scr, ax=axes[0, 0], color='darkorange').set_title('set_A') sns.barplot('importance score','Features',data=df_B_scr, ax=axes[0, 1], color='darkorange').set_title('set_A') sns.barplot('importance score','Features',data=df_A_conf, ax=axes[1, 0], color='green').set_title('set_B') sns.barplot('importance score','Features',data=df_B_conf, ax=axes[1, 1], color='green').set_title('set_B') sns.set_style("whitegrid", {'grid.linestyle': '--'}) axes[0,1].set_yticklabels([]); axes[1,1].set_yticklabels([]); axes[0,1].set_ylabel(''); axes[1,1].set_ylabel(''); # 为set_A组子图设置X轴最大值为0.16 axes[0, 0].set_xlim(right=0.16) axes[0, 1].set_xlim(right=0.16) # 为set_B组子图设置X轴最大值为0.12 axes[1, 0].set_xlim(right=0.12) axes[1, 1].set_xlim(right=0.12) plt.subplots_adjust(hspace=0.3) plt.show()
关键说明
- 使用
set_xlim(right=数值)仅修改X轴上限,下限保持Matplotlib自动计算的结果,既保证组内子图轴范围统一,又不会截断数据 - 如果需要固定X轴下限,可写成
set_xlim(left=0, right=0.16)的形式,根据需求调整即可
内容的提问来源于stack exchange,提问作者Dai
相关产品推荐
相关产品推荐

