You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 22:54:35