Идиоматический способ добавления баров ошибок на график в Incanter
Я создаю сюжет о вере робота в его расстояние до ориентира. Ось X - это число измерений, а ось Y - это расстояние до наземного ориентира, которое должно включать полосы ошибок, чтобы указывать достоверность этой оценки.
Я не смог найти хороший способ добавить полосы ошибок на график, основываясь на значении дисперсии. В настоящее время я создаю рамочную диаграмму для каждого измерения, генерируя выборочные данные о среднем с моим значением для дисперсии. Это явно не идеально, так как вычислительно неэффективно и является неточным представлением информации, которую я пытаюсь отобразить.
Есть идеи, как это сделать? В идеале это должно быть на xy-plot, и это можно сделать без необходимости прибегать к командам JFreeChart.
1 ответ
Я думаю, что у меня есть что-то довольно близкое. Сначала давайте создадим несколько случайных данных для графа:
(def y (for [i (range 20)] (rand-int 100)))
user> (11 14 41 33 25 71 52 34 83 90 80 35 81 63 94 69 97 92 4 91)
Теперь создайте сюжет. Ты можешь использовать xy-plot
но мне нравится внешний вид scatter-plot
лучше.
(def plot (scatter-plot (range 20) y))
(view plot)
Это дает мне следующий сюжет
Теперь нам нужно определить функцию, которая принимает точку (x,y) и возвращает вектор нижней и верхней границ панели ошибок. Я буду использовать упрощенный метод, который просто вычисляет 5% выше и ниже значения y.
(defn calc-error-bars [x y]
(let [delta (* y 0.05)]
[(- y delta) (+ y delta)]))
Теперь мы просто map
эта функция над набором данных с использованием add-lines
функционировать так...
(map #(add-lines plot [%1 %1] (calc-error-bars %1 %2)) (range 20) y)
И это дает нам этот сюжет:
Основная проблема в том, что все полосы разных цветов. Я не уверен, есть ли способ обойти это без использования вызовов JFreeChart. Надеюсь, кто-нибудь увидит это и подскажет, как это исправить. Во всяком случае, это довольно близко.