経済指標グラフを altair で表示 その2
investpy で経済指標を取得し
altair で表示する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | import pandas as pd import investpy import altair as alt import datetime economic_data = investpy.economic_calendar(time_zone = None , time_filter = 'time_only' , countries = [ 'japan' , 'united states' ], from_date = '01/01/2021' , to_date = '11/06/2021' ) ISM = economic_data[economic_data[ 'event' ]. str .contains( 'ISM Non-Manufacturing PMI' )] date2 = [] for i in ISM[ 'date' ]: new_date = datetime.datetime.strptime(i, "%d/%m/%Y" ).strftime( "%Y-%m-%d" ) date2.append(new_date) ISM[ 'date' ] = ISM[ 'date' ]. str .replace( '/' , '-' ) ISM[ 'date' ] = date2 ISM.fillna( 0 ) chart = ( alt.Chart(ISM) .mark_line(opacity = 0.8 ,clip = True ) .encode( x = "date:T" , y = alt.Y( "actual:Q" ,stack = None ) ) ) chart |
とすると
ISM の actual の数値が折れ線グラフで表示される
実際の値だけでなく予測値の forecast もほしいので
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | actual = ( alt.Chart(ISM) .mark_line(opacity = 0.8 ,clip = True ) .encode( x = "date:T" , y = alt.Y( "actual:Q" ,stack = None ) ) ) forecast = ( alt.Chart(ISM) .mark_line(opacity = 0.8 ,clip = True ,color = 'red' ) .encode( x = "date:T" , y = alt.Y( "forecast:Q" ,stack = None ), ) ) |
として2つの折れ線データを用意する
あとは
alt.layer で重ねて表示すると2つ表示される
1 2 3 | alt.layer(actual,forecast).resolve_scale( y = 'independent' ) |
independent を指定するとy軸が独立した2つになる
なお重ねて表示するのは3つでも可能
試しに previous の値も追加するのなら
1 2 3 4 5 6 7 8 9 10 11 12 | previous = ( alt.Chart(ISM) .mark_line(opacity = 0.8 ,clip = True ,color = 'green' ) .encode( x = "date:T" , y = alt.Y( "previous:Q" ,stack = None ), ) ) alt.layer(actual,forecast,previous).resolve_scale( y = 'independent' ) |
とすれば3つの折れ線グラフが表示される
重ねて折れ線グラフを表示するのについては
Layered chart with Dual-Axis
を参考に
altair で線の色を指定するには
altairでとあるアイドルグループのメンバー在籍期間のチャート化してみた
を参考に
最初に
altair.encode() で指定したときにはエラーとなった
color=
で指定するとラベル指定となってしまうらしい