julia - Vega-Lite - 多个数据集的一个图

标签 julia legend altair vega-lite

我正在为 Julia 开发一个包,目标是使用 Vega-Lite 作为后端进行快速绘图。 熟悉 Matplotlib 的人都知道,使用不同的向量集并将所有向量绘制在同一张图中,每个向量都有自己的标签是很常见的。例如:

x = range(0,10)
y = np.random.rand(10)
w = range(0,5)
z = np.random.rand(5)
plt.plot(x,y,label = 'y')
plt.plot(w,z,label = 'z')
plt.legend()

Plot from code

我想知道如何使用 Vega-Lite(或 Altair)做类似的事情。 我知道我可以做两个单独的情节,然后将一个叠加在另一个之上。我的问题主要是关于如何让传说发挥作用,因为要获得传说,通常需要另一个领域 例如“颜色”,指向数据框中的另一个字段。

我看过类似的帖子,但处理的是从不同列发布数据的问题。这种情况的答案基本上是使用折叠变换。但在我的问题中,这不太有效,因为我更感兴趣的是从两个不同的图开始,可能使用两个不同的数据集,所以“合并”数据集不是一个好的解决方案。

最佳答案

您可以利用在复合图表中,Vega-Lite 默认使用共享比例这一事实。如果您将颜色、形状、strokeDash 等分配给每个图层的唯一值,则会自动生成适当的图例。

这是一个例子,使用 Altair 生成 Vega-Lite 规范:

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

x = np.linspace(0, 10)

df1 = pd.DataFrame({
    'x': x,
    'y': np.sin(x)
})
df2 = pd.DataFrame({
    'x': x,
    'y': np.cos(x)
})

chart1 = alt.Chart(df1).transform_calculate(
    label='"sine"'
).mark_line().encode(
    x='x',
    y='y',
    color='label:N'
)

chart2 = alt.Chart(df2).transform_calculate(
    label='"cosine"'
).mark_line().encode(
    x='x',
    y='y',
    color='label:N'
)

alt.layer(chart1, chart2)

enter image description here

关于julia - Vega-Lite - 多个数据集的一个图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64436996/

相关文章:

julia - 将单个数字添加到 julia 数据框中的列?

vector - Julia - 相当于 R 的 rep() 与 times 参数

r - ggplot2 在具有多个分组的图例中正确显示分层点

MATLAB:为图例中的文本分配多种颜色

python - 如何使用 Altair 显示百分比直方图而不是计数

python - Altair 多面直方图 - 独立尺度

plot - 在 Julia 中为 Agents.jl 制作 Makie.jl 绘图配方动画的优雅方式是什么?

macros - Julia 宏中的无效赋值错误

matlab - 传奇;键/颜色之前的文本/描述?

altair - 有没有一种方法可以缩放然后进行选择间隔而无需使用 Altair 进一步缩放