JFreeChart
一、JFreeChart
可以生成饼图、柱状图的java工具包
星朝博客:jFreeChart利用CategoryDatase,ChartFactory.createBarChart生成的柱状图
jfreechart官网:https://www.jfree.org/jfreechart/
官网的Samples板块有示例jar包,里面包含了示例和JFreeChart的基础包,下载依赖之后可以直接使用,也可以去github下载zip
二、示例
官网的示例
public class BarDemo5
extends ApplicationFrame
{
public BarDemo5(String title)
{
super(title);
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(1.0D, "Row 1", "Column 1");
dataset.addValue(5.0D, "Row 1", "Column 2");
dataset.addValue(3.0D, "Row 1", "Column 3");
dataset.addValue(2.0D, "Row 2", "Column 1");
dataset.addValue(3.0D, "Row 2", "Column 2");
dataset.addValue(2.0D, "Row 2", "Column 3");
JFreeChart chart = ChartFactory.createBarChart("Bar Demo 5", "Category", "Value", dataset, PlotOrientation.VERTICAL, true, true, false);
chart.setBackgroundPaint(Color.WHITE);
CategoryPlot plot = (CategoryPlot)chart.getPlot();
plot.setBackgroundPaint(Color.LIGHT_GRAY);
plot.setRangeGridlinePaint(Color.WHITE);
BarRenderer renderer = (BarRenderer)plot.getRenderer();
renderer.setSeriesPaint(0, Color.gray);
renderer.setSeriesPaint(1, Color.orange);
renderer.setDrawBarOutline(false);
renderer.setItemMargin(0.0D);
CategoryAxis categoryAxis = plot.getDomainAxis();
categoryAxis.setCategoryMargin(0.0D);
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new Dimension(500, 270));
setContentPane(chartPanel);
}
public static void main(String[] args)
{
BarDemo5 demo = new BarDemo5("Bar Demo 5");
demo.pack();
UIUtils.centerFrameOnScreen(demo);
demo.setVisible(true);
}
}
/**
* 创建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, "D:\\资料\\bar.png", 500, 400);
}
// 创建CategoryDataset对象
public static CategoryDataset createDataset() {
String []rowKeys = {"One", "Two", "Three"};
String []colKeys = {"1987", "1997", "2007"};
double [][] data = {
{100, 20, 50},
{20, 10.5, 40},
{40, 30.0008, 38.24},
};
//也可以使用以下代码
DefaultCategoryDataset categoryDataset = new DefaultCategoryDataset();
categoryDataset.addValue(688, "小a", "sum");
categoryDataset.addValue(600, "小b", "sum");
categoryDataset.addValue(95, "小a", "avg");
categoryDataset.addValue(80, "小b", "avg");
// return DatasetUtilities.createCategoryDataset(rowKeys, colKeys, data);
return categoryDataset;
}
//根据CategoryDataset生成JFreeChart对象
public static JFreeChart createChart(CategoryDataset categoryDataset) {
JFreeChart jfreechart = ChartFactory.createBarChart("测试表", //标题
"ss", //categoryAxisLabel (category轴,横轴,X轴的标签)
"aa", //valueAxisLabel(value轴,纵轴,Y轴的标签)
categoryDataset, // dataset
PlotOrientation.VERTICAL,
true, // legend
false, // tooltips
false); // URLs
Font font = new Font("新宋体", Font.BOLD, 15);
//设置整个图片的标题字体
jfreechart.getTitle().setFont(font);
jfreechart.getLegend().setItemFont(font);
//以下的设置可以由用户定制,也可以省略
CategoryPlot plot = (CategoryPlot) jfreechart.getPlot();
//背景色 透明度
plot.setBackgroundAlpha(1f);
//前景色 透明度
plot.setForegroundAlpha(1f);
//其它设置可以参考 CategoryPlot
return jfreechart;
}
//保存为文件
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);
//保存为JPEG文件
//ChartUtilities.writeChartAsJPEG(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
}
}
}
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战