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

如何在Matplotlib中旋转并翻转坐标轴标签?

实现Matplotlib坐标轴标签的旋转与翻转(含缩放稳定性说明)

当然可以同时实现Matplotlib坐标轴标签的旋转和翻转效果,而且这些视觉变换在图表缩放时完全能保留——因为Matplotlib会将标签的变换逻辑绑定到坐标轴的坐标系上,缩放时会自动同步更新。

一、具体实现方法

你可以通过获取坐标轴标签的文本对象,直接设置旋转角度,再结合镜像变换或者旋转模式来实现翻转效果。下面是两种常见场景的示例:

场景1:旋转+上下翻转(文字倒转)

比如把X轴标签旋转45度后再上下翻转,修改后的代码如下:

#!/usr/bin/python3 
# -*- coding: utf-8 -*-
import matplotlib
import matplotlib.pyplot as plt
from matplotlib.transforms import Affine2D

default_size_inch = (9, 6)
x1 = [0,1] ; y1 = [0,100]
fig = plt.figure(figsize=default_size_inch, dpi=120)
ax1 = fig.add_subplot()
ax1.plot(x1, y1, color="Red")

# 基础设置坐标轴标签
ax1.set(xlabel='X label', ylabel='Y label')

# 处理X轴标签:旋转45度+上下翻转
x_label = ax1.xaxis.get_label()
x_label.set_rotation(45)
# 用Affine2D实现上下镜像翻转
flip_transform = Affine2D().scale(1, -1) + ax1.transAxes
x_label.set_transform(flip_transform)
# 调整垂直对齐,让标签位置更合理
x_label.set_va('bottom')

# 处理Y轴标签:旋转-90度+左右翻转
y_label = ax1.yaxis.get_label()
y_label.set_rotation(-90)
# 用Affine2D实现左右镜像翻转
flip_y_transform = Affine2D().scale(-1, 1) + ax1.transAxes
y_label.set_transform(flip_y_transform)
# 调整水平对齐优化位置
y_label.set_ha('right')

plt.show()

场景2:简化版翻转实现

如果你觉得用变换太复杂,也可以直接通过调整旋转角度和对齐方式模拟翻转:比如要让X轴标签旋转90度并上下翻转,直接设置x_label.set_rotation(-90)(负角度等价于旋转后翻转),再配合set_va/set_ha参数调整位置即可,效果和变换实现一致。

二、缩放时的效果保留

完全不用担心缩放时效果丢失——Matplotlib的文本变换是基于坐标轴的变换坐标系(比如ax1.transAxes),而非像素坐标系。当你拉大或缩小图表窗口时,坐标轴的坐标系会自动调整,标签的旋转角度、翻转状态会同步适配新尺寸,视觉效果始终保持一致,不会出现变形或错位。


内容的提问来源于stack exchange,提问作者sdbbs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:48:23