Python 牵牛星组合多个数据集

Python 牵牛星组合多个数据集,python,visualization,vega-lite,altair,Python,Visualization,Vega Lite,Altair,我最近刚刚发现了关于Vega/Vega-Lite和Altair的信息,并将其视为最佳python绘图工具的真正竞争者 我目前正在努力解决的问题是将两个数据帧中的信息绘制到一个或两个轴共享的同一个图表中 我试过这样的方法: plot1 = alt.Chart(df1).mark_point().encode(x = 'time:T', y = [...])[...] plot2 = alt.Chart(df2).mark_point().encode(x = 'time:T', y = [...]

我最近刚刚发现了关于Vega/Vega-LiteAltair的信息,并将其视为最佳python绘图工具的真正竞争者

我目前正在努力解决的问题是将两个数据帧中的信息绘制到一个或两个轴共享的同一个图表中

我试过这样的方法:

plot1 = alt.Chart(df1).mark_point().encode(x = 'time:T', y = [...])[...]
plot2 = alt.Chart(df2).mark_point().encode(x = 'time:T', y = [...])[...]
这是可行的,但它相当笨重,不太好

我遇到了LayerChart对象,但从文档中我不太清楚如何正确使用它来绘制多个数据集

  • 有人有这样一个图表的例子吗
  • 我需要做什么才能得到一个双y轴

具有不同数据集的图表可以与中描述的任何机制一起分层

例如:

import pandas as pd
import altair as alt

df1 = pd.DataFrame({
    'times': [1, 2, 3],
    'values': [1, 5, 4],
})

df2 = pd.DataFrame({
    'times': [2, 3, 4],
    'values': [4, 2, 3],
})

chart1 = alt.Chart(df1).mark_line().encode(x='times', y='values')
chart2 = alt.Chart(df2).mark_line().encode(x='times', y='values')

chart1 + chart2

通过分离函数中的图表逻辑生成代码,然后迭代

给定的

import pandas as pd
import altair as alt


df0 = pd.DataFrame(dict(times=[1, 2, 3], values=[2, 2, 7]))
df1 = pd.DataFrame(dict(times=[2, 3, 5], values=[3, 9, 8]))
df2 = pd.DataFrame(dict(times=[3, 6, 8], values=[2, 6, 7]))
df3 = pd.DataFrame(dict(times=[6, 7, 9], values=[3, 2, 5]))
代码

def base_chart(df):
    """Return an Altair chart."""
    # Add lengthy chart arguments here
    base = alt.Chart(
        df,
        width=500,
        height=300,
    ).mark_line(
    ).encode(
        x="times", 
        y="values"
    )
    return base


def layer_charts(dfs, chart_func):
    """Return a layered chart."""

    return alt.layer(*[chart_func(df) for df in dfs])
演示

layer_charts([df0, df1, df2, df3], base_chart)

一些关于
df1
df2
的小数据将使您的问题变得完整,并允许您对您提出的问题进行实验这是牵牛星图库中的分层图表示例:,这是牵牛星的。如果您对分层有任何更具体的问题,请随时提问!非常感谢。我本想添加更多的数据,但由于这是一个工作项目,所以这是一个很大的禁忌。但以时间序列为例,您还希望将注释绘制到存储在单独数据框中的特定点。我确实阅读了示例和文档,这非常有帮助。但在图库中,我没有看到使用两个数据集的示例,只看到同一数据集的不同属性。现在,在alt.LayerChart接口的文档中有关键字数据集。我不知道我会如何使用它。您好@AJK–您不必提供专有数据,但如果您能更具体地说明您想做什么,您通常会得到关于StackOverflow的更有用的答案。这可能需要创建一些小数据集来说明您试图解决的问题。阅读网站上的提示,非常感谢!您可以详细说明LayerChart中的datasets关键字控制什么吗?所有顶级图表对象都接受一个
datasets
属性,该属性是名称到数据集的键值映射,可以使用
NamedData
类在该图表及其任何子级中引用。但它更多的是一个高级功能——我不建议在99%的情况下直接使用它。谢谢,这正是我所关心的。所以我可以传递类似于{'data1':dataset1,'data2':dataset2}的内容。在随后的图层图中,我将能够使用诸如alt.Chart(data1.mark_bar().encode([…])之类的符号?再次感谢您的帮助,非常感谢。有关于创建动态更新牵牛星图表的文档吗?我目前使用ipywidgets的解决方案可以工作,但在任何更新时,我都会重建整个图形。在Bokeh,数据源是抽象的,因此数据可以在无需重建图形的情况下进行操作。抱歉,StackOverflow回答评论不是一个询问和回答多个详细问题的好地方。我建议你选择altair谷歌集团或vega slack频道。在花了一个小时的时间挠头后找到了这个答案——谢谢。我想你不知道在牵牛星图上画简单直线的另一种方法吧?这是功能性的,但对于500条水平线来说速度很慢,而在博克很快。