我试图构建一个折线图,显示全年每个月的值.我还想填补超过阈值的月份.我对线条和填充的最后值的外观都有问题.

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

line chart for stock values

  1. 如何以与其他月份相同的宽度显示十二月,使其不会在视觉上被截断?
  2. 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

enter image description here

Python相关问答推荐

从单个列创建多个列并按pandas分组

如何将新的SQL服务器功能映射到SQL Alchemy的ORM

如何用symy更新分段函数

使用GEKKO在简单DTE系统中进行一致初始化

列表上值总和最多为K(以O(log n))的最大元素数

从webhook中的短代码(而不是电话号码)接收Twilio消息

Python多处理:当我在一个巨大的pandas数据框架上启动许多进程时,程序就会陷入困境

在Polars(Python库)中将二进制转换为具有非UTF-8字符的字符串变量

Mistral模型为不同的输入文本生成相同的嵌入

我对我应该做什么以及我如何做感到困惑'

梯度下降:简化要素集的运行时间比原始要素集长

组/群集按字符串中的子字符串或子字符串中的字符串轮询数据框

pandas:排序多级列

计算天数

如何启动下载并在不击中磁盘的情况下呈现响应?

如何在TensorFlow中分类多个类

Geopandas未返回正确的缓冲区(单位:米)

在不同的帧B中判断帧A中的子字符串,每个帧的大小不同

基于多个数组的多个条件将值添加到numpy数组

如何求相邻对序列中元素 Select 的最小代价