簡體   English   中英

如何從時間序列圖中排除某些日期(例如,周末)?

[英]How can I exclude certain dates (e.g., weekends) from time series plots?

在下面的例子中,我想排除周末並將Y繪制成一條直線,並為主要刻度標簽指定一些自定義頻率,因為它們將是一個“破碎”的時間序列(例如,每周一,一個la matplotlibset_major_locator )。

我怎么會在Altair那樣做?

import altair as alt
import pandas as pd

index = pd.date_range('2018-01-01', '2018-01-31', freq='B')
df = pd.DataFrame(pd.np.arange(len(index)), index=index, columns=['Y'])

alt.Chart(df.reset_index()).mark_line().encode(
    x='index',
    y='Y'
)

在此輸入圖像描述

快速執行此操作的方法是將軸指定為序數字段。 這將產生一個非常難看的軸,每個刻度都指定了小時數。 要更改它,我會使用給定標簽向數據框添加一列。 我還添加了grid ,因為默認情況下它會被刪除以進行序數編碼,並將labelAngle設置為0。

df2 = df.assign(label=index.strftime('%b %d %y'))

alt.Chart(df2).mark_line().encode(
    x=alt.X('label:O', axis=alt.Axis(grid=True, labelAngle=0)),
    y='Y:Q'
)

牽牛星-圖表-序軸

請注意它會刪除任何遺漏點。 所以,也許你想添加一個工具提示。 這將在此處的文檔中討論。 您還可以根據所需的帽子在軸設置中使用labelOverlap


要自定義軸,我們可以使用mark_text構建一個軸,並使用mark_text和自定義數據mark_rule恢復網格。 它不一定能很好地擴展,但它可以給你一些想法。

df3 = df2.loc[df2.index.dayofweek == 0, :].copy()
df3["Y"] = 0

text_chart = alt.Chart(df3).mark_text(dy = 15).encode(
    x=alt.X('label:O', axis = None),
    y=alt.Y('Y:Q'),
    text=alt.Text('label:O')
)

tick_chart = alt.Chart(df3).mark_rule(color='grey').encode(
    x=alt.X('label:O', axis=None),
)

line_chart = alt.Chart(df2).mark_line().encode(
    x=alt.X('label:O', axis=None, scale=alt.Scale(rangeStep=15)),
    y='Y:Q'
)
text_chart + tick_chart + line_chart 

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM