こんにちは私はいくつかの国で特定の色で塗られたpythonsベースマップを使用してマップをプロットしようとしています。Pythonベースマップで国を塗りつぶし
そこにすばやく簡単な解決策がありますか?
こんにちは私はいくつかの国で特定の色で塗られたpythonsベースマップを使用してマップをプロットしようとしています。Pythonベースマップで国を塗りつぶし
そこにすばやく簡単な解決策がありますか?
@unutbuがすでに言っているように、Thomasの投稿hereは、まさにあなたが後にしているものです。
import cartopy.crs as ccrs
import matplotlib.pyplot as plt
import cartopy.io.shapereader as shpreader
import itertools
import numpy as np
shapename = 'admin_0_countries'
countries_shp = shpreader.natural_earth(resolution='110m',
category='cultural', name=shapename)
# some nice "earthy" colors
earth_colors = np.array([(199, 233, 192),
(161, 217, 155),
(116, 196, 118),
(65, 171, 93),
(35, 139, 69),
])/255.
earth_colors = itertools.cycle(earth_colors)
ax = plt.axes(projection=ccrs.PlateCarree())
for country in shpreader.Reader(countries_shp).records():
print country.attributes['name_long'], earth_colors.next()
ax.add_geometries(country.geometry, ccrs.PlateCarree(),
facecolor=earth_colors.next(),
label=country.attributes['name_long'])
plt.show()
このサイトの回答の重要な部分をこのサイトに投稿するか、あなたの投稿のリスクが削除されるようにすることを忘れないように注意してください[「リンクをはるかに超える」回答を記載したFAQを参照してください。](http:// stackoverflow .com/faq#deletion)もしあなたが望むのであれば、あなたは依然としてリンクを含めることができますが、 '参照'としてだけです。答えは、リンクを必要とせずに単独で立つべきです。 – Taryn
ありがとう@bluefeet - なぜそうなるのか分かります。私はいくつかの新しい情報を与えるために答えを更新しました。(私は著作権を所有していなかった元のリンクを複製することなく)。乾杯、 – pelson
shpreader.natural_earthを呼び出すと、HTTP 404が見つかりませんでした。明らかにそれをダウンロードしようとしていますか? – Leo
pelsonからの回答に触発され、私はポストを:
あなたは少しhttp://scitools.org.uk/cartopy/docs/latest/tutorials/using_the_shapereader.htmlから適合させることができる(v0.7)でCartopy、対応するコードでこれを行うにしたいなら私の解決策。私はあなたに最高の作品を残すので、私は現時点では何の答えも受け入れません。
#! /usr/bin/env python
import sys
import os
from pylab import *
from mpl_toolkits.basemap import Basemap
import matplotlib as mp
from shapelib import ShapeFile
import dbflib
from matplotlib.collections import LineCollection
from matplotlib import cm
def get_shapeData(shp,dbf):
for npoly in range(shp.info()[0]):
shpsegs = []
shpinfo = []
shp_object = shp.read_object(npoly)
verts = shp_object.vertices()
rings = len(verts)
for ring in range(rings):
if ring == 0:
shapedict = dbf.read_record(npoly)
name = shapedict["name_long"]
continent = shapedict["continent"]
lons, lats = zip(*verts[ring])
if max(lons) > 721. or min(lons) < -721. or max(lats) > 91. or min(lats) < -91:
raise ValueError,msg
x, y = m(lons, lats)
shpsegs.append(zip(x,y))
shapedict['RINGNUM'] = ring+1
shapedict['SHAPENUM'] = npoly+1
shpinfo.append(shapedict)
lines = LineCollection(shpsegs,antialiaseds=(1,))
lines.set_facecolors(cm.jet(np.random.rand(1)))
lines.set_edgecolors('k')
lines.set_linewidth(0.3)
ax.add_collection(lines)
if __name__=='__main__':
f=figure(figsize=(10,10))
ax = plt.subplot(111)
m = Basemap(projection='merc',llcrnrlat=30,urcrnrlat=72,\
llcrnrlon=-40,urcrnrlon=50,resolution='c')
m.drawcountries(linewidth=0.1,color='w')
sfile = 'ne_10m_admin_0_countries'
shp = ShapeFile(sfile)
dbf = dbflib.open(sfile)
get_shapeData(shp,dbf)
show()
sys.exit(0)
これは結果ここ
が正しい色でアルバニアを埋めるためにどのように私の例である。)(私が知っている非常にエレガントではありません)。
#HACK for Albania
shpsegs = []
shpinfo = []
shp_object = shp.read_object(9)
verts = shp_object.vertices()
rings = len(verts)
for ring in range(rings):
if ring == 0:
shapedict = dbf.read_record(9)
name = shapedict["name_long"]
continent = shapedict["continent"]
lons, lats = zip(*verts[ring])
if max(lons) > 721. or min(lons) < -721. or max(lats) > 91. or min(lats) < -91:
raise ValueError,msg
x, y = m(lons, lats)
shpsegs.append(zip(x,y))
shapedict['RINGNUM'] = ring+1
shapedict['SHAPENUM'] = npoly+1
shpinfo.append(shapedict)
lines = LineCollection(shpsegs,antialiaseds=(1,))
if name == 'Albania':
lines.set_facecolors('w')
lines.set_edgecolors('k')
lines.set_linewidth(0.3)
ax.add_collection(lines)
他のすべてのシェイプを実行した後に行うことが重要です。おそらく、あなたはこのコードの一部を取り除くことができますが、私が言ったように、それは私のためには十分でした。名前や大陸によって私のアプリケーションI色のcontriesのために
、したがって、これらの行:私はこのウェブサイトから得た使用
name = shapedict["name_long"]
continent = shapedict["continent"]
あなたのアルバニアは沈んでいます。多くの人が気付くであろう:D – theta
はい、実際はアルメニアにも同じことが起こります。私は、後でこれらの2つの国を明示的に埋めることによって、仕事をする必要がありました。naturalearthdataからの人々とのinquieryは決定的なものではなく、私が私のためにそれを固定した後、私はこれをフォローしませんでした –
@red_tiger私はアルゼンチンとアンゴラと同じ問題を抱えています。あなたは "アルバニアの問題"にあなたの解決策を投稿できますか? NaturalEarthの人々は何を言ったのですか?ありがとう。 –
多分便利ます:http://www.geophysique。/2011/01/27/matplotlib-basemap-tutorial-07-shapefiles-unleached/ – unutbu
私はこれを助けます:http://matplotlib.1069221.n5.nabble.com/How-to-draw-a-specific- country-by-basemap-td15744.html –
これらのコメントをいただき、ありがとうございました。私はまた、私が探していたちょうど自由な国のデータを持つサイトを見つけました:[http://www.naturalearthdata.com/](http://www.naturalearthdata.com/) –