pythonkde可以将轮廓和路径转换为特定的json格式

2024-05-16 14:10:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用Python进行内核密度估计,得到如下所示的轮廓和路径。(这是我的示例数据:https://pastebin.com/193PUhQf)。

from numpy import *
from math import *
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

x_2d = []
y_2d = []
data = {}
data['nodes'] = []

# here is the sample data:
# https://pastebin.com/193PUhQf
X =  [.....]

for Picker in xrange(0, len(X)):
    x_2d.append(X[Picker][0])
    y_2d.append(X[Picker][1])

# convert to arrays
m1 = np.array([x_2d])
m2 = np.array([y_2d])

x_min = m1.min() - 30
x_max = m1.max() + 30
y_min = m2.min() - 30
y_max = m2.max() + 30

x, y = np.mgrid[x_min:x_max:200j, y_min:y_max:200j]
positions = np.vstack([x.ravel(), y.ravel()])
values = np.vstack([m1, m2])

kde = stats.gaussian_kde(values)

z = np.reshape(kde(positions).T, x.shape)

fig = plt.figure(2, dpi=200)
ax = fig.add_subplot(111)

pc = ax.pcolor(x, y, z)
cb = plt.colorbar(pc)
cb.ax.set_ylabel('Probability density')

c_s = plt.contour(x, y, z, 20, linewidths=1, colors='k')
ax.plot(m1, m2, 'o', mfc='w', mec='k')
ax.set_title("My Title", fontsize='medium')
plt.savefig("kde.png", dpi=200)
plt.show()

有一种使用R获得轮廓的类似方法,如下所述: http://bl.ocks.org/diegovalle/5166482

问:如何使用python脚本或作为起点实现相同的输出? 所需的输出应该类似于contours_tj.json,它可以由leaflet.jslib使用。在

更新:

我的输入数据结构由三列组成,以逗号分隔:

  1. 第一个是X值
  2. 第二个是Y值
  3. 第三个是我的数据的ID,它没有数值,它只是一个数据点的标识符。在

更新2:

如果简单地说,问题是,我希望使用numpy数组格式的输入文件获得与上述链接相同的输出。在

更新3:

我的输入数据结构为列表类型:

^{pr2}$

以下是前几行:

print X[0:5]

[[10.800584, 11.446064, 4478597], [10.576840,11.020229, 4644503], [11.434276,10.790881, 5570870], [11.156718,11.034633, 6500333], [11.054956,11.100243, 6513301]]

Tags: 数据fromimportnumpydatanppltax
2条回答

现在专注于此

有一种类似的方法可以使用R来获得轮廓,这里描述如下:http://bl.ocks.org/diegovalle/5166482

我要求您考虑Python中的rpy2包,如果这对您可行的话

http://rpy.sourceforge.net/rpy2/doc-2.4/html/introduction.html

geojsoncontour是一个python库,用于将matplotlib轮廓转换为geojson

geojsoncontour.contour_to_geojson需要contour_levels参数。pyplot.contour中的级别是自动选择的,但是您可以使用c_s._levels来访问它们

因此,对于您的示例,您可以:

import geojsoncontour
# your code here

c_s = plt.contour(x, y, z, 20, linewidths=1, colors='k')

# Convert matplotlib contour to geojson
geojsoncontour.contour_to_geojson(
    contour=c_s,
    geojson_filepath='out.geojson',
    contour_levels=c_s._levels,
    ndigits=3,
    unit='m'
)

相关问题 更多 >