首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Altair平行坐标

Altair平行坐标
EN

Stack Overflow用户
提问于 2021-12-13 23:10:29
回答 1查看 282关注 0票数 3

我想用多个y轴做一个平行坐标图。我已经在Vega 这里中找到了如何做到这一点,但是我还没有找到用牛郎星做这件事的方法,只有一个非常简单的例子,所有y轴都是相同的。有办法在牛市做这块地吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-14 14:06:23

请注意,这种图表不是“内建”到牛市或织女星,所以唯一的方法创建它是一个手动的转换序列,并手动构造您的轴从滴答和文字标记。

下面是您链接到的答案中图表的牛尾版本:

代码语言:javascript
复制
import altair as alt
from vega_datasets import data

base = alt.Chart(
    data.iris.url
).transform_window(
    index="count()"
).transform_fold(
    ["petalLength", "petalWidth", "sepalLength", "sepalWidth"]
).transform_joinaggregate(
    min="min(value)",
    max="max(value)",
    groupby=["key"]
).transform_calculate(
    norm_val="(datum.value - datum.min) / (datum.max - datum.min)",
    mid="(datum.min + datum.max) / 2"
).properties(width=600, height=300)

lines = base.mark_line(opacity=0.3).encode(
    x='key:N',
    y=alt.Y('norm_val:Q', axis=None),
    color="species:N",
    detail="index:N",
    tooltip=["petalLength:N", "petalWidth:N", "sepalLength:N", "sepalWidth:N"]
)

rules = base.mark_rule(
    color="#ccc", tooltip=None
).encode(
    x="key:N",
    detail="count():Q",
)

def ytick(yvalue, field):
    scale = base.encode(x='key:N', y=alt.value(yvalue), text=f"min({field}):Q")
    return alt.layer(
        scale.mark_text(baseline="middle", align="right", dx=-5, tooltip=None),
        scale.mark_tick(size=8, color="#ccc", orient="horizontal", tooltip=None)
    )

alt.layer(
    lines, rules, ytick(0, "max"), ytick(150, "mid"), ytick(300, "min")
).configure_axisX(
    domain=False, labelAngle=0, tickColor="#ccc", title=None
).configure_view(
    stroke=None
)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70341974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档