[ PROMPT_NODE_26800 ]
common_issues
[ SKILL_DOCUMENTATION ]
# Matplotlib 常见问题与解决方案
针对 matplotlib 常见问题的排查指南。
## 显示与后端问题
### 问题:图表未显示
**现象:** `plt.show()` 没有显示任何内容
**解决方案:**
python
# 1. 检查后端设置是否正确(用于交互式使用)
import matplotlib
print(matplotlib.get_backend())
# 2. 尝试不同的后端
matplotlib.use('TkAgg') # 或 'Qt5Agg', 'MacOSX'
import matplotlib.pyplot as plt
# 3. 在 Jupyter Notebook 中,使用魔术命令
%matplotlib inline # 静态图像
# 或
%matplotlib widget # 交互式图表
# 4. 确保调用了 plt.show()
plt.plot([1, 2, 3])
plt.show()
### 问题:"RuntimeError: main thread is not in main loop"
**现象:** 线程相关的交互模式问题
**解决方案:**
python
# 切换到非交互式后端
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
# 或者关闭交互模式
plt.ioff()
### 问题:图表无法交互式更新
**现象:** 交互窗口中未反映更改
**解决方案:**
python
# 启用交互模式
plt.ion()
# 每次更改后绘制
plt.plot(x, y)
plt.draw()
plt.pause(0.001) # 短暂暂停以更新显示
## 布局与间距问题
### 问题:标签和标题重叠
**现象:** 标签、标题或刻度标签重叠或被截断
**解决方案:**
python
# 方案 1:约束布局(推荐)
fig, ax = plt.subplots(constrained_layout=True)
# 方案 2:紧凑布局
fig, ax = plt.subplots()
plt.tight_layout()
# 方案 3:手动调整边距
plt.subplots_adjust(left=0.15, right=0.95, top=0.95, bottom=0.15)
# 方案 4:保存时使用 bbox_inches='tight'
plt.savefig('figure.png', bbox_inches='tight')
# 方案 5:旋转长刻度标签
ax.set_xticklabels(labels, rotation=45, ha='right')
### 问题:颜色条影响子图大小
**现象:** 添加颜色条导致图表缩小
**解决方案:**
python
# 方案 1:使用约束布局
fig, ax = plt.subplots(constrained_layout=True)
im = ax.imshow(data)
plt.colorbar(im, ax=ax)
# 方案 2:手动指定颜色条尺寸
from mpl_toolkits.axes_grid1 import make_axes_locatable
divider = make_axes_locatable(ax)
cax = divider.append_axes("right", size="5%", pad=0.05)
plt.colorbar(im, cax=cax)
# 方案 3:对于多个子图,共享颜色条
fig, axes = plt.subplots(1, 3, figsize=(15, 4))
for ax in axes:
im = ax.imshow(data)
fig.colorbar(im, ax=axes.ravel()