Как использовать vegaEmbed для встраивания визуализации Altair в html-документ?

Я пытаюсь встроить визуализацию данных Altair, созданную на Python, в html-документ. Я следовал инструкциям на https://altair-viz.github.io/user_guide/saving_charts.html , в частности методу json/VegaEmbed. Ниже приведен мой код для html:

      <!DOCTYPE html>
<html>
<head>
  <style>
    .error {
        color: red;
    }
  </style>
  <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/vega@5"></script>
  <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/vega-lite@5"></script>
  <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/vega-embed@6"></script>
</head>
<body>
  <h1>Altair Embed Demo</h1>
  <div id="vis"></div>
  <script>
    vegaEmbed('#vis', 'C:/Users/myName/chart.json');
  </script>
</body>
</html>

Как видно здесь, визуализация Altair сохраняется локально как chart.json, и я вызываю на ней модуль vegaEmbed.

Однако проблема, с которой я сталкиваюсь, заключается в том, что полученная страница не выводит визуализацию Altair. Мой путь правильный, я импортировал правильный модуль и правильно использовал vegaEmbed() (я думаю). Может ли кто-нибудь дать мне совет по этому вопросу, если у него есть опыт работы с Vega/Altair? Спасибо.

1 ответ

Я думаю, вы столкнулись с проблемой безопасности, когда ваш браузер не позволяет вам получить доступ к локальным файлам. Если вы используете URL-адрес файла, размещенного в Интернете, он будет работать:

      <!DOCTYPE html>
<html>
<head>
  <script src="https://cdn.jsdelivr.net/npm/vega@5"></script>
  <script src="https://cdn.jsdelivr.net/npm/vega-lite@5"></script>
  <script src="https://cdn.jsdelivr.net/npm/vega-embed@6"></script>
</head>
<body>
  <div id="vis"></div>
  <script type="text/javascript">
    vegaEmbed("#vis", "https://raw.githubusercontent.com/vega/vega-lite/next/examples/specs/bar.vl.json");
  </script>
</body>
</html>

Здесь есть несколько предложений о том, как получить доступ к локальным файлам в браузере, которые вы можете изучить, чтобы найти наиболее подходящее решение для вас Загрузка локального файла JSON.

Вы также можете встроить спецификацию vega напрямую, а не сохранять ее в виде отдельного файла, вставив в документ что-то вроде следующего (как на странице документации, на которую вы ссылаетесь):

          var spec = {
      "$schema": "https://vega.github.io/schema/vega-lite/v4.json",
      "config": {
        "view": {
          "continuousHeight": 300,
          "continuousWidth": 400
        }
      },
      "data": {
        "url": "https://vega.github.io/vega-datasets/data/cars.json"
      },
      "encoding": {
        "color": {
          "field": "Origin",
          "type": "nominal"
        },
        "x": {
          "field": "Horsepower",
          "type": "quantitative"
        },
        "y": {
          "field": "Miles_per_Gallon",
          "type": "quantitative"
        }
      },
      "mark": "point"
    };
Другие вопросы по тегам