#d3.js
#d3.js
Вопрос:
Я хотел бы провести пунктирную линию от моих точек данных до моей оси X / Y (при наведении курсора мыши). Таким образом, значение может быть лучше прочитано на оси, и это выглядит потрясающе (видно в углублении).
Я ищу решение, как я могу этого добиться, или просто пример…. Благодарен за любой совет!!
Обновление 1
Это работает, и я могу рисовать линии. Теперь я хочу нарисовать его более анимированным — возможно ли это с помощью svg:line?
var dpX = d3.select(this).attr('x');
var dpY = d3.select(this).attr('y');
var myLine = d3Chart.append("svg:line")
.attr("class", 'd3-dp-line')
.attr("x1", dpX)
.attr("y1", dpY)
.attr("x2", 0)
.attr("y2", dpY)
.style("stroke-dasharray", ("3, 3"))
.style("stroke-opacity", 0.9)
.style("stroke", dpChannel.Color);
Комментарии:
1. Я ищу ту же функцию!! Могу ли я увидеть код ur
Ответ №1:
Вы можете построить линии с двумя точками каждая:
- горизонтальная линия будет иметь одну точку с координатами (0, circleY) и (circleX, circleY)
- вертикальный будет иметь (circleX,0) и (circleX, circleY) .
Где, конечно circleX
, и circleY
— координаты окружности на изображении
Комментарии:
1. что вы подразумеваете под «более анимированным»? если вы хотите, чтобы они шли от оси к окружности, вы можете установить начальные точки равными 0,0 для обеих точек линии, а затем перевести их в координаты окружности
Ответ №2:
Вы можете увидеть, как именно dimple делает это здесь: https://github.com/PMSI-AlignAlytics/dimple/blob/master/src/methods/_showPointTooltip.js Строки 65 — 106. T
// Add a drop line to the x axis
if (dropDest.y !== null) {
chart._tooltipGroup.append("line")
.attr("x1", cx)
.attr("y1", (cy < dropDest.y ? cy r series.lineWeight 2 : cy - r - series.lineWeight - 2))
.attr("x2", cx)
.attr("y2", (cy < dropDest.y ? cy r series.lineWeight 2 : cy - r - series.lineWeight - 2))
.style("fill", "none")
.style("stroke", fill)
.style("stroke-width", 2)
.style("stroke-dasharray", ("3, 3"))
.style("opacity", opacity)
.transition()
.delay(animDuration / 2)
.duration(animDuration / 2)
.ease("linear")
.attr("y2", (cy < dropDest.y ? dropDest.y - 1 : dropDest.y 1));
}
// Add a drop line to the y axis
if (dropDest.x !== null) {
chart._tooltipGroup.append("line")
.attr("x1", (cx < dropDest.x ? cx r series.lineWeight 2 : cx - r - series.lineWeight - 2))
.attr("y1", cy)
.attr("x2", (cx < dropDest.x ? cx r series.lineWeight 2 : cx - r - series.lineWeight - 2))
.attr("y2", cy)
.style("fill", "none")
.style("stroke", fill)
.style("stroke-width", 2)
.style("stroke-dasharray", ("3, 3"))
.style("opacity", opacity)
.transition()
.delay(animDuration / 2)
.duration(animDuration / 2)
.ease("linear")
.attr("x2", (cx < dropDest.x ? dropDest.x - 1 : dropDest.x 1));
}
Это явно использует некоторые внутренние переменные и функции dimple, но это потому, что мне приходится иметь дело с множеством потенциальных перестановок. Если вы кодируете одну диаграмму, вы можете заменить их фиксированными значениями.