您如何根据鼠标悬停在 Altair x 轴上的日期以交互方式计算指数价格变化?

如何解决您如何根据鼠标悬停在 Altair x 轴上的日期以交互方式计算指数价格变化?

我正在尝试创建此 an Altair versionVega-Lite API Interactive Index Chart,它本身是根据此 Vega-Lite JSON version 改编的。

altair 中,我无法让 transform_lookup 和 transform_calculate 与鼠标悬停选择一起使用,因此每个符号的 y 轴上显示的索引价格值是根据鼠标悬停在 x-上的日期计算的轴。

Vega-Lite 中,以下转换(即查找和计算)根据鼠标悬停在 x 轴上的日期计算索引价格变化:

chart = {
  const mouSEOver = vl
    .selectSingle("index")
    .on("mouSEOver")
    .encodings("x")
    .nearest(true)
    .init({ x: { year: 2005,month: 1,date: 1 } });

  const base = vl.mark().encode(
    vl.x().fieldT("date").axis(null)
  );

   const hiddenPoints = base
    .markPoint({ opacity: 0.1 })
    .select(mouSEOver)
    .encode(
      // Let's color code it interactively to demonstrate it is working,but we will remove it later
      vl.color().if(mouSEOver,vl.value("firebrick")).value("steelblue")
    );
  
  const line = base
    .markLine()
    .transform(
      vl.lookup("symbol").from(mouSEOver.key("symbol")),vl.calculate(
        "datum.index && datum.index.price > 0 ? (datum.price - datum.index.price)/datum.index.price : 0"
      ).as("indexed_price")
    )
    .encode(
      vl.y().fieldQ("indexed_price").axis({ format: "%" }),vl.color().fieldN("symbol")
    );

  const tooltipBase = base
    .transform(vl.filter(mouSEOver))
    .encode(vl.color().value("firebrick"));

  const tooltip = vl.layer(
    tooltipBase.markRule({ strokeWidth: 0.5 }),tooltipBase.markText({ align: "center",fontWeight: 100 }).encode(
      vl.y().value(310),vl.text().fieldT("date").timeUnit("yearmonth")
    )
  );

  return vl
    .layer(hiddenPoints,line,tooltip)
    .data("data/stocks.csv")
    .width(width - 150)
    .height(300)
    .render();
}

Vega-Lite API Interactive Index Chart

当我尝试将此代码转换altair 时,我无法通过鼠标悬停事件来查找日期和符号并正确计算每个符号的索引价格变化值。 hiddenPoints 出现,但每个符号的索引价格变化线没有出现:

mouSEOver = alt.selection_single(name='index',on='mouSEOver',encodings=['x'],nearest=True,init={ 'x': { 'year': 2005,'month': 1,'date': 1 } })

base = alt.Chart(stocks).mark_line().encode(
    x=alt.X('date:T',axis=None,title=None),)

hiddenPoints = base.mark_point(opacity=0.1).add_selection(mouSEOver).encode(
    color=alt.condition(mouSEOver,alt.value('firebrick'),alt.value('steelblue'))
)

line = base.mark_line().transform_lookup(
    lookup='symbol',from_=alt.LookupData(data='index',key='symbol',fields=['date','price'])
).transform_calculate(
    indexed_price="datum.index && datum.index.price > 0 ? (datum.price - datum.index.price) / datum.index.price : 0"
).encode(
    y=alt.Y('indexed_price:Q',title='Indexed Price',axis=alt.Axis(format='%')),color=alt.Color('symbol:N',title='Symbol')
)

tooltipBase = base.transform_filter(mouSEOver).encode(
    color=alt.value('firebrick')
)

tooltip = alt.layer(
    tooltipBase.mark_rule(strokeWidth=0.5),tooltipBase.mark_text(align='center',fontWeight=100).encode(
      y=alt.value(310),text='yearmonth(date):T'
    )
)

alt.layer(hiddenPoints,tooltip).properties(
    width=650,height=300
)

Altair Interactive Index Chart

altair 中,如何使用带有transform_lookup 和transform_calculate 的鼠标悬停事件来查找日期和交易品种并计算每个交易品种的索引价格变化值?感谢您的帮助。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?