PythonでAltairを使用して、指定された値でLog10軸をトリミングすることは可能ですか?対数目盛で5〜50の間だけを表示したいと思います。
以下は私のコードと私が得る画像です:
import altair as alt
import pandas as pd
from vega_datasets import data
cars = data.cars()
nice = pd.DataFrame([{'x_min': [0],
'x_max': [240],
'y_min': [5],
'y_max': [10]}])
good = pd.DataFrame([{'x_min': [0],
'x_max': [240],
'y_min': [10],
'y_max': [20]}])
bad = pd.DataFrame([{'x_min': [0],
'x_max': [240],
'y_min': [20],
'y_max': [50]}])
mpg_nice_fill = alt.Chart(nice).mark_rect(color= 'green', opacity=0.2).encode(
x='x_min:Q',
x2='x_max:Q',
y='y_min:Q',
y2='y_max:Q'
)
mpg_good_fill = alt.Chart(good).mark_rect(color= 'yellow', opacity=0.2).encode(
x='x_min:Q',
x2='x_max:Q',
y='y_min:Q',
y2='y_max:Q'
)
mpg_bad_fill = alt.Chart(bad).mark_rect(color= 'red', opacity=0.2).encode(
x='x_min:Q',
x2='x_max:Q',
y='y_min:Q',
y2='y_max:Q'
)
chart = alt.Chart(cars).mark_point().encode(
x='Horsepower',
y= alt.Y('Miles_per_Gallon', scale= alt.Scale(type= 'log')),
color='Origin',
)
alt.layer(chart + mpg_nice_fill + mpg_good_fill + mpg_bad_fill + chart
)
これはおそらく科学的には正しいですが、白い領域(< 5 mpg
および> 50 mpg
ドメイン)を削除すると、見た目が良くなると思います。ただし、のdomain = (5, 50)
はalt.Y()
私には機能しません。
domain引数は対数目盛で機能しますが、ドメインは底の整数乗で開始および終了する必要があり、他の値は次の整数乗に丸められます。
たとえば、デフォルトの基数10ドメインは次のとおりです。
import altair as alt
import pandas as pd
data = pd.DataFrame({'x': [1, 10, 100]})
alt.Chart(data).mark_point().encode(
x=alt.X('x', scale=alt.Scale(type='log'))
)
これは、制限が1と256に設定されたベース2ドメインです。
alt.Chart(data).mark_point().encode(
x=alt.X('x', scale=alt.Scale(type='log', base=2, domain=[1, 256]))
)
残念ながら、Vega-Liteは、ログドメインをベースの非整数の累乗に設定する方法を提供していません。
上記のグラフの場合、8〜64の2を底とする対数目盛が適している可能性があります。
alt.Chart(cars).mark_point().encode(
x='Horsepower',
y= alt.Y('Miles_per_Gallon', scale= alt.Scale(type= 'log', base=2, domain=[8, 64])),
color='Origin',
)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加