私はフォリウムでレーダーデータをプロットしようとしていますが、ほとんどそこにいます。私はこの例( 境界内の等高線図データ(lat、lon、value)とGeoJSONのエクスポート )に従ってデータをGeoJson形式に変換しました。
nb_class = 20
collec_poly = plt.contourf(lons,lats,np.array(poshdata), nb_class,alpha=0.5)
gdf = collec_to_gdf(collec_poly) # From link above
gdf.to_json()
colors = [p.get_facecolor().tolist()[0] for p in collec_poly.collections]
gdf['RGBA'] = colors
gdf
これにより、ジオメトリとRGBAの2つの列が出力されます。
RGBA geometry
0 [0.0, 0.0, 0.713903743316, 1.0] (POLYGON ((-71.57032079644679 42.2775236331535...
1 [0.0, 0.0960784313725, 1.0, 1.0] (POLYGON ((-71.56719970703125 42.2721176147460...
2 [0.0, 0.503921568627, 1.0, 1.0] (POLYGON ((-71.55678558349609 42.2721176147460...
3 [0.0, 0.896078431373, 0.970904490829, 1.0] (POLYGON ((-71.52552795410156 42.2849182620049...
4 [0.325743200506, 1.0, 0.641998734978, 1.0] (POLYGON ((-71.49427795410156 42.2939676156927...
5 [0.641998734978, 1.0, 0.325743200506, 1.0] (POLYGON ((-71.47344207763672 42.3003084448852...
6 [0.970904490829, 0.959331880901, 0.0, 1.0] (POLYGON ((-71.26508331298828 42.3200411822557...
7 [1.0, 0.581699346405, 0.0, 1.0] (POLYGON ((-71.15048217773438 42.3333218460720...
そこからフォリウムマップを作成します。
import folium
# Picked location between Sudbury and Somerville:
maploc = folium.Map(location=[42.377157,-71.236088],zoom_start=11,tiles="Stamen Toner")
folium.GeoJson(gdf).add_to(maploc)
これで素敵なフォリウムマップが作成されましたが、ポリゴンはまったく色付けされていません。輪郭を正しい色で塗りつぶすにはどうすればよいですか?そして、不透明度を修正しますか?
私はそれを理解したと思います。前のコードでは、polygon.get_facecolor()は0〜1の範囲のRGBA値のリストを返します。私はこの関数を追加しました( this postから変更):
def convert_to_hex(rgba_color) :
red = str(hex(int(rgba_color[0]*255)))[2:].capitalize()
green = str(hex(int(rgba_color[1]*255)))[2:].capitalize()
blue = str(hex(int(rgba_color[2]*255)))[2:].capitalize()
if blue=='0':
blue = '00'
if red=='0':
red = '00'
if green=='0':
green='00'
return '#'+ red + green + blue
16進文字列に変換します。次に:
gdf['RGBA'] = convert_to_hex(colors)
次に、フォリウムで色をプロットするには、次のようにします。
maploc = folium.Map(location=[42.377157,-71.236088],zoom_start=10,tiles="Stamen Toner")
colors = []
folium.GeoJson(
gdf,
style_function=lambda feature: {
'fillColor': feature['properties']['RGBA'],
'color' : feature['properties']['RGBA'],
'weight' : 1,
'fillOpacity' : 0.5,
}
).add_to(maploc)
それで本当に素敵なプロットができました! (プロパティ名は少し誤解を招く-実際にはRGBA値ではなく、16進文字列です。)
エキスパートではありません...私はfoliumとjupyterから始めたばかりで、同様の問題がありましたが、ラインに問題がありました。あなたはあなたがGeoJsonとポリゴンを持っていると言い、色は私が仮定するjsonに含まれています。
Style_functionは、必要なものを取得するのに役立ちますか?
以下の例は、このページで生成されています。 http://geojson.io/ 私がしなければならなかったのは、style_functionを使用した「マッピング」だけでした。自己定義関数を使用することも可能です。次を参照してください: https://github.com/python-visualization/folium/blob/master/examples/Colormaps.ipynb
import folium
geoJsonData = {
"features": [
{
"geometry": {
"coordinates": [
[
12.98583984375,
56.70450561416937
],
[
14.589843749999998,
57.604221411628735
],
[
13.590087890625,
58.15331598640629
],
[
11.953125,
57.955674494979526
],
[
11.810302734375,
58.76250326278713
]
],
"type": "LineString"
},
"properties": {
"stroke": "#fc1717",
"stroke-opacity": 1,
"stroke-width": 2
},
"type": "Feature"
},
{
"geometry": {
"coordinates": [
[
14.9468994140625,
57.7569377956732
],
[
15.078735351562498,
58.06916140721414
],
[
15.4302978515625,
58.09820267068277
],
[
15.281982421875002,
58.318144965188246
],
[
15.4852294921875,
58.36427519285588
]
],
"type": "LineString"
},
"properties": {
"stroke": "#1f1a95",
"stroke-opacity": 1,
"stroke-width": 2
},
"type": "Feature"
}
],
"type": "FeatureCollection"
}
m = folium.Map(location=[ 56.7, 12.9], zoom_start=6)
folium.GeoJson(geoJsonData,
style_function=lambda x: {
'color' : x['properties']['stroke'],
'weight' : x['properties']['stroke-width'],
'opacity': 0.6,
'fillColor' : x['properties']['fill'],
}).add_to(m)
m
Gitハブのfoliumソースコードには、いくつかの素晴らしい例も含まれています。
https://github.com/python-visualization/folium/tree/master/examples
ここで、遊ぶオプションを見つけます:
http://leafletjs.com/reference.html#path-options
これがあなたを前進させてくれることを願っています!