我的图像尺寸为330x330像素,实际尺寸为5cm x 5cm。当我尝试使用函数plot_surface
时,图像的左上角粘在原点上。但是,我希望图像的中心位于原点,
我有什么方法可以做到这一点?如何将单位系统更改为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()
答案 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()