JfreeChart自定义票证标签 [英] JfreeChart customize ticket labels
本文介绍了JfreeChart自定义票证标签的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在使用JFreechart在使用 JasperReports
生成的报告中绘制图表(实际上我正在使用是您问题的解决方案。您需要为每个值提供一个带有文本的新轴
String [] grade = new String [6];
grade [0] =String0;
grade [1] =String1;
grade [2] =String2;
grade [3] =String3;
grade [4] =String4;
grade [5] =;
SymbolAxis rangeAxis = new SymbolAxis(,grade);
rangeAxis.setTickUnit(new NumberTickUnit(1));
rangeAxis.setRange(0,5);
plot.setRangeAxis(rangeAxis);
这里是完整的代码
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Paint;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberTickUnit;
import org.jfree.chart.axis.SymbolAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;
公共类BarChartDemo7扩展ApplicationFrame {
静态类CustomRenderer扩展BarRenderer {
private final Paint [] colors1;
private final Paint [] colors2;
public CustomRenderer(Paint [] colors1,Paint [] colors2){
this.colors1 = colors1;
this.colors2 = colors2;
}
@Override
public Paint getItemPaint(int series,int category){
if(category == 4)
return this.colors2 [系列%this.colors1.length];
else
返回this.colors1 [series%this.colors1.length];
}
}
公开BarChartDemo7(字符串标题){
super(title);
CategoryDataset dataSet = createDataset();
JFreeChart chart = createChart(dataSet);
ChartPanel面板=新ChartPanel(图表);
panel.setPreferredSize(new Dimension(800,800));
setContentPane(panel);
}
private static CategoryDataset createDataset(){
//行键...
final String series1 =ABC;
final String series2 =XYZ;
//列密钥...
final String category1 =A;
final String category2 =B;
final String category3 =C;
final String category4 =D;
final String category5 =E;
final String category6 =F;
//创建数据集...
final DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(0,series1,category1);
dataset.addValue(1,series1,category2);
dataset.addValue(4,series1,category3);
dataset.addValue(3,series1,category4);
dataset.addValue(2,series1,category5);
dataset.addValue(4,series1,category6);
dataset.addValue(4,series2,category1);
dataset.addValue(0,series2,category2);
dataset.addValue(0,series2,category3);
dataset.addValue(4,series2,category4);
dataset.addValue(3,series2,category1);
dataset.addValue(2,series2,category2);
dataset.addValue(1,series2,category5);
dataset.addValue(4,series2,category4);
返回数据集;
}
私有静态JFreeChart createChart(CategoryDataset数据集){
//创建图表...
JFreeChart chart = ChartFactory.createBarChart(
ABC,
,
,
数据集,
PlotOrientation.HORIZONTAL,
true,
true,
false
);
chart.setBackgroundPaint(Color.white);
CategoryPlot plot =(CategoryPlot)chart.getPlot();
plot.setBackgroundPaint(Color.WHITE);
plot.setDomainGridlinePaint(Color.BLACK);
plot.setRangeGridlinePaint(Color.BLACK);
String [] grade = new String [6];
grade [0] =String0;
grade [1] =String1;
grade [2] =String2;
grade [3] =String3;
grade [4] =String4;
grade [5] =;
SymbolAxis rangeAxis = new SymbolAxis(,grade);
rangeAxis.setTickUnit(new NumberTickUnit(1));
rangeAxis.setRange(0,5);
plot.setRangeAxis(rangeAxis);
颜色[] color1 =新颜色[] {Color.red,Color.green,Color.blue};
Color [] color2 = new Color [] {Color.gray,Color.gray.darker()};
plot.setRenderer(new CustomRenderer(color1,color2));
返回图表;
}
public static void main(String [] args){
BarChartDemo7 demo = new BarChartDemo7(ABC);
demo.pack();
RefineryUtilities.centerFrameOnScreen(demo);
demo.setVisible(true);
}
}
I'm using JFreechart to plot a graph inside a report generated with JasperReports
(actually I'm using DynamicReports which uses JasperReports).
I'm plotting a barchart
and I want to have custom strings on the labels on the axis. A picture will explain everything better.
Now I've got this:
I want to obtain this:
Some suggestions?
解决方案
Here is the solution to your problem. You need to provide a new Axis with text for each value
String[] grade = new String[6];
grade[0] = "String0";
grade[1] = "String1";
grade[2] = "String2";
grade[3] = "String3";
grade[4] = "String4";
grade[5] = "";
SymbolAxis rangeAxis = new SymbolAxis("", grade);
rangeAxis.setTickUnit(new NumberTickUnit(1));
rangeAxis.setRange(0,5);
plot.setRangeAxis(rangeAxis);
here is the code in full
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Paint;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberTickUnit;
import org.jfree.chart.axis.SymbolAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;
public class BarChartDemo7 extends ApplicationFrame {
static class CustomRenderer extends BarRenderer {
private final Paint[] colors1;
private final Paint[] colors2;
public CustomRenderer(Paint[] colors1,Paint[] colors2) {
this.colors1 = colors1;
this.colors2 = colors2;
}
@Override
public Paint getItemPaint(int series, int category) {
if (category == 4)
return this.colors2[series % this.colors1.length];
else
return this.colors1[series % this.colors1.length];
}
}
public BarChartDemo7(String title) {
super(title);
CategoryDataset dataSet=createDataset();
JFreeChart chart=createChart(dataSet);
ChartPanel panel=new ChartPanel(chart);
panel.setPreferredSize(new Dimension(800,800));
setContentPane(panel);
}
private static CategoryDataset createDataset() {
// row keys...
final String series1 = "ABC";
final String series2 = "XYZ";
// column keys...
final String category1 = "A";
final String category2 = "B";
final String category3 = "C";
final String category4 = "D";
final String category5 = "E";
final String category6 = "F";
// create the dataset...
final DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(0, series1, category1);
dataset.addValue(1, series1, category2);
dataset.addValue(4, series1, category3);
dataset.addValue(3, series1, category4);
dataset.addValue(2, series1, category5);
dataset.addValue(4, series1, category6);
dataset.addValue(4, series2, category1);
dataset.addValue(0, series2, category2);
dataset.addValue(0, series2, category3);
dataset.addValue(4, series2, category4);
dataset.addValue(3, series2, category1);
dataset.addValue(2, series2, category2);
dataset.addValue(1, series2, category5);
dataset.addValue(4, series2, category4);
return dataset;
}
private static JFreeChart createChart(CategoryDataset dataset) {
// create the chart...
JFreeChart chart = ChartFactory.createBarChart(
"ABC",
"",
"",
dataset,
PlotOrientation.HORIZONTAL,
true,
true,
false
);
chart.setBackgroundPaint(Color.white);
CategoryPlot plot = (CategoryPlot) chart.getPlot();
plot.setBackgroundPaint(Color.WHITE);
plot.setDomainGridlinePaint(Color.BLACK);
plot.setRangeGridlinePaint(Color.BLACK);
String[] grade = new String[6];
grade[0] = "String0";
grade[1] = "String1";
grade[2] = "String2";
grade[3] = "String3";
grade[4] = "String4";
grade[5] = "";
SymbolAxis rangeAxis = new SymbolAxis("", grade);
rangeAxis.setTickUnit(new NumberTickUnit(1));
rangeAxis.setRange(0,5);
plot.setRangeAxis(rangeAxis);
Color[] color1 = new Color[]{Color.red, Color.green,Color.blue};
Color[] color2 = new Color[]{Color.gray,Color.gray.darker()};
plot.setRenderer(new CustomRenderer(color1,color2));
return chart;
}
public static void main(String[] args) {
BarChartDemo7 demo = new BarChartDemo7("ABC");
demo.pack();
RefineryUtilities.centerFrameOnScreen(demo);
demo.setVisible(true);
}
}
这篇关于JfreeChart自定义票证标签的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文