我在matplotlib中创建了一个图形,其中包含三个子图,一个位于左上象限,一个位于右上象限,另一个位于右下象限。右上角的图包含一个二维图像,而其他两个图是分别投影到Y轴和X轴上的。我想将左上象限子图逆时针旋转90度,以便该图的x轴沿着2D图像的y轴。
对于子图,我意识到可以翻转x和y数据,旋转轴标签,在左侧创建一个绘图标题等。但是我希望找到一个单一的调用,只需旋转整个完成的情节90度。但我找不到任何一个。
有没有简单的方法可以做到这一点?
我在matplotlib中创建了一个图形,其中包含三个子图,一个位于左上象限,一个位于右上象限,另一个位于右下象限。右上角的图包含一个二维图像,而其他两个图是分别投影到Y轴和X轴上的。我想将左上象限子图逆时针旋转90度,以便该图的x轴沿着2D图像的y轴。
对于子图,我意识到可以翻转x和y数据,旋转轴标签,在左侧创建一个绘图标题等。但是我希望找到一个单一的调用,只需旋转整个完成的情节90度。但我找不到任何一个。
有没有简单的方法可以做到这一点?
很多函数的另一个有趣参数是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
的更多信息,请参见此答案。
许多pyplot的1D图似乎在其参数中具有"orientation"或"pivot"选项。例如,来自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'horizontal'
)
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()
如果您只想获得旋转图表的视图而不需要正确的坐标,那么很简单:
比如,我们有初始数据:
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度:
通过交换和改变符号,您不仅可以旋转图像,还可以翻转图像。同样地,在这里,图形轴将不会正确显示。
rot + base != base + rot
- ricma