前回の投稿記事、Vega-Altairざっくり入門に引き続きVega-Altairについて投稿してみたいと思います。
基本的な形(再掲)
ソースコードとしては以下の通り。
import altair as alt
alt.Chart( data ).mark_xxx().encode()
私はざっと以下のように理解しています。
・Chart()でグラフ表示に使用するデータ、チャートそのものを表示するエリアの書式を指定。チャートエリアの書式設定とは、例えばタイトル文字列に関するものであったり(title)、表示領域のサイズや背景色に関するもの(background, width, height, paddingなど)だったりします。
・mark_xxx()でチャートそのものに関する書式を指定。例えば円グラフの大きさ(radius)。
・encode()で表示内容の詳細や凡例の書式を設定。
チャート例
以下、前回に続いて作成可能なチャートについて紹介していきます。
mark_arc(円グラフ)
alt.Chart( df,
title=alt.TitleParams('産業別従事人口比率', subtitle='(2020年)', fontSize=16, fontWeight='normal'),
background='#dddddd',
padding={"left":20, "top":10, "bottom":10, "right":15},
).mark_arc(
innerRadius=30, outerRadius=150
).encode(
theta='2020年',
color=alt.Color( '産業3部門',
sort=['第1次産業','第2次産業','第3次産業','-'],
legend=alt.Legend( fillColor='white', padding=5 ) ),
tooltip={'field':'2020年','type':'quantitative'}
)
肝はencode()内のtheta(どの値を使うか)、color(何で分類するか)あたりでしょうか。この例では他にChart()内のtitleでタイトルを装飾したり、backgroundでチャートエリアの背景色を変えたり、mark_arcにinnerRadiusを設定してドーナツ形状にしてみたり、encode()内のlegendで凡例を装飾したりしています。
mark_boxplot(箱ひげ図)
# グラフ表示の都合でデータの持ち方を縦持ちに加工
tbl2 = tbl.melt( id_vars='地域',
value_vars=['2015年','2020年','2021年','2022年','2023年'],
var_name='年',
value_name='人口' )
alt.Chart(tbl2, title='都道府県別人口', width=500, height=500 ).mark_boxplot().encode(
x='年', y='人口'
)
mark_squear(散布図、表示が■)
alt.Chart(tbl, title='都道府県別人口', width=1000).mark_square().encode(
x = '地域', y = '2023年'
)
mark_tick
tick = alt.Chart(tbl, title='都道府県別人口', width=1000).mark_tick(
strokeWidth=3, stroke='red'
).encode(
x=alt.X('地域', sort=None), y='2023年'
)
strokeWidthで線の太さを、strokeで線の色を指定しています。
表示例は下のmark_textと合わせて紹介。
mark_text(テキスト表示)
グラフフィールドにテキストを表示。
例えば、他のグラフと重ねて各グラフで示す具体的な値を表示したりするのに使用。
text = alt.Chart(tbl, title='都道府県別人口', width=1000 ).mark_text(dy=-10).encode(
x=alt.X( '地域', sort=None ), y='2023年', text='2023年'
)
前述のmark_tickの結果を重ねると以下のような表示になります。
※グラフの重ね合わせはtick+textで実現。
mark_trail(線の太さが可変の折れ線グラフ)
df = pd.DataFrame({'行':[1,2,3,4,5,6], '列':[100,200,400,800,1600,3200]})
alt.Chart(df).mark_trail().encode(
x='行', y='列', size='列'
)
「列」の値が大きいほど、線の太さが太くなっています。ただ、「これは」と思える良さげな使い方はぱっと思いつきませんでした…。
参考情報
グラフ化に使用したデータの取得元
- 円グラフ、折れ線グラフ以外
※上記ページの参考欄に記載の情報と同じ情報です。
- 円グラフ
※上記ページの表番号4から取得したデータを少し加工しています。




