Построение неупорядоченных точек как контура в matplotlib - PullRequest
0 голосов
/ 14 мая 2019

У меня есть список словарей, содержащих неупорядоченные точки данных:

print(data)
[{'ID': 1, 'Longitude': 18.6081, 'Latitude': 50.0977, 'Cost': -1.0}, 
{'ID': 2, 'Longitude': 18.6091, 'Latitude': 50.197700000000005, 'Cost': 4},
{'ID': 3, 'Longitude': 18.6081, 'Latitude': 50.297700000000006,'Cost':4},....]

Я хочу отобразить значение функции 'cost' как countorf, используя matplotlib.

До сих пор я тестировал следующий код:

   lat = []
   lon = []
   cost = []
   for dataPoint in data:
       if dataPoint["Cost"] == -1:
           continue

       lon.append(dataPoint["Longitude"])
       lat.append(dataPoint["Latitude"])
       cost.append(dataPoint["Cost"])


   xi = np.linspace(min(lon), max(lon))
   yi = np.linspace(min(lat), max(lat))
   zi = griddata(lon, lat, cost, xi, yi, interp='linear')

   #make a plot
   plt.contourf(xi, yi, zi, 100)
   plt.colorbar()
   plt.show()

Вышеупомянутый код работает, но он интерполирует значения между точками данных, и все, что я хочу сделать, это построить все точки из массива данных на плоскости с цветным ядром, соответствующим его стоимости. Как я могу это сделать?

1 Ответ

0 голосов
/ 15 мая 2019

Это то, что вы имеете в виду?

In [41]: import matplotlib.pyplot as plt ; from matplotlib.mlab import griddata           
In [42]: import numpy as np                                                               
In [43]: N = 300                                                                          
In [44]: x = np.random.rand(N) ; y = np.random.rand(N)                                    
In [45]: z = np.sin(x*10)+np.cos(y*4)+0.05*np.random.rand(N)                              
In [46]: xi = yi = np.linspace(0,1)                                                       
In [47]: zi = griddata(x, y, z, xi, yi, interp='linear')                                  
In [48]: plt.contour(xi, yi, zi, 10) ;     
In [49]: plt.scatter(x, y, c=z) ;                                                              
In [50]: plt.colorbar() ;                                                                  

enter image description here

...