2016-12-18 17 views
0

我有一個尺寸爲330x330像素,實際尺寸爲5cm x 5cm的圖像。當我嘗試使用功能plot_surface時,圖像的左上角卡住了原點。不過,我想在圖像的中心在這樣的原點定位,Matplotlib如何在3D圖的XY表面上以原點爲中心放置2D圖像?

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() 
+0

在問這裏之前,我會建議,[take the tour](http://stackoverflow.com/tour)爲例如熟悉[如何提出問題](http://stackoverflow.com/help/how-to-ask)以及本網站上的常規系統。 – ImportanceOfBeingErnest

回答

0

您可以使用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中繪製的圖形與真實長度單位無關,也就是說,您可以繪製太陽系地圖旁邊原子的大小,都在一張紙的大小的一個小區裏。

圖中原點的位置由軸限制確定。粗略地說,如果軸從02,原點位於圖的左側,如果您的圖從-11,原點位於中間。

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() 
+0

嗨@ImportanceOfBeingErnest,謝謝你的回答。但我認爲我關於圖像位置的問題仍然存在。通過改變軸的極限,原點確實到了中間,但圖像仍然卡在第一象限中。我希望圖像中心位於原點,以便整個圖像看起來像我上傳的圖像中顯示的正方形 – AnnieBin

+0

更新了答案。 – ImportanceOfBeingErnest

+0

我明白了。非常感謝 – AnnieBin

相關問題