简体   繁体   English

如何将模型中带有颜色的数据绘制到matplotlib底图上? 为什么没有显示数据?

[英]How do I plot data with color from my model onto matplotlib Basemap? Why is data not showing up?

I am trying to get my data output from my model plotted on Basemap. 我试图从我的模型的底图上绘制数据输出。 I can see the map, but not the points. 我可以看到地图,但看不到要点。 What is the issue? 有什么问题 I am using the latest version of scikit-learn and basemap for python 2.7. 我正在使用python 2.7的最新版本的scikit-learn和basemap。 I have the following code: 我有以下代码:

dataframe = pd.read_csv('powerplants.csv') # CSV file that contains latitude column, longitude column, and id for the powerplant
colormap = np.arange(500)
labels = modeloutput.labels_ # assume this is output of my model

fig = plt.figure()
ax = fig.add_subplot(111, axisbg='w', frame_on=True)
fig.set_size_inches(18.5, 10.5)
map_points = [...] # assume this is a list populated with coordinates from the csv
# Plot the clusters on the map
# m is a basemap object
m.scatter(
         [geom.x for geom in map_points],
         [geom.y for geom in map_points],
         20, marker='o', lw=.25,
         c = colormap(labels.astype(float)),
         alpha =0.9, antialiased=True,
         zorder=3)
m.fillcontinents(color='#555555')
plt.show()

This example is modified from the official example . 此示例是从官方示例修改而来的。 Key parts for using colormap in scatter plot are: 在散点图中使用颜色图的关键部分是:

  1. x.data and y.data are transformed coordinates. x.datay.data是转换后的坐标。

  2. c = np.random.randint(1, 500, size=len(lats)) are values mapping to a color in the colormap corresponding to each point. c = np.random.randint(1, 500, size=len(lats))是映射到颜色图中与每个点相对应的颜色的值。

Some parts which might be not necessary for you are: 您可能不需要的一些部分是:

 import urllib, os from netCDF4 import Dataset import numpy as np filename, _ = urllib.urlretrieve('http://coastwatch.pfeg.noaa.gov/erddap/tabledap/apdrcArgoAll.nc?longitude,latitude,time&longitude>=0&longitude<=360&latitude>=-90&latitude<=90&time>=2010-01-01&time<=2010-01-08&distinct()') dset = Dataset(filename) lats = dset.variables['latitude'][:] lons = dset.variables['longitude'][:] dset.close() os.remove(filename) c = np.random.randint(1, 500, size=len(lats)) x, y = m(lons,lats) 

This part is used for generating an data sample. 这部分用于生成数据样本。 You might want to replace it with your real data. 您可能需要用实际数据替换它。

 from mpl_toolkits.axes_grid1 import make_axes_locatable divider = make_axes_locatable(ax) fig.colorbar(pc, cax=divider.append_axes("right", size="5%", pad=0.05)) 

This is a direct application of bogatron's answer to make the size of colorbar matches the plot. 这是bogatron答案的直接应用,可以使颜色条的大小与图相匹配。 It's your choice of keeping it or not. 您选择保留还是不保留。

import urllib, os

import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable
from mpl_toolkits.basemap import Basemap
from netCDF4 import Dataset
import numpy as np

# data downloaded from the form at
# http://coastwatch.pfeg.noaa.gov/erddap/tabledap/apdrcArgoAll.html
filename, _ = urllib.urlretrieve('http://coastwatch.pfeg.noaa.gov/erddap/tabledap/apdrcArgoAll.nc?longitude,latitude,time&longitude>=0&longitude<=360&latitude>=-90&latitude<=90&time>=2010-01-01&time<=2010-01-08&distinct()')
dset = Dataset(filename)
lats = dset.variables['latitude'][:]
lons = dset.variables['longitude'][:]
dset.close()
os.remove(filename)
c = np.random.randint(1, 500, size=len(lats))

# draw map with markers for float locations
fig = plt.figure()
ax = fig.add_subplot(111, axisbg='w', frame_on=True)
fig.set_size_inches(18.5, 10.5)
m = Basemap(lon_0=180, ax=ax)
x, y = m(lons,lats)
pc = m.scatter(x.data, y.data, 20, marker='o', c=c, lw=.25, alpha =0.9, antialiased=True, zorder=3, cmap='summer')
m.fillcontinents(color='#555555')
divider = make_axes_locatable(ax)
fig.colorbar(pc, cax=divider.append_axes("right", size="5%", pad=0.05))
plt.show()

在此处输入图片说明

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM