目次
- 目次
- はじめに
- Google Earthによるかっこいいグラフ
- Google Earth上にグラフを簡単に描画できるPythonライブラリgoogleearthplot
- googleearthplotを使うのに必要なツール
- インストール方法
- 使い方
- グラフやフォントの色のオプション
- 最後に
- 参考資料
- MyEnigma Supporters
はじめに
この記事は2015年Python アドベントカレンダー 21日目の記事です。
Google Earthによるかっこいいグラフ
あるプレゼン資料でGoogle Earthに
棒グラフを書いている人がいて、
凄くかっこいいなと思い、
色々調べた所、
下記のGE Graphというツールを使っているようでした。
このツールを使うことで、
グラフ情報が含まれたCSVファイルから
Google Earth描画用のkmlファイルを出力してくれるみたいです。
しかし、このソフトはWindows専用ですし、
自分でカスタマイズできないので、
Pythonライブラリを作ってみました。
Google Earth上にグラフを簡単に描画できるPythonライブラリgoogleearthplot
今回作成した、
Google Earth上にグラフを簡単に描画できるPythonライブラリ
googleearthplotは下記のGithubリポジトリで公開されています。
Pythonライブラリなので、
WindowsやMac, Linuxなど
マルチプラットフォームで動きますし、
Webサービスなど、
自分のPythonツールに組み込むことも簡単だと思います。
googleearthplotを使うのに必要なツール
今回作成したPythonライブラリ
googleearthplotは
下記の外部ツールを使っているので
インストールする必要があります。
simplekml
kmlファイルを作成するための
pythonライブラリです。
インストールしていない場合は、
下記のコマンドでインストールして下さい。
$ pip install simplekml
pandas
有名なデータ解析ライブラリです。
CSVファイルを読み込む時に使用されています。
インストールしていない場合は、
下記のコマンドでインストールして下さい。
$ pip install pandas
Google Earth (Pro)
このツールはGoogle Earth用の
kmlファイルを作成するので、
Google Earthをインストールする必要があります。
先日、Google Earthの有料版(Pro)が無料になったので、
下記のリンクからGoogle EarthのProをインストールしましょう。
インストール方法
googleearthplotは下記のGitHubリポジトリにて公開されています。
下記のPyPIに登録されているので、下記のコマンドでpipを使ってインストールできます。
sudo pip install googleearthplot
下記はPyPIのプロジェクトページです。
googleearthplot 0.0.2 : Python Package Index
後は自分のコードで下記のコマンドで
googleearthplotクラスをインポートして下さい。
from googleearthplot import googleearthplot
使い方
下記のようなサンプルコードを実行することで、
様々なグラフを描画するための
kmlファイルを生成できます。
点をプロットする
指定した緯度経度のポイントに
点プロットをする場合は、
下記のようなコードを実行することで、
複数の点をプロットすることができます。
# Plot point chart gep10 = googleearthplot() lat = [ -77.6192, -77.6195, -77.6198, -77.6208, -77.6216] lon = [43.1725, 43.1728, 43.173, 43.1725, 43.1719, 43.1719] for (ilat,ilon) in zip(lat,lon): gep10.PlotPoints(ilat, ilon, "point") gep10.GenerateKMLFile(filepath="sample10.kml")
上記のコードで生成されたkmlファイルをクリックすると、
下記の様にgoogle earth上で見えるはずです。
棒グラフ
棒グラフは下記のように生成できます。
#A bar plot gep1=googleearthplot() lat=18.333868#degree lon=-34.038274#degree num=100 #bar height size size=1 #meter name="barsample" color="red" gep1.PlotBarChart(lat,lon,num,size,name,color); gep1.GenerateKMLFile(filepath="sample1.kml")
上記のサンプルコードにより生成された
kmlファイルをクリックすると、
下記のようなグラフがGoogle Earthで表示されます。
また、下記のようにaddLabelフラグを立てることで、
PlotBarChart(lat,lon,num,size,name,color,addLabel=True)
グラフにラベルを追加することができます。
CSVファイルから棒グラフを作成する
CSVファイルを読み込んで、
その結果から棒グラフを作成するのは、
下記のサンプルコードで可能です。
#bar plot from csv gep=googleearthplot() gep.PlotBarChartsFromCSV("barchartsampledata.csv") gep.GenerateKMLFile(filepath="sample2.kml")
すると下記のようなグラフが得られます。
読み込ませるCSVファイルは
下記のサンプルデータのような
フォーマットである必要があります。
ラインプロット
Google Earth上に線を書くのは、
下記のように実現できます。
#Plot line chart gep2=googleearthplot() lat=[-77.6192,-77.6192,-77.6195,-77.6198,-77.6208,-77.6216,-77.6216,-77.6216] lon=[43.1725,43.1725,43.1728,43.173,43.1725,43.1719,43.1719,43.1719,43.1719] gep2.PlotLineChart(lat, lon, name="trajectory",color="pink") gep2.GenerateKMLFile(filepath="sample3.kml")
すると、下記のようなグラフが得られます。
高さ情報付きのラインプロット
先ほどのラインプロットに
高さ情報を付けることも可能です。
#Plot line chart with height gep3=googleearthplot() lat=[-77.6192,-77.6192,-77.6195,-77.6198,-77.6208,-77.6216] lon=[43.1725,43.1725,43.1728,43.173,43.1725,43.1719,43.1719] height=[10,40,60,80,100,120,140] gep3.PlotLineChart(lat, lon, heightList=height, name="trajectory2",color="aqua") gep3.GenerateKMLFile(filepath="sample4.kml")
下記のような高さ情報付きのラインプロットが得られます。
CSVファイルデータに基づくラインプロット
CSVファイルデータに基いて、
下記のようなラインプロットをすることも可能です。
#line plot from csv file gep4=googleearthplot() gep4.PlotLineChartFromCSV("sampledata/lineplotsampledata.csv", name="trajectory3", color="gold", width=10) gep4.GenerateKMLFile(filepath="sample5.kml")
すると、下記のようなグラフが得られます。
読み込ませるCSVファイルフォーマットに関しては、
下記のサンプルCSVファイルを参考にしてください。
CSVファイルデータに基づく3Dラインプロット
先ほどのCSVファイルに高さ情報を入れることで、
高さ情報を含んだラインプロットを
CSVファイルデータを用いて実現できます。
#line plot from csv file with height gep5=googleearthplot() gep5.PlotLineChartFromCSV("sampledata/lineplotsampledata2.csv", name="trajectory4", color="orange", width=10) gep5.GenerateKMLFile(filepath="sample6.kml")
こちらがサンプル・データです。
画像のオーバレイ
ロゴなどの画像データを
google earthの画面上に貼り付けることができます。
#Plot overlay image sample gep8=googleearthplot() gep8.PlotOverlayImg("img/samplelogo.png",200,300,name="logo") gep8.GenerateKMLFile(filepath="sample8.kml")
すると下記のような画面が得られます。
グラフやフォントの色のオプション
グラフやフォントの色(color変数)は、
下記の中から選べます。
'aliceblue', 'antiquewhite', 'aqua', 'aquamarine', 'azure', 'beige', 'bisque', 'black', 'blanchedalmond', 'blue', 'blueviolet', 'brown', 'burlywood', 'cadetblue', 'changealpha', 'changealphaint', 'chartreuse', 'chocolate', 'coral', 'cornflowerblue', 'cornsilk', 'crimson', 'cyan', 'darkblue', 'darkcyan', 'darkgoldenrod', 'darkgray', 'darkgreen', 'darkgrey', 'darkkhaki', 'darkmagenta', 'darkolivegreen', 'darkorange', 'darkorchid', 'darkred', 'darksalmon', 'darkseagreen', 'darkslateblue', 'darkslategray', 'darkslategrey', 'darkturquoise', 'darkviolet', 'deeppink', 'deepskyblue', 'dimgray', 'dimgrey', 'dodgerblue', 'firebrick', 'floralwhite', 'forestgreen', 'fuchsia', 'gainsboro', 'ghostwhite', 'gold', 'goldenrod', 'gray', 'green', 'greenyellow', 'grey', 'hex', 'hexa', 'honeydew', 'hotpink', 'indianred', 'indigo', 'ivory', 'khaki', 'lavender', 'lavenderblush', 'lawngreen', 'lemonchiffon', 'lightblue', 'lightcoral', 'lightcyan', 'lightgoldenrodyellow', 'lightgray', 'lightgreen', 'lightgrey', 'lightpink', 'lightsalmon', 'lightseagreen', 'lightskyblue', 'lightslategray', 'lightslategrey', 'lightsteelblue', 'lightyellow', 'lime', 'limegreen', 'linen', 'magenta', 'maroon', 'mediumaquamarine', 'mediumblue', 'mediumorchid', 'mediumpurple', 'mediumseagreen', 'mediumslateblue', 'mediumspringgreen', 'mediumturquoise', 'mediumvioletred', 'midnightblue', 'mintcream', 'mistyrose', 'moccasin', 'navajowhite', 'navy', 'oldlace', 'olive', 'olivedrab', 'orange', 'orangered', 'orchid', 'palegoldenrod', 'palegreen', 'paleturquoise', 'palevioletred', 'papayawhip', 'peachpuff', 'peru', 'pink', 'plum', 'powderblue', 'purple', 'red', 'rgb', 'rosybrown', 'royalblue', 'saddlebrown', 'salmon', 'sandybrown', 'seagreen', 'seashell', 'sienna', 'silver', 'skyblue', 'slateblue', 'slategray', 'slategrey', 'snow', 'springgreen', 'steelblue', 'tan', 'teal', 'thistle', 'tomato', 'turquoise', 'violet', 'wheat', 'white', 'whitesmoke', 'yellow', 'yellowgreen'
最後に
次はこのpythonライブラリを使って、
CSVファイルをアップロードすると、
グラフ出力用のkmlファイルを出力してくれる
Webサービスを作ろうかと思います。
参考資料
MyEnigma Supporters
もしこの記事が参考になり、
ブログをサポートしたいと思われた方は、
こちらからよろしくお願いします。