Точки графика вместо линий? JFreeChart PolarChart - PullRequest
6 голосов
/ 12 марта 2010

В настоящее время PolarChart объединяет все координаты с линиями, образуя многоугольник. Я просто хочу, чтобы каждая точка отображалась точкой, а НЕ соединялась вместе. Возможно ли это?

Я пытался использовать translateValueThetaRadiusToJava2D() и Graphics2D для рисования кругов, но это очень неуклюже и надумано.

Любые предложения приветствуются!

Ответы [ 4 ]

6 голосов
/ 17 марта 2010

Таким образом, DefaultPolarItemRenderer принимает все полярные точки, преобразует полярные точки в правильные координаты Java2D, делает Polygon с этими точками и затем рисует его. Вот как я смог нарисовать точки вместо многоугольника:

public class MyDefaultPolarItemRenderer extends DefaultPolarItemRenderer {

    @Override
    public void drawSeries(java.awt.Graphics2D g2, java.awt.geom.Rectangle2D dataArea, PlotRenderingInfo info, PolarPlot plot, XYDataset dataset, int seriesIndex) {


        int numPoints = dataset.getItemCount(seriesIndex);
        for (int i = 0; i < numPoints; i++) {

            double theta = dataset.getXValue(seriesIndex, i);
            double radius = dataset.getYValue(seriesIndex, i);
            Point p = plot.translateValueThetaRadiusToJava2D(theta, radius,
                    dataArea);
            Ellipse2D el = new Ellipse2D.Double(p.x, p.y, 5, 5);
            g2.fill(el);
            g2.draw(el);
        }
    }
}

, а затем создал этот класс в другом месте:

    MyDefaultPolarItemRenderer dpir = new MyDefaultPolarItemRenderer();
    dpir.setPlot(plot);
    plot.setRenderer(dpir);
2 голосов
/ 12 марта 2010

Это немного сложнее. Учитывая PolarPlot, вы можете получить его AbstractRenderer и установить форму. Например,

PolarPlot plot = (PolarPlot) chart.getPlot();
AbstractRenderer ar = (AbstractRenderer) plot.getRenderer();
ar.setSeriesShape(0, ShapeUtilities.createDiamond(5), true);

Алмаз появится в легенде, но DefaultPolarItemRenderer не отображает фигуры и не контролирует линии. Вы должны расширить рендерер по умолчанию и переопределить drawSeries(). XYLineAndShapeRenderer является хорошим примером для обучения; Вы можете увидеть, как это используется в TimeSeriesChartDemo1.

Если это terra incognita , я бы порекомендовал Руководство разработчика JFreeChart .

Отказ от ответственности: Не связан с Object Refinery Limited; Я довольный клиент и очень незначительный вкладчик.

1 голос
/ 27 июня 2017

Я нашел довольно странный способ получить очки без линий, соединяющих их.

Я установил Штрих рендеринга в виде тонкой линии, с пунктирной фазой 0 и длиной 1e10:

Stroke dashedStroke = new BasicStroke(
                          0.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND,
                          0.0f, new float[] {0.0f, 1e10f}, 1.0f );
renderer.setSeriesStroke(0, dashedStroke);
1 голос
/ 05 мая 2011

Это отличное обсуждение, если вы хотите, чтобы функция подобрала цвет, назначенный пользователем для серии

добавить ...

Color c =(Color)this.lookupSeriesPaint(seriesIndex);
g2.setColor(c);

до ...

g.draw(e1);

есть другие функции ... используйте завершение кода, чтобы увидеть, какие еще функции доступны для рендеринга серий с именем, начинающимся с lookupSeries........(int seriesindex)

...