如何旋转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
相关产品推荐
相关产品推荐

