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

如何旋转Matplotlib现有标记?以细菱形标记"d"转90度为例

嘿,这个问题我刚好琢磨过!答案是肯定的——虽然Matplotlib自带的细菱形标记("d")没法直接通过参数旋转,但我们有两种非常实用的办法来实现你要的效果:让它的长轴呈水平状态。

方法1:给现有标记添加旋转变换

我们可以利用Matplotlib的变换工具,给默认的细菱形标记施加一个90度的旋转变换。注意Matplotlib里旋转角度是逆时针为正,所以要让竖直长轴的菱形转成水平,需要用-90度(或者等价的270度)的旋转:

import matplotlib.pyplot as plt
from matplotlib.transforms import Affine2D

fig, ax = plt.subplots()

# 创建顺时针旋转90度的变换,并结合数据坐标系变换
rot_transform = Affine2D().rotate_deg(-90) + ax.transData

# 绘制旋转后的细菱形
ax.scatter([1, 2, 3], [4, 5, 6], marker='d', s=200, transform=rot_transform, color='cornflowerblue')

# 绘制原标记做对比
ax.scatter([1, 2, 3], [3, 2, 1], marker='d', s=200, color='crimson', label='Original vertical diamond')
ax.legend()
plt.show()

这个方法的好处是完全基于现有标记改造,不需要重新定义形状,变换只会作用在标记上,不会影响坐标点的位置。

方法2:自定义水平细菱形标记

如果觉得变换的方式有点繁琐,也可以直接定义一个水平方向的细菱形作为自定义标记。我们只需要写出水平菱形的顶点坐标(相对于标记中心),然后传给marker参数就行:

import matplotlib.pyplot as plt

# 定义水平细菱形的顶点(中心为原点,左右拉长,上下较窄)
horizontal_diamond = [
    (-0.5, 0),   # 左端点
    (0, 0.2),    # 上端点
    (0.5, 0),    # 右端点
    (0, -0.2)    # 下端点
]

fig, ax = plt.subplots()

# 使用自定义标记绘图
ax.scatter([1, 2, 3], [4, 5, 6], marker=horizontal_diamond, s=200, color='cornflowerblue', label='Horizontal diamond')

# 对比原标记
ax.scatter([1, 2, 3], [3, 2, 1], marker='d', s=200, color='crimson', label='Original vertical diamond')
ax.legend()
plt.show()

这种方法适合需要多次复用水平菱形标记的场景,自定义的形状可以直接存起来反复调用,不需要每次都设置变换。

两种方法都能完美实现你要的效果,按需选择就好~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:50:37