我有一个3元组的列表,表示3D空间中的一组点.我想绘制一个覆盖所有这些点的表面.mplot3d包中的plot_surface函数需要作为参数X,Y和Z,它们是2d数组.plot_surface是绘制曲面的正确函数吗?如何将数据转换为所需格式?
data = [(x1,y1,z1),(x2,y2,z2),.....,(xn,yn,zn)]
我正在寻找一种使用Python和matplotlib创建四维图(表面加上色标)的方法.我能够使用前三个变量生成曲面,但我没有成功添加第四个变量的颜色标度.以下是我的数据的一小部分.任何帮助将不胜感激.谢谢
数据子集
var1 var2 var3 var4
10.39 73.32 2.02 28.26
11.13 68.71 1.86 27.83
12.71 74.27 1.89 28.26
11.46 91.06 1.63 28.26
11.72 85.38 1.51 28.26
13.39 78.68 1.89 28.26
13.02 68.02 2.01 28.26
12.08 64.37 2.18 28.26
11.58 60.71 2.28 28.26
8.94 65.67 1.92 27.04
11.61 59.57 2.32 27.52
19.06 74.49 1.69 63.35
17.52 73.62 1.73 63.51
19.52 71.52 1.79 63.51
18.76 67.55 1.86 63.51
19.84 53.34 2.3 63.51
20.19 59.82 1.97 63.51
17.43 57.89 2.05 63.38
17.9 59.95 …Run Code Online (Sandbox Code Playgroud) 我是新来的机器学习,想建立使用一个小样本k-nearest-Neighbor-method与Python的库Scikit。
转换和拟合数据可以很好地工作,但是我无法弄清楚如何绘制一个显示数据点被“邻居”包围的图形。
我正在使用的数据集如下所示:
从我的理解,我得到一个数组,显示euclidean-distances所有数据点,使用kneighbors_graph从Scikit。因此,我的第一个尝试是“简单地”绘制从该方法得到的矩阵。像这样:
def kneighbors_graph(self):
self.X_train = self.X_train.values[:10,] #trimming down the data to only 10 entries
A = neighbors.kneighbors_graph(self.X_train, 9, 'distance')
plt.spy(A)
plt.show()
Run Code Online (Sandbox Code Playgroud)
因此,我试图调整您可以在有关ScikitIris_dataset的每个页面上找到的示例。不幸的是,它仅使用两个功能,因此它并不是我想要的,但我仍然希望至少获得第一个输出:
def plot_classification(self):
h = .02
n_neighbors = 9
self.X = self.X.values[:10, [1,4]] #trim values to 10 entries and only columns 2 and 5 (indices 1, 4)
self.y = self.y[:10, ] #trim outcome column, too
clf = neighbors.KNeighborsClassifier(n_neighbors, …Run Code Online (Sandbox Code Playgroud) 我对matplotlib很新(这也是我的第一个问题).我试图表示脑电图记录的头皮表面电位.到目前为止,我有一个球体投影的二维图形,我使用contourf生成,几乎归结为普通的热图.
有没有什么方法可以在半个球体上完成?,即生成具有由值列表给出的表面颜色的3D球体?像这样的东西,http://embal.gforge.inria.fr/img/inverse.jpg,但是我只有半个球体就足够了.
我已经看到了一些相关的问题(例如,Matplotlib 3d彩色图 - 是否可能?),但它们要么没有真正解决我的问题,要么到目前为止仍然没有答案.
我也花了一个上午看了无数的例子.在我发现的大部分内容中,表面某个特定点的颜色表示其Z值,但我不希望...我想绘制表面,然后用数据指定颜色I有.
我正在尝试绘制一个三维表面,其中三个维度中的每个维度在一个单独的数组中,每个坐标处的表面着色是x,y,z的函数.一种numpy.pcolormesh,但在4D,而不是3D.3D图由下式给出:
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
fig = plt.figure()
ax = fig.gca(projection='3d')
x = np.logspace(-1.,np.log10(5),50)
y = np.linspace(6,9,50)
z = np.linspace(-1,1,50)
colors = LikeBeta(y,range(50),range(50))
ax.plot_trisurf(x,y,z,cmap=colors,linewidth=0.2)
Run Code Online (Sandbox Code Playgroud)
哪里
def LikeBeta(rho0,r0,beta):
M0 = 10**rho0*r0_array[r0]**3
I = cst*M0*sigma_los_beta[beta,:,r0]
S = dv**2+I
res = (np.log(S) + (v-u)**2/S).sum()
return res/2.
Run Code Online (Sandbox Code Playgroud)
可能cmap=colors是错的,但问题出在其他地方.我收到以下错误:
----> 8 colors = LikeBeta(y,range(50),range(50))
----> 4 I = cst*M0*sigma_los_beta[beta,:,r0]
ValueError: operands could not be broadcast together with shapes (50,) (50,353)
Run Code Online (Sandbox Code Playgroud)
确实sigma_los_beta是一个我单独评估并具有形状的阵列,(50,353,50)而那些353是我必须拥有的数据.
如何将此函数转换为与其他条目兼容的表单plot_trisurf?
抱歉,我无法提供最小的工作代码,因为dv,v和u是数据.非常感谢您的帮助.干杯