在matplotlib中将无序点绘制为轮廓f

时间:2019-05-14 17:37:21

标签: matplotlib python-3.7 contourf

我有一个包含无序数据点的字典列表:

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},....]

我想使用matplotlib将'cost'函数的值绘制为countorf。

到目前为止,我已经测试了以下代码:

   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 :(得分:0)

这是你的意思吗?

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