2017-06-27 5 views
0

私のモデルから私のデータ出力をBasemapにプロットしようとしています。私は地図を見ることができますが、ポイントは見ることができません。どうした?私はPython 2.7用のscikit-learnとbasemapの最新バージョンを使用しています。私は次のコードを持っています:モデルからmatplotlib Basemapに色を付けたデータをどのようにプロットするのですか?データが表示されないのはなぜですか?

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() 
+0

本当にあなたのデータがどのようなものか知ってはいけません。 'colormap(labels.astype(float)) 'とはどういう意味ですか?呼び出し可能なndarray?エラーメッセージがありますか?より完全で検証可能な例を提供することは可能でしょうか? –

+0

私は確信していません、それはkmeansモデルの出力です。データは緯度経度を持つ単なるcsvファイルです。 astype(フロート)がなければ何もしません。エラーメッセージは表示されませんが、バックグラウンドベースマップ自体を除いてプロットするものはありません。 – Rolando

+0

私の容疑者は問題は 'colormap(labels.astype(float))'から来ています。 'colormap'は' ndarray'であり、呼び出し可能ではないかもしれません。私はあなたのデータを見たり、関連するサンプルをあなたの問題を解決するのに役立つと言います。私は昨日あなたから別の質問に答えたことを実感します。これらはあなたの問題を解決することができません申し訳ありません。私はベストを尽くし、あなたの例に近いかもしれない下の例を作った。うまくいけばそれは少し助けてください。 –

答えて

0

この例はofficial exampleから変更されています。散布図にカラーマップを使用するための重要な部分は、以下のとおりです。

  1. x.datay.dataは、変換された座標です。

  2. c = np.random.randint(1, 500, size=len(lats))は、各点に対応するカラーマップ内の色にマッピングされる値です。

あなたのために必要ではないかもしれないいくつかの部分は、以下のとおりです。

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) 

この部分は、データサンプルを生成するために使用されています。実際のデータに置き換えることができます。

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)) 

これは、カラーバーのサイズはプロットに一致するようにするbogatron's answerの直接的なアプリケーションです。それを維持するかどうかはあなたの選択です。

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() 

enter image description here

関連する問題