有没有办法用 D3.js 修改 Vega 图表?
Is there a way to modify Vega charts with D3.js?
我最近开始研究 Vega 以减少或多或少典型图表的 D3.js
编码量。然而,对于复杂的仪表板,Vega
图表之间使用信号的交互对我来说仍然有点棘手。
有没有办法将“标准”Vega
图表加载到 HTML
页面,然后使用 D3 访问其元素?当我使用 Vega-Embed 部署 Vega
个示例时,唯一连接到图表的元素是 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 class 名称之外,名称和角色标记属性值将作为 CSS class 名称公开在封闭的包含标记实例的 SVG 组 (g) 元素(来源:https://vega.github.io/vega/docs/marks/)。
您还可以在这个可观察笔记本中查看更复杂的示例:https://observablehq.com/@oliviafvane/hacking-a-vega-lite-map-label-positioning-custom-fonts-stri
我最近开始研究 Vega 以减少或多或少典型图表的 D3.js
编码量。然而,对于复杂的仪表板,Vega
图表之间使用信号的交互对我来说仍然有点棘手。
有没有办法将“标准”Vega
图表加载到 HTML
页面,然后使用 D3 访问其元素?当我使用 Vega-Embed 部署 Vega
个示例时,唯一连接到图表的元素是 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 class 名称之外,名称和角色标记属性值将作为 CSS class 名称公开在封闭的包含标记实例的 SVG 组 (g) 元素(来源:https://vega.github.io/vega/docs/marks/)。
您还可以在这个可观察笔记本中查看更复杂的示例:https://observablehq.com/@oliviafvane/hacking-a-vega-lite-map-label-positioning-custom-fonts-stri