javascript - 有没有办法用 D3.js 修改 Vega 图表?

标签 javascript d3.js data-visualization vega

我最近开始接触 Vega减少D3.js的数量编码或多或少的典型图表。但是,对于复杂的仪表板,Vega 之间的交互使用信号的图表对我来说仍然有点棘手。
有没有办法加载“标准”Vega图表到 HTML页面,然后使用 D3 访问其元素?当我部署 Vega使用 Vega-Embed 的示例,连接到图表的唯一元素是 Canvas :<canvas width="542" height="297" class="marks" style="width: 434px; height: 238px;"></canvas>也就是说,有没有办法导出Vega具有可访问的 DOM 元素?

最佳答案

路过opt={renderer: 'svg'}作为 embed 的参数功能允许通过 DOM 访问和修改不同的可视化元素。在下面找到一个简单的示例,我使用 D3 访问和更改第一个条的颜色:

<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vega@5"></script>
<script src="https://cdn.jsdelivr.net/npm/vega-lite@4"></script>
<script src="https://cdn.jsdelivr.net/npm/vega-embed@6"></script>


<div id="vis"></div>

<script>
  var spec = "https://vega.github.io/vega/examples/grouped-bar-chart.vg.json";

  vegaEmbed('#vis', spec, opt = {
    renderer: 'svg'
  }).then(() => {
    d3.select('g.mark-rect.role-mark')
      .select('path')
      .attr('fill', 'firebrick')
  })
</script>

除了 Vega 使用的默认 CSS 类名之外,名称和 Angular 色标记属性值将作为 CSS 类名公开在包含标记实例的封闭 SVG 组 (g) 元素上(来源:https://vega.github.io/vega/docs/marks/)。
您还可以在这个可观察的笔记本中查看更复杂的示例:https://observablehq.com/@oliviafvane/hacking-a-vega-lite-map-label-positioning-custom-fonts-stri

关于javascript - 有没有办法用 D3.js 修改 Vega 图表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66256236/

相关文章:

javascript - 我的 API 调用没有返回任何内容?

javascript - 在具有间隙的堆叠面积图中呈现伪像

javascript - 检查对象键是否为空数组或检查它是否具有自己的属性

javascript - 聆听传说中的悬停

javascript - 表中的 Laravel 简单模式不起作用

css - 录制 SVG 动画并将其保存为动画 GIF

javascript - 事件处理程序关闭中 d3.js 键控连接的内存泄漏

r - 使用 ggplot2 创建具有散点图平均值的网格和颜色单元格

data-visualization - 寻找数据可视化框架

python - 使用 matplotlib 调整图例中的线条颜色