向数据点添加X-Y偏移量

时间:2019-12-24 10:16:58

标签: python altair

我正在寻找一种为绘制的数据点指定X-Y偏移量的方法。我正要进入Altair,所以请多包涵。

情况:我有一个数据集,记录了30个人的每日测量数据。每个人每天都可以注册几种不同类型的测量。

示例数据集和绘图,包含2个人和2种测量类型:

import pandas as pd

df = pd.DataFrame.from_dict({"date": pd.to_datetime(pd.date_range("2019-12-01", periods=5).repeat(4)), 
        "person": pd.np.tile(["Bob", "Amy"], 10), 
        "measurement_type": pd.np.tile(["score_a", "score_a", "score_b", "score_b"], 5), 
        "value": 20.0*np.random.random(size=20)})

import altair as alt

alt.Chart(df, width=600, height=100) \
            .mark_circle(size=150) \
            .encode(x = "date",
                    y = "person",
                    color = alt.Color("value"))

这给了我这张图: Two measurement types on top of each other...

在上面的示例中,两种测量类型相互绘制。我想根据“ measurement_type”列为圆添加偏移量,以便可以在图中日期人位置周围使它们全部可见。

这是我想要实现的模型: Non-blocking measurement types!

我一直在搜索文档,但是还没有弄清楚该怎么做-一直在尝试使用“堆栈”选项,dxdy选项,... 我觉得这应该只是另一个编码通道(offset或类似的通道),但是不存在。

有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:2)

Altair中目前没有偏移编码的概念,因此最好的方法是将列编码与y编码相结合,类似于Altair文档中的Grouped Bar Chart示例:

alt.Chart(df,
    width=600, height=100
).mark_circle(
    size=150
).encode(
    x = "date",
    row='person',
    y = "measurement_type",
    color = alt.Color("value")
)

enter image description here

然后您可以使用标准的chart configuration设置来微调结果的外观:

alt.Chart(df,
    width=600, height=alt.Step(25)
).mark_circle(
    size=150
).encode(
    x = "date",
    row='person',
    y = alt.Y("measurement_type", title=None),
    color = alt.Color("value")
).configure_facet(
    spacing=10
).configure_view(
    strokeOpacity=0
)

enter image description here

答案 1 :(得分:0)

好吧,直到知道为止,我不知道自己会得到什么结果,但是也许编写一个函数,其参数如def chart(DotsOnXAxis, FirstDotsOnYAxis, SecondDotsOnYAxis, OffsetAmount) 然后将这些变量放在正确的位置。

如果您希望圆点偏移,可以将其放在类似SecondDotsOnYAxis = FirstDotsOnYAxis + OffsetAmount

的系统中