JFreeChart — шаг оси категорий

У меня есть метод для создания набора данных:

private CategoryDataset createDataset(double[] arr,
            String seriesName) {
        DefaultCategoryDataset dataset = new DefaultCategoryDataset();
        for (int i = 0; i < arr.length; i++) {
            dataset.addValue(arr[i], "mySeries", new Integer(i));
        }

        return dataset;
    }

и создайте BarChart:

JFreeChart chart = ChartFactory.createBarChart(chartTitle,
                xaxis, // domain axis label
                yaxis, // range axis label
                dataset, // data
                orientation, // orientation
                true, // include legend
                true, // tooltips?
                false // URLs?
                );

Массив двойников содержит данные гистограммы, поэтому имеется 255 значений.

Когда я показываю диаграмму, на оси X есть метки для всех значений от 0 до 255. Я хочу отображать только метки для нескольких индексов (например: 0, 10, 20, 30). Я видел, что в RangeAxis есть метод setStandardTickUnits. Но в CategoryAxis:

CategoryAxis domainAxis = plot.getDomainAxis();

Я не нашел этого.

Любая помощь?


person bontade    schedule 23.10.2011    source источник


Ответы (2)


Вы можете попробовать следующее,

NumberAxis vn = (NumberAxis) plot.getRangeAxis();   
vn.setTickUnit(new NumberTickUnit(10d)); 
vn.setRange(0D, Math.ceil(factor * MAX_VALUE));

--то есть вам просто нужно привести plot.getRangeAxis() к типу NumberAxis.

person Daisy.Zhang    schedule 23.12.2011
comment
Это не ось Y? - person Daniel Hershcovich; 02.12.2013

У меня была такая же проблема. Я создал новый класс, реализующий Comparable, и использую его как последний параметр в addValue(...). Вы можете создать что-то вроде

class MyCategory implements Comparable<MyCategory> {
   Integer value;
   String stValue;

   MyCategory(int val) {
      value = val; 
      stValue = val%10==0?""+val:"";}

   public int compareTo(MyCategory key) { return value.compareTo(key.value); }

   public String toString() { return stValue; }
}

И тогда вместо

dataset.addValue(arr[i], "mySeries", new Integer(i));

использовать

dataset.addValue(arr[i], "mySeries", new MyCategory(i));
person Vladimir    schedule 19.03.2013