使用 altair 将标识线添加到散点图

Adding the line of identity to a scatter plot using altair

我创建了一个基本的散点图来使用 altair 比较两个变量。我希望变量之间有很强的相关性,并且这些点最终应该位于或接近标识线。

如何在情节中添加身份线?

我希望它是一条类似于 mark_rule 创建的线,但不是垂直或水平地沿对角线延伸。

这是我所了解的:

import altair as alt
import numpy as np
import pandas as pd

norm = np.random.multivariate_normal([0, 0], [[2, 1.8],[1.8, 2]], 100)

df = pd.DataFrame(norm, columns=['var1', 'var2'])

chart = alt.Chart(df, width=500, height=500).mark_circle(size=100).encode(
    alt.X('var1'),
    alt.Y('var2'),
).interactive()

line = alt.Chart(
    pd.DataFrame({'var1': [-4, 4], 'var2': [-4, 4]})).mark_line().encode(
            alt.X('var1'),
            alt.Y('var2'),
).interactive()

chart + line

这个例子的问题是当缩放时线条不会永远延伸(就像一个规则标记)并且绘图会自动缩放到线的末端而不是仅仅缩放到点。

它并不完美,但你可以把线加长并设置比例域。

import altair as alt
import numpy as np
import pandas as pd

norm = np.random.multivariate_normal([0, 0], [[2, 1.8],[1.8, 2]], 100)

df = pd.DataFrame(norm, columns=['var1', 'var2'])

chart = alt.Chart(df, width=500, height=500).mark_circle(size=100).encode(
    alt.X('var1', scale=alt.Scale(domain=[-4,4])),
    alt.Y('var2', scale=alt.Scale(domain=[-4,4])),
).interactive()

line = alt.Chart(
    pd.DataFrame({'var1': [-100, 100], 'var2': [-100, 100]})).mark_line().encode(
            alt.X('var1'),
            alt.Y('var2'),
).interactive()

chart + line