如何将matplotlib图像旋转90度?
我在matplotlib里做了一个图,里面有三个小图。一个在左上角,一个在右上角,还有一个在右下角。右上角的图是一个二维图像,其他两个图分别是Y轴和X轴的投影。我想把左上角的小图逆时针旋转90度,这样它的X轴就能和右上角二维图的Y轴对齐。
对于这个小图,我知道可以把X和Y的数据调换,旋转轴的标签,或者在左边加个图标题等等。但是我希望能找到一个简单的方法,直接把整个小图旋转90度。可我找不到这样的办法。
有没有简单的方法可以做到这一点呢?
4 个回答
如果你只是想看看一个旋转后的图,而不需要准确的坐标,那其实很简单:
- 交换散点图或折线图的数据的坐标轴,也就是把 (x, y) 换成 (y, x)。
- 把 y 的符号变成负数,也就是变成 (-y, x),这样图就会顺时针旋转90度。
假设我们有一组初始数据:
x_coordinates = np.array([351,345,339,336,333,330,327,324,318,312])
y_coordinates = np.array([84, 84, 83, 82, 81, 80, 80, 79, 78, 77])
它的图像通过 plt.plot(x_coordinates,y_coordinates)
绘制出来是:

如果用 plt.plot(-y_coordinates,x_coordinates)
,图像会逆时针旋转90度:

通过交换坐标和改变符号,你不仅可以旋转图像,还可以翻转图像。不过要注意,这样做后图的坐标轴可能不会显示得很准确。
在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,不知道该如何解决。比如,有人可能在使用某个功能时,发现它没有按照预期工作,或者出现了错误信息。这种情况下,我们可以去一些技术论坛,比如StackOverflow,寻求帮助。
在这些论坛上,很多人会分享他们的经验和解决方案。你可以看到其他人遇到的类似问题,以及他们是如何解决的。这不仅能帮助你找到答案,还能让你学到更多的知识,避免将来再犯同样的错误。
总之,遇到问题时,不要害怕去问,很多人都愿意提供帮助。记得把你的问题描述清楚,这样别人才能更好地理解你的困扰,并给出有效的建议。
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()
在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)
只需要把它改成横向的(orientation=u'vertical'
)
很多函数还有一个有趣的参数叫做 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()
如果你想知道如何旋转一个图形,可以看看 这个回答,它也是这个回答的灵感来源。
更新
我最近发现,当使用 pyplot.scatter
(以及其他 PathCollections
)时,transform
参数的效果并不像预期那样好。在这种情况下,你可能需要使用 offset_transform
。想了解更多关于如何设置 offset_transform
的信息,可以查看 这个回答。