2013-07-01 1 views
0

У меня есть две кривые, каждая из которых определяется интерполяцией по набору значений (x, y) с использованием d3.svg.line. Я бы хотел, чтобы одна строка была красной, когда она была ниже другой, и была зеленой, если выше. Как так:Для двух произвольных интерполированных кривых, их цвет на основе относительных значений

lines

Как это можно сделать?

+1

Почему? Потому что трудно сказать, находится ли одна строка выше/ниже другой? –

+0

Зависит от вашего определения «легко» - если вы имеете в виду «есть ли опция, которую я могу установить, чтобы получить это», тогда ответ будет отрицательным. Вам придется реализовать это самостоятельно. –

+0

@ LarsKotthoff вопрос отредактирован для того, чтобы быть яснее для вас – Jonah

ответ

2

Посмотрите на диаграмму Difference в своих примерах, она очень похожа на то, что вы хотите, и может удовлетворить ваши критерии. Если нет, я думаю, вы можете легко адаптировать его к вашим потребностям.

+0

это на самом деле именно то, что я искал, спасибо. – Jonah

0

Основная проблема заключается в том, что вы не можете напрямую назначить несколько цветов для пути. Таким образом, у вас есть два основных варианта.

  • Разделить линию на сегменты. Каждый сегмент может иметь другой цвет.
  • Используйте градиент. Переходы между цветами будут иметь нулевую ширину.

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

Как только у вас есть точки, где пересекаются линии, это просто вопрос о том, как закончить путь/градиент.

+0

спасибо за ваш ответ, это был подход, который пришел мне на ум, и это казалось слишком сложным. Я посмотрю, как mbostock сделал это на примере Яна, так как это идеально для меня. – Jonah

+0

Я не думаю, что этот пример применим в вашем случае, так как он не окрашивает путь, а область, определенную путем. –

Смежные вопросы