gpt4 book ai didi

python - Altair:将 Log10 轴裁剪为所需的间隔(域)

转载 作者:行者123 更新时间:2023-12-04 10:20:27 26 4
gpt4 key购买 nike

在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
)

enter image description here

这在科学上可能是正确的,但我认为删除白色区域( < 5 mpg> 50 mpg 域)会给我带来更好的美学效果。然而,一个 domain = (5, 50)alt.Y()对我不起作用。

最佳答案

domain 参数确实适用于对数刻度,但域必须以基数的整数幂开始和结束,其他值将四舍五入到下一个整数幂。

例如,这是一个默认的 base-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'))
)

enter image description here

这是一个 base-2 域,限制设置为 1 和 256:
alt.Chart(data).mark_point().encode(
x=alt.X('x', scale=alt.Scale(type='log', base=2, domain=[1, 256]))
)

enter image description here

不幸的是,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',
)

enter image description here

关于python - Altair:将 Log10 轴裁剪为所需的间隔(域),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60889926/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com