![](/img/trans.png)
[英]How to extract useful features from time-series data (e.g., users' daily activities in a forum)
[英]How can I exclude certain dates (e.g., weekends) from time series plots?
在下面的例子中,我想排除周末並將Y
繪制成一條直線,並為主要刻度標簽指定一些自定義頻率,因為它們將是一個“破碎”的時間序列(例如,每周一,一個la matplotlib
的set_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.