Идиоматический способ добавления баров ошибок на график в 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. Надеюсь, кто-нибудь увидит это и подскажет, как это исправить. Во всяком случае, это довольно близко.

Другие вопросы по тегам