Добавление текста к графику принудительного макета D3

Я пытаюсь изменить график силового макета здесь http://bl.ocks.org/mbostock/4062045, добавляя текст внутри кругов, но текст не отображается. Я добавил этот блок кода к исходному коду на сайте.

node.append("text")
  .style("text-anchor", "middle")
  .text(function(d) { return d.name; }); 

person user3183900    schedule 13.01.2014    source источник
comment
bl.ocks.org/MoritzStefaner/1377729   -  person Jordan    schedule 12.05.2015


Ответы (1)


У меня нет вашего кода целиком, но я думаю, что вы добавляете текст В круги, а поскольку круги маленькие, вы не видите текста.

Теперь ваши узлы в настоящее время являются кругами (я просто полагаю). Если вам нужны и круги, и текст для каждого узла, ваши узлы должны быть элементами svg g (g означает «группа»), и каждому такому элементу g вы назначаете круг и текст. Подробнее об этом вы можете узнать здесь (там же есть код )

РЕДАКТИРОВАТЬ: Как только вы увидите метки, вам захочется расположить их удобным образом по отношению к узлам. Вот почти официальная рекомендация по расположению меток к узлам графа:

Для вертикального выравнивания используйте атрибут «dy»:

by default, the baseline of the text is at the origin (bottom-aligned)
a dy of .35em centers the text vertically
a dy of .72em places the topline of the text at the origin (top-aligned)

Использовать em единиц удобно, потому что они автоматически масштабируются в зависимости от размера шрифта. Если вы не укажете единицы измерения, по умолчанию будут использоваться пиксели.

Для горизонтального выравнивания используйте атрибут text-anchor:

the default is "start" (left-aligned for left-to-right languages)
"middle"
"end"
person VividD    schedule 13.01.2014
comment
Независимо от размера кругов, вы не можете добавить текстовый элемент внутрь круга. Когда я связался с этим примером на вашем предыдущий вопрос Я должен был подчеркнуть, что он использовал групповые (<g>) элементы в качестве узлов, а затем добавил круг и текстовые элементы отдельно в group вместо того, чтобы делать сами круги узлами, как в примере, с которым вы работали. - person AmeliaBR; 13.01.2014
comment
P.S. Я должен уточнить, что если ваши круги достаточно большие, вы все равно можете сделать так, чтобы текст выглядел как внутри круга, центрируя текст по кругу (используйте CSS text{text-anchor:middle; alignment-baseline:middle;}, чтобы центрировать его по точке ). Но что касается браузера, круг и текст должны быть родственными элементами, а не вложенными друг в друга. - person AmeliaBR; 13.01.2014
comment
Да, и еще надо сказать круги и тексты можно генерировать отдельно, без g, но в этом случае привязку данных нужно делать дважды, один раз для кругов, а второй раз для текстов. Подход с g чище. Для упражнений вы можете попробовать оба позже. И вы также можете попробовать добавить изображение в качестве третьего элемента узла. - person VividD; 13.01.2014