如何将matplotlib图旋转90度?

use*_*148 18 python matplotlib rotation figure

我在matplotlib中创建了一个图形,其中包含三个子图,一个在左上象限,一个在右上象限,一个在右下象限.右上图包含一个二维图像,另外两个图分别是Y轴和X轴上的投影.我想将左上象限子图逆时针旋转90度,使得该图的x轴位于2-d图的y轴上.

对于子图,我意识到我可以翻转x和y数据,旋转轴标签,在左侧创建一个情节标题,等等.但我希望找到一个单独的调用,它可以旋转整个完成的绘图通过90deg.但我找不到一个.

有一个简单的方法吗?

小智 11

许多pyplot 1D图似乎在他们自己的参数中有"方向"或"枢轴"选项.例如,从matplotlib.org直方图的例子:

matplotlib.pyplot.hist(x, 
                       bins=10, 
                       range=None, 
                       normed=False, 
                       weights=None, 
                       cumulative=False, 
                       bottom=None, 
                       histtype=u'bar', 
                       align=u'mid', 
                       orientation=u'vertical', 
                       rwidth=None, 
                       log=False, 
                       color=None, 
                       label=None, 
                       stacked=False, 
                       hold=None, 
                       **kwargs)
Run Code Online (Sandbox Code Playgroud)

只需改为水平(orientation=u'vertical')


Mr *_*der 8

许多函数的另一个有趣的参数是transform(不同orientation或者pivot此参数也可以用于例如plot).

transform参数允许您添加由Transform对象指定的转换.为了举例,这是你如何旋转一些随机数据的图:

import numpy
from matplotlib import pyplot, transforms

data = numpy.random.randn(100)

# first of all, the base transformation of the data points is needed
base = pyplot.gca().transData
rot = transforms.Affine2D().rotate_deg(90)

# define transformed line
line = pyplot.plot(data, 'r--', transform= rot + base)
# or alternatively, use:
# line.set_transform(rot + base)

pyplot.show()
Run Code Online (Sandbox Code Playgroud)

有关如何旋转补丁的示例,请参阅此答案,这也是此答案的灵感来源.


更新

我最近发现transform使用pyplot.scatter(和其他PathCollections)时参数不能按预期工作.在这种情况下,您可能想要使用offset_transform.有关如何设置的更多信息,请参阅此答案offset_transform.

  • 我真的很喜欢这个答案 - 它对我帮助很大。请注意,总和的顺序很重要:`rot + base != base + rot` (2认同)

sam*_*bia 7

from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt

fig=plt.figure() 
ax=fig.add_subplot(111,projection='3d')

# for rotate the axes and update.
for angle in range(0,360): 
    ax.view_init(30,angle)

plt.show()
Run Code Online (Sandbox Code Playgroud)

  • 主要代码:- ax.view_init(-30, -90) (2认同)