Как правильно визуализировать таблицу Prefuse (Java)? - PullRequest
0 голосов
/ 13 января 2012

Я хочу визуализировать некоторые данные об автомобилях в таблице с помощью Prefuse Java. Используются три вида важных объектов данных:

  1. PIT (Точка во времени)
  2. Значение (содержит потребление газа в два раза)
  3. Автомобиль (класс, представляющий автомобиль)

Итак, сначала я положил их в таблицу так:

car1 | pit1 | value11
car1 | pit2 | value12
car1 | pit3 | value13
car2 | pit1 | value21
car2 | pit2 | value22
car2 | pit3 | value23
car3 | pit1 | value31
car3 | pit2 | value32
car3 | pit3 | value33

Используя примеры в проекте Prefuse, я смог создать визуализацию таблицы с осью X, обозначенной pit1, pit2 и pit3, и осью Y с различными значениями в правильном порядке.

Но я часами пытался нарисовать маленькие квадраты в соответствующих точках (например, красный квадрат для car1, где pit1 и value11 "встречаются").

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

PS: Я также хотел бы знать, как улучшить ось Y следующим образом:

Представьте, что самое низкое значение - 2,6, а самое высокое - 32,0. Прямо сейчас ось Y будет начинаться с 2,6 и просто помечать каждое значение (с одинаковым интервалом между метками независимо от фактической разницы) до 32,0. Я бы предпочел, чтобы метки начинались с 0.0 (или 2.0), а затем с шагом от 5 до 35.

1 Ответ

2 голосов
/ 15 февраля 2012

Вы хотите визуализировать свою таблицу в точечной диаграмме с PIT на оси x, значением на оси y и Car в качестве цвета меток (= прямоугольники).

Если я вас правильно понял, вы видите метки оси, но никаких меток.

Вам нужно добавить ColorAction в список действий, чтобы увидеть метки. Например:

ColorAction color = new ColorAction("data", VisualItem.STROKECOLOR,
                ColorLib.rgb(100, 100, 255));

Или используйте DataColorAction, который позволяет визуализировать метки разного цвета в зависимости от автомобиля:

ColorAction color = new DataColorAction("data", "Car", 
                Constants.NOMINAL, VisualItem.FILLCOLOR);

Относительно оси y: prefuse рисует каждую метку и игнорирует фактическую разницу, если не может прочитать переменную (здесь: Value) как двойную. Пожалуйста, проверьте, хранится ли он как Double или String. Если вы хотите начать с 0.0, вы можете установить модель диапазона:

y_axis.setRangeModel(new NumberRangeModel(0, 40, 0, 40)); 

PS: Я написал учебник для графиков рассеивания: http://www.ifs.tuwien.ac.at/~rind/w/doku.php/java/prefuse-scatterplot

...