Разобрался как создавать свг-элементы в жс.

Когда браузер получает страницу в хтмл, он пытается понять, что в ней написно и построить у себя внутри древовидную структуру, соотвутствующую исходному хтмл. А потом эту структуру как-то отображает. Нам, программистам, браузер выдает набор функций для манипулирования этой структурой: поиска в ней объектов, создания и добавления новых, удаления старых, и т. п. Такой порядок вещей называется document object model, или DOM для краткости.

В моем случае диаграмма состоит из следующих тегов: прямоугольника, отображающего продолжительность события, и текста с названием события. Текст и прямоугольник одного события сгруппированы вместе тегом g, а группы эти все вложены в тег svg.

<svg id="chart">
  <g>
    <text>Событие</text>
    <rect width="400" height="20" x="100"/>
  </g>
</svg>

Благодаря ДОМу можно сделать все то же самое, но на джаваскрипте:

// создаем полоску
let bar = document.createElementNS("http://www.w3.org/2000/svg", "rect");

// снабжаем ее подходящими аттрибутами  
bar.setAttribute('width', 400);
bar.setAttribute('height', '20');
bar.setAttribute('x', 100);

// создаем подпись
let text = document.createElementNS("http://www.w3.org/2000/svg", "text");
text.textContent = "Событие";

// создаем группу
let event = document.createElementNS("http://www.w3.org/2000/svg", "g");

// кладем полоску с подписью внутрь
event.appendChild(text);
event.appendChild(bar);

// находим на странице тег svg
let svg = document.getElementsByTagName('svg')[0];

// добавляем внутрь созданное событие
svg.appendChild(event);

Выглядит довольно громоздко и неудобно. Зато можно написать разнообразные функции для генерации элементов и автоматизировать таким образом их создание. Я так и сделал, теперь на странице с графиком автоматически создается 10 событий, каждый раз новых.