【问题标题】:How to rotate a simple matplotlib Axes如何旋转一个简单的 matplotlib 轴
【发布时间】:2014-02-09 12:14:33
【问题描述】:

是否可以像 matplotlib.text.Text 一样旋转 matplotlib.axes.Axes

# text and Axes instance
t = figure.text(0.5,0.5,"some text")
a = figure.add_axes([0.1,0.1,0.8,0.8])
# rotation
t.set_rotation(angle)
a.set_rotation()???

文本实例上的简单 set_rotation 将使文本围绕其坐标轴旋转角度值。有什么方法可以对轴实例做同样的事情吗?

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

    您是在问如何旋转整个轴(而不仅仅是文本)?

    如果是这样,是的,有可能,但你必须事先知道情节的范围。

    您必须使用axisartist,它允许像这样更复杂的关系,但有点复杂,不适合交互式可视化。如果您尝试缩放等,您会遇到问题。

    import matplotlib.pyplot as plt
    from matplotlib.transforms import Affine2D
    import mpl_toolkits.axisartist.floating_axes as floating_axes
    
    fig = plt.figure()
    
    plot_extents = 0, 10, 0, 10
    transform = Affine2D().rotate_deg(45)
    helper = floating_axes.GridHelperCurveLinear(transform, plot_extents)
    ax = floating_axes.FloatingSubplot(fig, 111, grid_helper=helper)
    
    fig.add_subplot(ax)
    plt.show()
    

    【讨论】:

    • 有没有办法让旋转轴可以绘制在另一个图的顶部?这确实创建了一个旋转轴,但它缺少“常规”轴具有的许多属性(例如,我无法弄清楚如何删除 x/y 刻度和背景)
    • @choldgraf - 是的,但是对于使用axisartist 工具包制作的轴,各个脊椎、xaxis、yaxis、tick 等的处理方式略有不同。 (这是通常的 Axes 和 axisartist Axes 之间的主要区别。因此不同的 API。)这是一个示例:gist.github.com/joferkington/6789f086769527cc3157 但是,可能有更简单的方法(例如旋转数据)。你到底想做什么?
    • 感谢您的提示-确实有效(出于某种原因,只是在轴上执行 set_visible 而 aux_axis 对象不起作用)。我正在尝试创建一个覆盖在散点图上的直方图(例如,类似于this)。它接近我想要的,但很难以简单的方式缩放浮动直方图。
    • @JoeKington 有没有办法在不设置范围的情况下实现这种旋转?请看一下this
    【解决方案2】:

    是的,这是可能的。但是您必须分别旋转每个标签。因此,您可以尝试使用迭代:

    from matplotlib import pyplot as plt
    figure = plt.figure()
    ax = figure.add_subplot(111)
    t = figure.text(0.5,0.5,"some text")
    t.set_rotation(90)
    labels = ax.get_xticklabels()
    for label in labels:
        label.set_rotation(45)
    plt.show()
    

    【讨论】:

      猜你喜欢
      • 2022-01-22
      • 2020-11-30
      • 2012-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多