Vega-Lite 的某些投影在 Altair 中不起作用

如何解决Vega-Lite 的某些投影在 Altair 中不起作用

根据堆栈跟踪,我可以看到 altair 只接受以下预测 -

['albers','albersUsa','azimuthalEqualArea','azimuthalEquidistant','conicConformal','conicEqualArea','conicEquidistant','equalEarth','equirectangular','gnomonic','identity','mercator','naturalEarth1','orthographic','stereographic','transverseMercator']

然而,我真的很想有一个基于多面体的投影,特别是 Cahill-Keyes。经过一番搜索,我找到了这个页面,在那里我可以看到所有的 Vega-Lite 投影 - https://observablehq.com/@vega/vega-lite-cartographic-projections 它确实有一些多面体投影。

但是,altair 似乎不支持其中的很多。我认为通常 Vega-Lite 中可用的任何内容都可以使用 altair 完成,所以我想知道为什么 altair 限制了投影数量

解决方法

Altair 跟随 Vega-Lite schema

Vega-Lite 列出了 ProjectionType 定义中支持的投影;据此,允许的投影类型如下:

   "ProjectionType": {
      "enum": [
        "albers","albersUsa","azimuthalEqualArea","azimuthalEquidistant","conicConformal","conicEqualArea","conicEquidistant","equalEarth","equirectangular","gnomonic","identity","mercator","naturalEarth1","orthographic","stereographic","transverseMercator"
      ],"type": "string"
    },

如果您指定的投影与其中之一不匹配,Altair 将引发错误。

,

通过一些技巧,您可以使用 vega-projection-extended 项目获得更多投影。但是有一些问题,引用 Observable site 上的 Jeffrey Heer 的话,您可以在其中看到这些预测的实际效果 -

请注意,由于缺少对地球球体的裁剪,某些投影可能会显示伪影。我们正在努力!

在 Jupyter Notebook 中使用 Altair,您可能无法使用它。但是,如果您确定某个投影,那么您可以导出 HTML 或 json 规范并添加 vega-projection-extended 库并将现有投影替换为您想要的投影。瞧,Vega-Lite 将显示投影。

您可以将投影库添加为 -

  <script src="https://cdn.jsdelivr.net/npm/vega-projection-extended@2"></script>

在 vegaEmbed 规范中,您可以将投影名称更改为 -

......."projection": {"type": "interruptedBoggs"}

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 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元字符(。)和普通点?