Как агрегировать данные с помощью d3.js для гистограммы

Я пытался сделать гистограмму, где я представляю данные из набора данных, который имеет несколько вхождений лет. Я хочу показать год по оси X, а по оси Y показать количество вхождений каждого года. Я пробовал следующий код на Observable, но я не уверен, почему он не работает. Я попытался проверить другие S.O. сообщения, но не удалось.

Попробуйте "let" вместо "var"

akicsike 11.02.2023 02:06

О, я пробовал это раньше, он говорит, что слово пусть зарезервировано

Jplaudir8 11.02.2023 02:08

какую версию d3.js вы используете?

akicsike 11.02.2023 02:15

Это должна быть последняя версия, так как я импортирую BarChart в Observable. Я импортирую как: import {BarChart} from "@d3/horizontal-bar-chart"

Jplaudir8 11.02.2023 02:28

Вы пытались переместить строку импорта в начало кодов? первая линия. Может быть, он не объявлен первым и используется после!?

akicsike 11.02.2023 02:31

Observable принимает импорт независимо от того, где он находится

Jplaudir8 11.02.2023 02:41

Затем попробуйте поместить «var» за пределы диаграммы.

akicsike 11.02.2023 02:44

Ssays: синтаксическая ошибка, неожиданный токен.

Jplaudir8 11.02.2023 02:46

Переместите весь фиолетовый код за пределы графика

akicsike 11.02.2023 02:51

Я переместил его наружу, и он все равно выдает SyntaxError: неожиданное ключевое слово «var». Я не уверен, почему проблема с var или let

Jplaudir8 11.02.2023 03:09

Проблема в том, что Barchart — это функция, которая принимает значения в качестве параметров! На вашем изображении код, выделенный фиолетовым цветом, находится не в том месте, переместитесь вверх, за пределы функции Barchart. Функция гистограммы допускает только параметры, а не даже коды.

akicsike 11.02.2023 03:13

Как упоминал @akicside: вы пытались объявить переменную внутри литерала объекта. Это недействительный код JavaScript. Литералы объектов допускают только пары ключ-значение, разделенные запятыми. Поместите выбранный код перед вашим звонком BarChart().

Carsten Massmann 11.02.2023 03:22

Здравствуйте, спасибо, что присоединились. Я только что обновил свой скриншот, чтобы вы, ребята, могли видеть. Это все еще вызывает у меня проблемы, я думаю, что сейчас это не так, но я не уверен, почему он говорит, что есть неожиданный токен. Я также попытался удалить ключевое слово var, но оно все равно не работает.

Jplaudir8 11.02.2023 04:01
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
13
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Здесь возникает несколько проблем, которые в значительной степени связаны с тем, что вы работаете в блокноте Observable , а не в обычной среде Javascript. Я думаю, стоит хорошенько взглянуть на Learning Observable, чтобы убедиться, что вы понимаете основы.

В частности, вы не можете ввести:

let x = 1
let y = 2

в единую ячейку. Фактически это то, что вы пытаетесь сделать в своей основной ячейке, определяющей диаграмму, и получаете синтаксическую ошибку. Вместо этого вы можете ввести:

x = 1

в одну ячейку, а затем

y = 2

в другую ячейку. Затем вы можете ссылаться на эти значения в других ячейках.

Вы также можете комбинировать такие вещи, как:

x_plus_y = {
  let x = 1;
  let y = 2;
  return x+y;
}

Затем значение x_plus_y будет доступно для использования в других ячейках.


Теперь, я полагаю, вы пытаетесь создать подсчет по годам миссий космонавтов, используя https://think.cs.vt.edu/corgis/csv/astronauts/.

Если это так, в этой записной книжке Observable показано несколько способов сделать это.

Наконец, я считаю ошибкой использовать компонент BarChart так, как вы пытаетесь это сделать. Этот компонент был скорее экспериментальной ступенькой к их более полной библиотеке построения графиков более высокого уровня под названием Observable Plot. Я думаю, что с сюжетом гораздо проще добиться того, чего вы хотите, и у вас больше контроля. Также легко использовать Plot в ванильной среде, например:

let div = d3.select('#plot')
fetch(
  "https://think.cs.vt.edu/corgis/datasets/csv/astronauts/astronauts.csv"
).then(async function (r) {
  let astronauts = d3.csvParse(await r.text(), d3.autoType);
  div.append(() => Plot.plot({
    y: {
      grid: true
    },
    x: { tickFormat: (y) => (y % 10 == 0 ? d3.format('d')(y) : "") },
    marks: [
      Plot.barY(astronauts, Plot.groupX({ y: "count" }, { x: "Mission.Year" })),
      Plot.ruleY([0])
    ]
  }))
});
<script src = "https://cdn.jsdelivr.net/npm/d3@7"></script>
<script src = "https://cdn.jsdelivr.net/npm/@observablehq/[email protected]"></script>
<div id = "plot"></div>

Большое спасибо за ваши рекомендации и предложения, доктор МакКлюр :)

Jplaudir8 13.02.2023 19:22

Другие вопросы по теме