jfreechart - изменить образец цветов в легенде - PullRequest
4 голосов
/ 05 сентября 2011

Может кто-нибудь сказать мне, как изменить образцы цвета серии в легенде в jfreechart.Теперь у меня есть небольшая линия цвета серии, например:
Example
Я бы хотел получить квадратный образец этих цветов.Вот пример
Example

Может ли кто-нибудь мне помочь?

Хорошо, я нашел решение.По крайней мере, я так думаю.Конечно, не существует простого способа сделать это.Теперь, вы знаете, метод setShape (квадрат), который поможет, по крайней мере, я его не нашел.

Обычно XY-диаграмма и временная диаграмма имеют легенду «стиль линии» по умолчанию, в отличие, например, от гистограммы (если по умолчанию имеет квадратную легенду).Поэтому мне пришлось удалить текущую легенду и создать новую с квадратными образцами цвета, и эта новая легенда добавилась к моему графику времени.

LegendItemCollection legend = new LegendItemCollection();    
for (int i = 0; i < seriecCount; ++i) {
    chart.getXYPlot().getRenderer().setSeriesPaint(i, colorPalette.get(i));
    LegendItem li = new LegendItem(data.getSeriesName(i), "-", null, null, Plot.DEFAULT_LEGEND_ITEM_BOX, colorPalette.get(i));
    legend.add(li);
}  
chart.getXYPlot().setFixedLegendItems(legend);

Спасибо за внимание.Надеюсь, это кому-нибудь поможет.

Ответы [ 2 ]

3 голосов
/ 16 ноября 2011

Создание собственной легенды, как вы делали выше, является вполне приемлемым способом выполнения действий в JFreeChart.Если вы не хотите этого делать, вы также можете определить свой собственный рендер с помощью переопределенного метода lookupLegendShape ().

thePlot.setRenderer(new XYLineAndShapeRenderer()
      {
         public Shape lookupLegendShape(int series)
         {
            return new Rectangle(15, 15);
         }
      });
0 голосов
/ 22 января 2015

Если вы используете XYBarRenderer Класс XYBarRenderer

(подклассы: ClusteredXYBarRenderer, StackedXYBarRenderer)

Вы можете использовать XYBarRenderer.setLegendBar (java.awt.Shape bar);
См .: Javadoc
чтобы получить хорошие квадраты.

Пример:

JFreeChart chart = ChartFactory.createXYBarChart(/*...*/);

XYPlot plot = (XYPlot) chart.getPlot();

ClusteredXYBarRenderer renderer = new ClusteredXYBarRenderer();
renderer.setLegendBar(new Rectangle(17, 17));

plot.setRenderer(renderer);
...