Altair 散点图添加了不需要的线条

Posted

技术标签:

【中文标题】Altair 散点图添加了不需要的线条【英文标题】:Altair Scatterplot adds unwanted lines 【发布时间】:2021-01-19 17:53:54 【问题描述】:

在热图上方分层时,Altair 散点图似乎仅在点值也在热图的轴上时才有效。在任何其他情况下,沿 x 和 y 值添加白线。这是一个最小的例子:

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

# Compute x^2 + y^2 across a 2D grid
x, y = np.meshgrid(range(-5, 5), range(-5, 5))
z = x ** 2 + y ** 2

# Convert this grid to columnar data expected by Altair
source = pd.DataFrame('x': x.ravel(),
                     'y': y.ravel(),
                     'z': z.ravel())

c = alt.Chart(source).mark_rect().encode(
    x='x:O',
    y='y:O',
    color='z:Q'
)

scatter_source = pd.DataFrame('x': [-1.001,-3], 'y': [0,1])
s = alt.Chart(scatter_source).mark_circle(size=100).encode(
x='x:O',
y='y:O')

st.altair_chart(c + s)

有没有办法防止这种行为?我想稍后为这些点设置动画,因此不能向热图轴添加值。

【问题讨论】:

【参考方案1】:

序数编码(标记为:O)将始终创建一个离散轴,每个唯一值都有一个bin。听起来您希望使用定量编码(标记为 :Q)来可视化您的数据,这会创建一个连续的实值轴。

但是,在热图的情况下,这会使事情变得复杂:如果您不再将数据视为有序类别,则必须指定沿每个轴的每个 bin 的起点和终点。这需要考虑一下您的 bin 代表什么:值“2”是否代表从 2 到 3 的数字?从1到2?从 1.5 到 2.5?答案将取决于上下文。

以下是使用calculate transform 计算这些 bin 边界的示例,假设这些值表示单元 bin 的中心:

c = alt.Chart(source).transform_calculate(
    x1=alt.datum.x - 0.5,
    x2=alt.datum.x + 0.5,
    y1=alt.datum.y - 0.5,
    y2=alt.datum.y + 0.5,
).mark_rect().encode(
    x='x1:Q', x2='x2:Q',
    y='y1:Q', y2='y2:Q',
    color='z:Q'
).properties(
    width=400, height=400
)

scatter_source = pd.DataFrame('x': [-1.001,-3], 'y': [0,1])
s = alt.Chart(scatter_source).mark_circle(size=100).encode(
  x='x:Q',
  y='y:Q'
)

st.altair_chart(c + s)

或者,如果您希望这种分箱更自动地发生,您可以在每个轴上使用分箱变换:

c = alt.Chart(source).mark_rect().encode(
    x=alt.X('x:Q', bin=True),
    y=alt.Y('y:Q', bin=True),
    color='z:Q'
).properties(
    width=400,
    height=400
)

scatter_source = pd.DataFrame('x': [-1.001,-3], 'y': [0,1])
s = alt.Chart(scatter_source).mark_circle(size=100).encode(
  x='x:Q',
  y='y:Q'
)

【讨论】:

感谢您的回答!我选择了第二种方法,因为在您的第一个示例中我无法摆脱有些多余的网格框架。此外,您可以执行 bin=alt.Bin(step=0.1) 之类的操作来保持对自动分箱的更多控制。

以上是关于Altair 散点图添加了不需要的线条的主要内容,如果未能解决你的问题,请参考以下文章

Excel 添加散点图并添加趋势线

散点图绘制

excel散点图批量添加系列

plotlyexpress绘制的散点图没有电

散点图怎么添加标准差和斜率(散点图怎么添加趋势线)

matplotlib:通过用于为散点图着色的对数颜色条值对 2D 线进行着色