2014-03-05 32 views
3

我正在玩matplotlib,我想有一個3d數字與對數軸。我正在嘗試一些代碼,如下面的代碼,但是我一次只能看到圖的一部分,如果我嘗試移動它,我可以看到其他部分,但不完整。Matplotlib,3D logaxis,不完整的數字

有沒有人有任何想法如何使日誌軸的3D繪圖?

如果軸線是線性的,我可以看到3D圖像,但只要我更改爲「日誌」,我只能看到它的一部分。

import matplotlib as mpl 
import numpy as np 
from mpl_toolkits.mplot3d import Axes3D 
import matplotlib.pyplot as plt 
data=np.array([[1,10,100],[10,1,1],[2,20,82]]) 
fig=plt.figure() 
ax=Axes3D(fig) 
#ax.set_xlim3d(0.1,15) 
#ax.set_ylim3d(0.1,15) 
#ax.set_zlim3d(0.1,15) 
ax.xaxis.set_scale('log') 
ax.yaxis.set_scale('log') 
ax.zaxis.set_scale('log') 
ax.scatter(data[:,0],data[:,1],data[:,2]) 
plt.show() 
+0

你一次只看到一部分情節意味着什麼?三個點中只有一個點?擺脫'set_(you_name_it)lim3d'應該給你所有的點。 –

+1

也見:https://github.com/matplotlib/matplotlib/issues/209 – tacaswell

+0

它就像是如果情節比帆布大,不幸的是我不能附上數字:( – joc

回答

-1

3d scatter plot需要的x,y和z參數:如果你試圖繪製ž數據[:,2]的X數據(3分)函數[:,0]和y數據[:,1],當xlim3d,ylim3d,zlim3d設置正確時,您將看到3個點。這可以通過將它們設置爲MIN()和各X,Y,Z值的最大值()來完成:

import matplotlib as mpl 
import numpy as np 
from mpl_toolkits.mplot3d import Axes3D 
import matplotlib.pyplot as plt 
data=np.array([[1,10,100],[10,1,1],[2,20,82]]) 
fig=plt.figure() 
ax=Axes3D(fig) 
ax.set_xlim3d(data[:,0].min(),data[:,0].max()) 
ax.set_ylim3d(data[:,1].min(),data[:,1].max()) 
ax.set_zlim3d(data[:,2].min(),data[:,2].max()) 
ax.xaxis.set_scale('log') 
ax.yaxis.set_scale('log') 
ax.zaxis.set_scale('log') 
ax.set_xlabel('x') 
ax.set_ylabel('y') 
ax.set_zlabel('z') 
ax.scatter(data[:,0],data[:,1],data[:,2]) 
plt.show() 

enter image description here

現在,如果你想繪製的數據陣列中的3D方式,在這種情況下9點,你需要各自的x軸和y軸。這可以通過np.meshgrid()完成。在這個例子中,我設置了x,y等距[1,2,3]。

import matplotlib as mpl 
import numpy as np 
from mpl_toolkits.mplot3d import Axes3D 
import matplotlib.pyplot as plt 
data=np.array([[1,10,100],[10,1,1],[2,20,82]]) 
datax=np.array([1,2,3]) 
datay=np.array([1,2,3]) 
dataxM,datayM = np.meshgrid(datax, datay) 

fig=plt.figure() 
ax=Axes3D(fig) 
ax.set_xlim3d(datax.min(),datax.max()) 
ax.set_ylim3d(datay.min(),datay.max()) 
ax.set_zlim3d(data.min(),data.max()) 
ax.xaxis.set_scale('log') 
ax.yaxis.set_scale('log') 
ax.zaxis.set_scale('log') 
ax.set_xlabel('x') 
ax.set_ylabel('y') 
ax.set_zlabel('z') 
ax.scatter(dataxM,datayM,data) 
plt.show() 

​​

+0

我看到它可以完成,我猜,問題出在我的電腦上,我在debian上運行它,我想上傳一個數字,但由於我是新手,我的聲望不允許我仍然發佈圖像。 – joc

+0

您正在使用哪個版本的Python ?,我在Debian中運行python 2.7.3喘氣。也許我的版本有問題。 – joc

+1

在這個答案中沒有地方使用對數座標軸,這不是真正的問題答案。 – dbliss

1

我更新matplotlib 1.3.1,現在我可以看到全圖。現在,我認爲這個座標軸不是對數座標。我在matplotlib matplotlib中做了一個情節,並用gnuplot gnuplot作了同樣的情節,可以看出每個10的冪之間的距離是完全不同的。