【问题标题】:Rotate existing matplotlib markers?旋转现有的 matplotlib 标记?
【发布时间】:2018-09-14 13:21:35
【问题描述】:

我知道这个答案 Is it possible to control matplotlib marker orientation? 和标记文档,但是是否可以采用现有的 matplotlib 标记符号(非规则多边形)并旋转它?

具体来说,我想将细菱形符号(“d”)旋转 90 度,使其长轴水平。

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

    如果您为钻石创建一个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)
    

    【讨论】:

      【解决方案2】:

      标记"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()
      

      【讨论】:

      【解决方案3】:

      旋转角度以 360 度为单位给出:

      x = [0,10,20,30,40,50,60,70,80,90]
      for i in x:
      
          plt.plot(i, i, marker=(2, 0, -i), c='k',markersize=30, linestyle='None')
      plt.margins(0.15); plt.grid();plt.show()
      

      【讨论】:

        猜你喜欢
        • 2016-07-06
        • 2021-01-14
        • 1970-01-01
        • 2018-10-18
        • 1970-01-01
        • 1970-01-01
        • 2023-01-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多