Matplotlib如何在3D绘图中将XY图像的原点放在XY表面上?

时间:2016-12-18 10:57:53

标签: python matplotlib 3d

我的图像尺寸为330x330像素,实际尺寸为5cm x 5cm。当我尝试使用函数plot_surface时,图像的左上角粘在原点上。但是,我希望图像的中心位于原点,

imageView

我有什么方法可以做到这一点?如何将单位系统更改为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()

1 个答案:

答案 0 :(得分:0)

您可以使用figsize=(width, height)参数在matplotlib中设置图形的大小。像素中的图形大小由dpi = 80参数确定。例如

plt.figure(figsize=(8,6))
...
plt.savefig("out.png", dpi=100)

将产生8英寸6英寸的数字,其具有800 x 600像素 您无法将单位从英寸更改为其他单位,但由于1英寸= 2.54厘米,您可以根据需要计算所需的图形大小。

所有这些都与matplotlib使用的绘图单元无关 matplotlib中的绘图与实际长度单位没有任何关系,即您可以在一张纸大小的一个图中绘制太阳系地图旁边的原子大小。

图中原点的位置由轴限制决定。如果您的轴从0变为2,则粗略地说明原点位于图的左侧,如果您的图从-1变为1,则原点为在中间。

ax是您的轴对象时,您可以使用

设置原点
ax.set_xlim([-1,1])
ax.set_ylim([-1,1])

在2D情况下,或者对于3D情况通过

ax.set_xlim3d([-1,1])
ax.set_ylim3d([-1,1])
ax.set_zlim3d([-1,1])

<小时/> 现在我们有一些代码可以使用,我们可以使用适当的坐标在中心设置图像。如果轴限制的情况下,如果图像定义在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()