Matplotlib如何在3D图的XY表面上以原点为中心放置2D图像?
我有一个尺寸为330x330像素,实际尺寸为5cm x 5cm的图像。当我尝试使用功能plot_surface
时,图像的左上角卡住了原点。不过,我想在图像的中心在这样的原点定位,Matplotlib如何在3D图的XY表面上以原点为中心放置2D图像?
有没有什么办法可以做到这一点?我怎样才能将单位系统改为cm
而不是像素?
编辑: 这里是我当前的代码:
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
xx, yy = np.meshgrid(np.linspace(0, 1, 330), np.linspace(0, 1, 330))
X = xx
Y = yy
ax.plot_surface(X, Y, 0, rstride=10, cstride=10, facecolors=plt.imread('pattern.jpg')/255., shade=False)
plt.show()
您可以使用figsize=(width, height)
参数设置在matplotlib一个图形的大小。像素中的图形大小由参数dpi = 80
确定。例如
plt.figure(figsize=(8,6))
...
plt.savefig("out.png", dpi=100)
将导致8倍6英寸的图形,其具有800×600像素。
您不能将单位从英寸更改为其他东西,但由于1英寸= 2.54厘米,因此如果需要,您可以计算所需的图形尺寸。
所有这些与matplotlib使用的绘图单元无关,在matplotlib中绘制的图形与真实长度单位无关,也就是说,您可以绘制太阳系地图旁边原子的大小,都在一张纸的大小的一个小区里。
图中原点的位置由轴限制确定。粗略地说,如果轴从0
到2
,原点位于图的左侧,如果您的图从-1
到1
,原点位于中间。
当ax
是您的轴对象,你可以通过
ax.set_xlim3d([-1,1])
ax.set_ylim3d([-1,1])
ax.set_zlim3d([-1,1])
设置使用
ax.set_xlim([-1,1])
ax.set_ylim([-1,1])
在2D情况下
或者是,对于3D情况下的起源现在我们有一些代码要使用,我们可以使用适当的坐标将图像设置在中心。如果图像被限定在0和1之间,那么轴坐标就会坐在那里,而不是以原点为中心。 当我们将图像定义为从-1到1时,它应该按预期工作。
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
xx, yy = np.meshgrid(np.linspace(-1, 1, 330), np.linspace(-1, 1, 330))
X = xx
Y = yy
c = np.random.rand(330,330,3)
ax.plot_surface(X, Y, 0, rstride=30, cstride=30,
facecolors=c, shade=False)
plt.show()
嗨@ImportanceOfBeingErnest,谢谢你的回答。但我认为我关于图像位置的问题仍然存在。通过改变轴的极限,原点确实到了中间,但图像仍然卡在第一象限中。我希望图像中心位于原点,以便整个图像看起来像我上传的图像中显示的正方形 – AnnieBin
更新了答案。 – ImportanceOfBeingErnest
我明白了。非常感谢 – AnnieBin
在问这里之前,我会建议,[take the tour](http://*.com/tour)为例如熟悉[如何提出问题](http://*.com/help/how-to-ask)以及本网站上的常规系统。 – ImportanceOfBeingErnest