6

質問を削除できませんでした。質問を参照してください: Basemap を使用した辞書の値に基づく国の陰影の状態

メキシコの各州のデータ (特定の年の病気の人の数) をプロットしたいと考えています。私はjupyterノートブックを使用しています。これまでのところ、いくつかのオプションとチュートリアルを見てきましたが、国の地図をプロットする方法を明示的に説明しているようには見えません。以下に、私が見たいくつかのオプション/チュートリアルと、それらが機能しなかった理由を説明します (これは、チュートリアルがあまり単純ではないことを主張するためだけに行います)。

  1. ボケ ( http://docs.bokeh.org/en/latest/docs/gallery/texas.html )。チュートリアルでは、us_counties が bokeh.sampledata にある場合、テキサス州がプロットされます。ただし、サンプルデータで他の国は見つかりませんでした。

  2. mpl_toolkits.basemap ( http://www.geophysique.be/2011/01/27/matplotlib-basemap-tutorial-07-shapefiles-unleached/ )。シェープファイルをインポートできますが、実行できませんfrom shapefile import ShapeFile(ImportError: 名前のシェープファイルをインポートできません)。さらに、dbflib ライブラリをダウンロードできませんでした。

  3. Vincent (なぜ Python Vincent マップ ビジュアライゼーションがデータ フレームからデータをマップしないのですか? ) 上記のチュートリアルの回答からコードを実行すると、画像が表示されません (コマンドを使用したにもかかわらずvincent.core.initialize_notebook())。

  4. プロット ( https://plot.ly/python/choropleth-maps/ )。このチュートリアルでは、csv テーブルから情報をインポートして米国の地図をプロットします (他の国の情報は利用できません)。別の国をプロットしたい場合は、テーブルを作成することは可能ですか?

この4つのオプションを調べたところ、チュートリアルがあまり明確でなく、従うのが簡単ではないことがわかりました. Python で国の地図を描くのが難しいとは信じがたいです。過去のチュートリアルで説明した方法よりも簡単な方法があるに違いないと思います。

質問は次のとおりです。Pythonを使用して特定の国(任意)の地図をプロットする最も簡単な(願わくばシンプルな)方法はどれですか?

次のパッケージをインストールしました: matplotlib、pyshp、mpl_toolkits.basemap、bokeh、pandas、numpy。http://www.gadm.org/からメキシコの地図もダウンロードしました。

前もって感謝します。

4

2 に答える 2

7

この質問は現在の形では答えられないようですが、少なくとも、ベースマップを使用するときに何か問題があるように思われることに注意してください.Shapefileをインポートしたくはありませんが、オブジェクトのreadshapefileメソッドを使用して読み取るだけです. Basemap:

m = Basemap(projection='tmerc')
m.readshapefile("/path/to/your/shapefile", "mexican_states")

その後、(配列のリストとして) を介して各州の境界の座標にアクセスし、 を介しm.mexican_statesて対応する情報 (名前、おそらく識別コードなど)にアクセスできますm.mexican_states_info。次に、状態の名前/コード ( にあるものに対応) とプロットする値を含む、ある種の dict または DataFrame が必要m.mexican_states_infoになります。次のような dict という名前があると仮定すると、簡単な例はmexican_states_sick_people次のようになり{"Mexico City":123, "Chiapas":35, ...}ます。

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.collections import PatchCollection
from mpl_toolkits.basemap import Basemap
from shapely.geometry import Polygon
from descartes import PolygonPatch

fig, ax = plt.subplots()

# Set up basemap and read in state shapefile (this will draw all state boundaries)
m = Basemap(projection='tmerc')
m.readshapefile("/path/to/your/shapefile", "mexican_states")

# Get maximum number of sick people to calculate shades for states based on relative number    
max_sick = np.max(mexican_states_sick_people.values())

# Loop through the states contained in shapefile, attaching a PolygonPatch for each of them with shade corresponding to relative number of sick people
state_patches = []
for coordinates, state in zip(m.mexican_states, m.mexican_states_info):
    if state["State_name"] in mexican_states_sick_people.keys():
        shade = mexican_states_sick_people[state["State_name"]]/max_sick       
        state_patches.append(PolygonPatch(Polygon(coordinates), fc = "darkred", ec='#555555', lw=.2, alpha=shade, zorder=4)

 # Put PatchCollection of states on the map
ax.add_collection(PatchCollection(state_patches, match_original=True))

この例は、機能する州のシェープファイルがあり、病人のデータセットに州ごとに何らかの識別子 (名前またはコード) があることを確認して、数字を一致させることができる場合、多かれ少なかれ機能するはずです。シェープファイル内の状態の識別子 (これはshade = ...、ループ内の行が依存するものです。例では、シェープファイルの名前をキーとして使用して辞書内の vals にアクセスしています)。

これが役に立てば幸いです、頑張ってください!

于 2016-03-20T19:15:58.743 に答える
4

これはあなたが望む答えではないかもしれませんが、Plotly for mapsを見たことがありますか? 彼らの例はあなたがやりたいこととまったく同じように見えますが、私自身はよく知らないので、どのマップが利用可能で、自分のマップをアップロードするのがどれほど簡単かはわかりません.

于 2016-03-18T17:33:13.403 に答える