在Altair(Python)中,是否可以忽略条形图的中间值?

时间:2019-09-06 18:33:10

标签: python altair

我有一个条形图,显示了从最高到最低排名的一堆值。但是我太多了(〜100)。我想制作一个省略中间值的条形图,以显示具有最高值的条形图和具有最低值的条形图,这与Pandas DataFrame的默认显示不同,后者显示了前20个左右的值,然后是...,然后是最后20个左右。因此,基本上,图表看起来像这样:

X
XXX
XXXXX
XXXXX ... X

我总是可以制作一个仅忽略那些值的DataFrame,但是最好以可视方式表示该遗漏。那可能吗?

2 个答案:

答案 0 :(得分:3)

我不知道直接在Altair中做到这一点的方法,但是您可以修改DataFrame来提供这种不连续性的视觉指示,如下所示:

import pandas as pd
import altair as alt
from vega_datasets import data

raw = data.airports()
df = (raw[raw.country == "USA"]
      .groupby("state")
      .iata.count()
      .rename("number_of_airports")
      .sort_values(ascending=False).reset_index()
     )

top_bottom = pd.concat(
    (df.head(5), pd.DataFrame(data=[["...", 0]], columns=df.columns), df.tail(5)),
    ignore_index=True
)

alt.Chart(
    top_bottom.reset_index()
).mark_bar().encode(
    alt.X("state",
          sort=alt.EncodingSortField(field="index", op="sum"),
          axis=alt.Axis(labelAngle=0)
         ),
    y="number_of_airports"
)

输出: enter image description here

答案 1 :(得分:2)

Altair语法没有这种图表的清晰抽象,但是您可以做一些改动。这是@foglerit的答案中使用Altair变换显示的图表:

/Users/{username}/.nuget/packages

enter image description here