#javascript #d3.js #data-visualization #vega
#javascript #d3.js #визуализация данных #вега
Вопрос:
Недавно я начал изучать Vega, чтобы уменьшить объем D3.js
кодирования для более или менее типичных диаграмм. Однако для сложных панелей мониторинга взаимодействие между Vega
графиками с использованием сигналов все еще немного сложно для меня.
Есть ли способ загрузить «стандартную» Vega
диаграмму на HTML
страницу, а затем получить доступ к ее элементам с помощью D3? Когда я развертываю Vega
примеры с помощью Vega-Embed, единственным элементом, подключенным к диаграмме, является холст:
<canvas width="542" height="297" class="marks" style="width: 434px; height: 238px;"></canvas>
Другими словами, есть ли решение для экспорта Vega
с доступными элементами DOM?
Комментарии:
1. Это очень актуальный вопрос! Мне также было интересно, как это можно сделать, но пока ничего не нашел. AFAIK, должна быть возможность отобразить диаграмму с помощью vega-embed в SVG?
Ответ №1:
Передача 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>
В дополнение к именам классов CSS по умолчанию, которые использует Vega, значения свойств name и role mark будут отображаться как имена классов CSS во включающем элементе SVG group (g), содержащем экземпляры mark (источник: https://vega.github.io/vega/docs/marks /).
Вы также можете проверить более сложный пример в этом наблюдаемом блокноте: https://observablehq.com/@oliviafvane/hacking-a-vega-lite-map-label-positioning-custom-fonts-stri
Комментарии:
1. Вау! Это именно то, что я искал! Большое вам спасибо @93degree!