Python 画图技巧

Fig

fig, ax = plt.subplots(figsize=(8, 5), nrows=1, ncols=1, dpi=400, constrained_layout=True)

排版复杂子图

outer = 1, 1, 1], [2, 3, 4], [5, 6, 7
fig, ax = plt.subplot_mosaic(outer, figsize=(8, 5), constrained_layout=True, dpi=400)
from matplotlib.gridspec import GridSpec
fig = plt.figure(figsize=(12, 8), constrained_layout=True, dpi=400)
gs = GridSpec(2, 3, figure=fig, height_ratios=[1, 1.5], width_ratios=[1, 2, 1])
ax = []
for i in gs:
    ax.append(fig.add_subplot(i)) 

隐藏坐标轴

for spine in ax[j].spines.values():
    spine.set_visible(False)

设置坐标轴颜色

for spine in ax[j].spines.values():
    spine.set_color("black")

设置图的留白大小

ax.margins(x=0)

绘制局部放大图

from mpl_toolkits.axes_grid1.inset_locator import zoomed_inset_axes, mark_inset
axins = zoomed_inset_axes(ax, 2, loc='center')  # 2 为放大倍数
axins.plot(x, y, label, linewidth)
axins.set_xlim(x1, x2)
axins.set_ylim(y1, y2)
axins.grid(True, alpha=0.5, linestyle='--', linewidth=1)
mark_inset(ax, axins, loc1=2, loc2=4, fc="none", ec="0.45", alpha=0.85, linestyle='--', linewidth=1.1)

透明图片

fig.savefig(sys.stdout.buffer, transparent=True, format='png')

Title

fig.suptitle("Title", fontproperties=font, fontsize=16, y=0.9)

Label

ax.set_xlabel("Label", font=font, fontsize=12)
ax.set_ylabel("Label", font=font, fontsize=12)
ax.set_ylabel('Label', rotation=0, va='center', ha='right')  # 横向显示

Legend

fig.legend(fontsize=10, edgecolor="black", ncol=2, loc=(1, 1))

Ticks

ax.set_yticks([])
ax.set_xticks([])
ax.tick_params(labelbottom=False)  # 隐藏 tick 但保留刻度线
ax.tick_params(labelsize=12)  # 字体大小