【问题标题】:Adding the line of identity to a scatter plot using altair使用 altair 将标识线添加到散点图
【发布时间】:2020-05-03 08:39:52
【问题描述】:

我创建了一个基本的散点图来使用 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

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

【问题讨论】:

    标签: python vega-lite altair


    【解决方案1】:

    这并不完美,但您可以将线拉长并设置比例域。

    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
    

    【讨论】:

    • 我会接受这个答案,因为它似乎是目前可能的最佳答案
    • 有什么方法可以完全在 altair 中确定线路的域?
    猜你喜欢
    • 2021-01-19
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 2020-03-30
    • 1970-01-01
    • 2015-06-29
    • 1970-01-01
    相关资源
    最近更新 更多