各パラメータが意味するところを調査してみました。
axis
各セルの色を決める際に、どの範囲の値を考慮するかを指定する。
- axis=None … テーブル全体の最小値/最大値を考慮する
- axis=0またはaxis=index … 列毎にその中での最小値/最大値を考慮する
- axis=1またはaxis=columns … 行毎にその中での最小値/最大値を考慮する
この数字の配置だとNoneとindexの場合の違いがわかりづらいですが、26-29、80-83あたりが比較的わかりやすいかと思います。この表示を作成したソースは以下の通り。
import streamlit as st
import pandas as pd
array = [ [ 10*j+i for i in range( 10 ) ] for j in range ( 10 ) ]
st.set_page_config(
layout = 'wide'
)
col1, col2, col3 = st.columns( 3 )
with col1 :
st.caption( "axis = None" )
st.dataframe( pd.DataFrame( array ).style.background_gradient( cmap='rainbow', axis=None ), width=560 )
with col2 :
st.caption( "axis = 0 or index" )
st.dataframe( pd.DataFrame( array ).style.background_gradient( cmap='rainbow', axis=0 ), width=560 )
with col3 :
st.caption( "axis = 1 or columns" )
st.dataframe( pd.DataFrame( array ).style.background_gradient( cmap='rainbow', axis='columns' ), width=560 )
low、high
以下、何も指定しない場合に最小値のセルに使われる色を"MIN色"、最大値のセルに使われる"MAX色"とします。
使用する色の範囲を制御できる。
1. lowの値が大きいほど、最小値のセルに使われる値がMAX色寄りになる。
2. highの値が大きいほど、最大値のセルに使われる値がMIN色寄りになる。
以下、cmap='PiYG'で、上から順にhigh=0.75、high=0.25、指定なし、low=0.25、low=0.75とした例です。
vmin、vmax
vminを指定するとその値(以下)がMIN色に、vmaxを指定するとその値(以上)がMAX色になる。グラデーションで考慮する範囲を、vmin~vmaxにするということもできる。
含まれる値の最小値よりも小さい値をvmin、あるいは最大値よりも大きい値をvmaxに指定すると、表示の際、グラデーションに使用される色の幅が減る結果となる。
以下、cmap='binary'で、上から順に(vmin=10、vmax=40)、指定なし、(vmin=-50、vmax=100)とした例です。
subset
グラデーションを適用するカラム(名)を指定。複数可。
gmap
説明が若干難しいですが…。
行方向あるいは列方向で色を決めるための数値マップを指定する要素。
各行あるいは各列において、指定された数値マップを考慮した上で各セルの色が決まります。
axis=0/index/Noneの場合、テーブルの行数と数値マップの要素数が一致している必要あり。
axis=1/columnの場合、テーブルの列数と数値マップの要素数が一致している必要あり。
import streamlit as st
import pandas as pd
import random
array = [[random.randint(1,100) for i in range (10)] for j in range(8)]
df = pd.DataFrame(array, columns=[f'行_{i}' for i in range(1, 11)])
col1, col2, col3 = st.columns(3)
with col1 :
st.dataframe( df.style.background_gradient( cmap='cool', axis=0 ) )
with col2 :
st.dataframe( df.style.background_gradient( cmap='cool', axis=0, gmap=df['行_10'] ) )
with col3 :
st.dataframe( df.style.background_gradient( cmap='cool', axis=1, subset=['行_1','行_3','行_5','行_7','行_9'], gmap=[10,8,6,4,2] ) )
真ん中のテーブルではgmap=df['行_10']としているので、各列の色を決める基準が'行_10'の各行の値のみに依存しているのがわかるかと思います。
また、右のテーブルではsubsetとして['行_1','行_3','行_5','行_7','行_9']を指定した結果、各列にのみグラデーションが適用されています。各セル(というか列)の色は、[10,8,6,4,2]という指定に従って決まっています。