Чтобы связать красивые имена с сериями точек или линий, используйте ключевое слово :series-label
в команде, которая добавляет эти данные в диаграмму. Например:
(def c (scatter plot x y :legend true))
(add-lines c x1 y1 :series-label "Primary")
(add-lines c x2 y2 :series-label "Secondary")
Это не решает другую проблему в вашем вопросе: чтобы создать голую диаграмму рассеяния с легендой, вы должны передать пустые данные в scatter-plot
, т.е. с x
и y
как пустым последовательности выше, так как Incanter не позволяет вам указывать :legend
без передачи данных в scatter-plot
. Если x
и y
пустые (например, они nil
), пустые данные также отображаются в качестве элемента легенды. Я не верю, что эту проблему сейчас можно решить напрямую (версия 1.5.7).
Одним из решений является передача реальных данных в вызове точечной диаграммы вместе с параметром :series-label
. Однако это может затруднить программную генерацию точечной диаграммы, если число наборов данных заранее неизвестно, поскольку вы должны обрабатывать первый набор данных иначе, чем другие.
Другое, клуджое решение таково:
(def chart (scatter-plot nil nil :legend true :series-label ""))
(set-stroke-color chart (java.awt.Color. 0 0 0 0) :dataset 0)
Использование пустой строки в качестве значения :series-label
означает, что метка в легенде для первого, пустого набора данных не будет отображаться. Вызов set-stroke-color
делает цвет пустого набора данных (т.е. набора данных 0) прозрачным. В противном случае у вас будет красная точка для этого набора данных в вашей легенде. В легенде у вас будет маленькое пустое место, к которому принадлежат красная точка и пустая строка, но это не так сложно, как увидеть красную точку там.