我尝试构建一个折线图来显示全年每个月的值。我还想填补超过阈值的月份。我对线条和填充的最后一个值的外观有疑问。
import altair as alt
from vega_datasets import data
source = data.stocks()
year_data = source[source.date.dt.year == 2007]
line = alt.Chart(year_data, width=600).mark_line(
interpolate='step-after',
color='red'
).encode(
x='date',
y='price'
).transform_filter(alt.datum.symbol == 'IBM')
fill = alt.Chart(year_data, width=600).mark_area(
interpolate='step-after',
).encode(
x='date',
y='price',
).transform_filter(
(alt.datum.symbol == 'IBM') &
(alt.datum.price > 105)
)
fill + line
- 如何以与其他月份相同的宽度显示 12 月,以免在视觉上被截断?
- 10 月也超过了 105 的阈值,但似乎尚未填满。我该怎么做才能像其他月份一样填满它?
最佳答案
我认为您的步进插值范围问题与 Drawing line plot for a histogram 中描述的类似。我不确定是否有好的解决方案。
解决方法是执行时间分箱以将数据转换为序数并使用条形标记而不是区域:
import altair as alt
from vega_datasets import data
source = data.stocks()
year_data = source[source.date.dt.year == 2007]
line = alt.Chart(year_data, width=600).mark_line(
interpolate='step-after',
color='red'
).encode(
x='month(date)',
y='price'
).transform_filter(
alt.datum.symbol == 'IBM'
)
line.mark_bar().transform_filter(alt.datum.price > 105) + line
您还可以将 x 轴设为序数,以避免 Dec 被截断。
line = alt.Chart(year_data, width=600).mark_line(
interpolate='step',
color='red'
).encode(
x='month(date):O',
y='price'
).transform_filter(
alt.datum.symbol == 'IBM'
)
line.mark_bar().transform_filter(alt.datum.price > 105) + line
关于python - 更改 Altair 折线图和面积图中的步长宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73142698/