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/

相关文章:

arrays - MethodError: 没有方法匹配 Weights(::Array{Any,1},::Float64)

julia - 闭包列表的类型稳定性

python - 在 altair 图中为一些 x 标签着色?

python - 为什么Altair热图的y轴上下颠倒以及如何反转?

python - 在Altair图中绘制中位数和均值

performance - 使用计数器是一种好习惯吗?

julia - 在 Julia 中计算 IRR

python - Python散点图图例

在R中的图例中删除符号中的线

r - 如何在ggplot2图例中包含黄土线?