Python Matplotlib,三维对数轴,图形不完整

Python Matplotlib,三维对数轴,图形不完整,python,matplotlib,3d,Python,Matplotlib,3d,我正在玩matplotlib,我想有一个对数轴的3d图形。我尝试了一些代码,比如下面的代码,但是我一次只能看到图形的一部分,如果我尝试移动它,我可以看到其他部分,但是,不完整 有人知道如何用对数轴绘制3D图吗 如果轴是线性的,我可以看到3D图像,但当我切换到“log”时,我只能看到它的一部分 import matplotlib as mpl import numpy as np from mpl_toolkits.mplot3d import Axes3D import matplotlib.p

我正在玩matplotlib,我想有一个对数轴的3d图形。我尝试了一些代码,比如下面的代码,但是我一次只能看到图形的一部分,如果我尝试移动它,我可以看到其他部分,但是,不完整

有人知道如何用对数轴绘制3D图吗

如果轴是线性的,我可以看到3D图像,但当我切换到“log”时,我只能看到它的一部分

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

需要x、y、z参数:如果试图绘制x数据[:,0]和y数据[:,1]的z数据[:,2](3点)函数,则在正确设置xlim3d、ylim3d和zlim3d时,将看到3个点。这可以通过将它们设置为每个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()

现在,如果要以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()

我将matplotlib更新为1.3.1,现在我可以看到完整的图形。现在,我认为轴不是对数比例。我在matplotlib中绘制了一个图,在gnuplot中绘制了同一个图,可以看出每10次幂之间的距离,是完全不同的

你一次只看一部分情节是什么意思?三个点中只有一个点?摆脱
集合(你命名它)lim3d
应该给你所有的点。另请看:这就像是如果绘图比画布大,不幸的是我无法附加图形:(我知道这是可以做到的,我想,问题在于我的电脑,我用debian运行它,我想上传一个数字,但因为我是新来的,我的名声不允许我仍然发布图片。你使用的是哪一个python版本?我用debian wheezy运行的是python 2.7.3。也许我的版本有问题。在这个答案中没有任何地方可以做到。)使用对数轴。这不是问题的正确答案。