JFreeChart柱状图中单组柱子用不同颜色来显示的实现方法是自定义一个Renderer来继承BarRenderer类,然后重载getItemPaint(int i,int j)方法。
实现效果如下:
实现代码如下:
public class CustomRenderer extends org.jfree.chart.renderer.category.BarRenderer {
/**
*
*/
private static final long serialVersionUID = 784630226449158436L;
private Paint[] colors;
//初始化柱子颜色
private String[] colorValues = { "#AFD8F8", "#F6BD0F", "#8BBA00", "#FF8E46", "#008E8E", "#D64646" };
public CustomRenderer() {
colors = new Paint[colorValues.length];
for (int i = 0; i < colorValues.length; i++) {
colors[i] = Color.decode(colorValues[i]);
}
}
//每根柱子以初始化的颜色不断轮循
public Paint getItemPaint(int i, int j) {
return colors[j % colors.length];
}
}
public class CreateJFreeChartBarColor {
/**
* 创建JFreeChart Bar Chart(柱状图)
*/
public static void main(String[] args) {
// 步骤1:创建CategoryDataset对象(准备数据)
CategoryDataset dataset = createDataset();
// 步骤2:根据Dataset 生成JFreeChart对象,以及做相应的设置
JFreeChart freeChart = createChart(dataset);
// 步骤3:将JFreeChart对象输出到文件,Servlet输出流等
saveAsFile(freeChart, "E:\\bar.png", 500, 400);
}
// 保存为文件
public static void saveAsFile(JFreeChart chart, String outputPath, int weight, int height) {
FileOutputStream out = null;
try {
File outFile = new File(outputPath);
if (!outFile.getParentFile().exists()) {
outFile.getParentFile().mkdirs();
}
out = new FileOutputStream(outputPath);
// 保存为PNG文件
ChartUtilities.writeChartAsPNG(out, chart, weight, height);
out.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (out != null) {
try {
out.close();
} catch (IOException e) {
// do nothing
}
}
}
}
// 根据CategoryDataset生成JFreeChart对象
public static JFreeChart createChart(CategoryDataset categoryDataset) {
JFreeChart jfreechart = ChartFactory.createBarChart("学生统计图", // 标题
"学生姓名", // categoryAxisLabel (category轴,横轴,X轴的标签)
"年龄", // valueAxisLabel(value轴,纵轴,Y轴的标签)
categoryDataset, // dataset
PlotOrientation.VERTICAL, false, // legend
false, // tooltips
false); // URLs
Font labelFont = new Font("SansSerif", Font.TRUETYPE_FONT, 12);
jfreechart.setTextAntiAlias(false);
jfreechart.setBackgroundPaint(Color.white);
CategoryPlot plot = jfreechart.getCategoryPlot();// 获得图表区域对象
// 设置横虚线可见
plot.setRangeGridlinesVisible(true);
// 虚线色彩
plot.setRangeGridlinePaint(Color.gray);
// 数据轴精度
NumberAxis vn = (NumberAxis) plot.getRangeAxis();
// vn.setAutoRangeIncludesZero(true);
DecimalFormat df = new DecimalFormat("#0.0");
vn.setNumberFormatOverride(df); // 数据轴数据标签的显示格式
// x轴设置
CategoryAxis domainAxis = plot.getDomainAxis();
domainAxis.setLabelFont(labelFont);// 轴标题
domainAxis.setTickLabelFont(labelFont);// 轴数值
// Lable(Math.PI/3.0)度倾斜
// domainAxis.setCategoryLabelPositions(CategoryLabelPositions
// .createUpRotationLabelPositions(Math.PI / 3.0));
domainAxis.setMaximumCategoryLabelWidthRatio(6.00f);// 横轴上的 Lable
// 是否完整显示
// 设置距离图片左端距离
domainAxis.setLowerMargin(0.1);
// 设置距离图片右端距离
domainAxis.setUpperMargin(0.1);
// 设置 columnKey 是否间隔显示
// domainAxis.setSkipCategoryLabelsToFit(true);
plot.setDomainAxis(domainAxis);
// 设置柱图背景色(注意,系统取色的时候要使用16位的模式来查看颜色编码,这样比较准确)
plot.setBackgroundPaint(new Color(255, 255, 204));
// y轴设置
ValueAxis rangeAxis = plot.getRangeAxis();
rangeAxis.setLabelFont(labelFont);
rangeAxis.setTickLabelFont(labelFont);
// 设置最高的一个 Item 与图片顶端的距离
rangeAxis.setUpperMargin(0.15);
// 设置最低的一个 Item 与图片底端的距离
rangeAxis.setLowerMargin(0.15);
plot.setRangeAxis(rangeAxis);
// 解决中文乱码问题(关键)
TextTitle textTitle = jfreechart.getTitle();
textTitle.setFont(new Font("黑体", Font.PLAIN, 20));
domainAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 11));
domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 12));
vn.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 12));
vn.setLabelFont(new Font("黑体", Font.PLAIN, 12));
// jfreechart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12));
// 使用自定义的渲染器
CustomRenderer renderer = new CustomRenderer();
// 设置柱子宽度
renderer.setMaximumBarWidth(0.2);
// 设置柱子高度
renderer.setMinimumBarLength(0.2);
// 设置柱子边框颜色
renderer.setBaseOutlinePaint(Color.BLACK);
// 设置柱子边框可见
renderer.setDrawBarOutline(true);
// 设置每个地区所包含的平行柱的之间距离
renderer.setItemMargin(0.5);
jfreechart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
// 显示每个柱的数值,并修改该数值的字体属性
renderer.setIncludeBaseInRange(true);
renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
renderer.setBaseItemLabelsVisible(true);
plot.setRenderer(renderer);
// 设置柱的透明度
plot.setForegroundAlpha(1.0f);
// 背景色 透明度
plot.setBackgroundAlpha(0.5f);
return jfreechart;
}
// 创建CategoryDataset对象
public static CategoryDataset createDataset() {
double[][] data = new double[][] { { 25, 24, 40, 12, 33, 33 } };
String[] rowKeys = { "" };
String[] columnKeys = { "张三", "李四", "王五", "马六", "陈七", "赵八" };
CategoryDataset dataset = DatasetUtilities.createCategoryDataset(rowKeys, columnKeys, data);
return dataset;
}
}
分享到:
相关推荐
JFreeChart让单组柱子显示不同的颜色的办法
JFreeChart 饼状图 柱状图 柱状图 堆积柱状图 折线图 这个是我特地开发的一个用JFreeChart开发的用来画图的项目,已经开发成形了各种项目的各种需求的项目,并且自己可以拓展,根据需求修改代码,完成项目的需要。 ...
jfreechart 堆栈柱状图跟折线图结合拼接 jar包请戳http://download.csdn.net/detail/a156435646/7424707
public JFreeChart createChart(String Ytitle, String title, CategoryDataset lineData, CategoryDataset barData) { //参考附件 return chart; } //struts 部分 <!--begin 维优特例 --> ...
生成3D单组柱状图或多组柱状图,单组柱状图没组颜色不一样。这个东西写了挺久,代码没有好好整理,仅供参考。
java制作jfreechart柱状图 饼状图 折线图 随机数字做的数据源 下载导入即可运行 内含jar包
JFreeChart柱状图的详细说明,教你怎么样自定义图形报表 应用到自己的项目上
利用jfreechart绘制的横向立体柱状图,横坐标是数值,纵坐标是数据分类,需要提前引入jfreechart包文件到工程里,才不会报错
今天在网上查了一下,没有发现 Jfreechart柱状图排序的实现方法,也还没来得及研究Jfreechart的代码和文档,所以就自己实现了一下。可能jfreechart自身有这个功能,可是发现以前的这个功能无效了,不知道用什么新...
java+jfreechart+struts 生成柱状图 java jfreechart 柱状图 java jfreechart 柱状图 谁需要完整项目可以去http://download.csdn.net/source/2665347
jfreechart生成的柱状图形。包含了几个整理好的例子。
JFreeChart创建柱状图,之前网上很多都是创建柱状图的,静态的。数据更新之后柱状图随之改变,代码实现详见附件代码。所需要的jar包是jfreechart-1.0.13.jar,gnujaxp.jar,jcommon-1.0.16.jar
JFreeChart设置柱状图的宽度,当一个元素时不让显示那么宽。
从网上搜罗的一些JFreeChart柱状图资料,包括一个CHM手册
源文件 博文链接:https://lansky07.iteye.com/blog/227571
java 调用jfreechart 实现柱状图、曲线图、饼图,非常简单灵活!超好看!
NULL 博文链接:https://mmk12333.iteye.com/blog/1745642
jfreechart 图形折线,饼图,柱状图等各种图形
java里用JFreeChart画柱状图、折线图、雷达图,三个封装好的方法,可以直接调用。
JFreeChart生成3D饼状图及柱状图,可把图片生成在指定文件目录下