【发布时间】:2018-09-14 13:21:35
【问题描述】:
我知道这个答案 Is it possible to control matplotlib marker orientation? 和标记文档,但是是否可以采用现有的 matplotlib 标记符号(非规则多边形)并旋转它?
具体来说,我想将细菱形符号(“d”)旋转 90 度,使其长轴水平。
【问题讨论】:
标签: python matplotlib
我知道这个答案 Is it possible to control matplotlib marker orientation? 和标记文档,但是是否可以采用现有的 matplotlib 标记符号(非规则多边形)并旋转它?
具体来说,我想将细菱形符号(“d”)旋转 90 度,使其长轴水平。
【问题讨论】:
标签: python matplotlib
如果您为钻石创建一个markerstyle 类,然后通过旋转自己修改其变换属性,则可以执行此操作,无论出于何种原因,matplotlib 都没有为某些标记公开这些类属性。我在下面提供了一个示例。
import matplotlib as mpl
import matplotlib.pyplot as plt
# make a markerstyle class and modify the transform property by 90 degrees
t = mpl.markers.MarkerStyle(marker='d')
t._transform = t.get_transform().rotate_deg(90)
plt.scatter((0,1), (0,1), marker=t, s=100)
【讨论】:
标记"d" 是菱形的倾斜版本"D"。您可以创建这样的菱形标记并将其向另一个方向倾斜。
对于任意角度,您可以改为旋转标记。
import matplotlib.pyplot as plt
from matplotlib.markers import MarkerStyle
fig, ax = plt.subplots()
plt.scatter([1,2,3],[1,2,3], s=225, marker="d")
m = MarkerStyle("D")
m._transform.scale(1.0, 0.6)
plt.scatter([1,2,3],[2,3,4], s=225, marker=m, color="crimson")
m = MarkerStyle("d")
m._transform.rotate_deg(60)
plt.scatter([1,2,3],[3,4,5], s=225, marker=m, color="limegreen")
plt.margins(0.5)
plt.show()
【讨论】:
TypeError: float() argument must be a string or a number, not 'MarkerStyle'。有人知道解决办法吗?