JFreeChart生成折线图(生成图片本地保存,有解决中文乱码的通用方法)
时间: 2024-01-13 09:02:33 浏览: 152
要使用JFreeChart生成折线图并保存为图片,可以按照以下步骤操作:
1. 导入JFreeChart和相关依赖库。
2. 创建一个数据集对象,并向其中添加数据。
3. 创建一个折线图对象,并设置标题、横轴、纵轴等属性。
4. 向折线图对象中添加数据集。
5. 创建一个图表面板对象,将折线图对象添加到其中。
6. 创建一个输出流对象,将图表面板对象输出到输出流中。
7. 将输出流中的数据保存为图片。
下面是一个示例代码,可以生成折线图并保存为本地图片,同时解决中文乱码问题:
```java
import java.awt.Font;
import java.io.FileOutputStream;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.RectangleInsets;
public class LineChart {
public static void main(String[] args) throws Exception {
// 创建数据集
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(100, "Series 1", "Category 1");
dataset.addValue(200, "Series 1", "Category 2");
dataset.addValue(150, "Series 1", "Category 3");
dataset.addValue(300, "Series 1", "Category 4");
dataset.addValue(200, "Series 1", "Category 5");
dataset.addValue(250, "Series 1", "Category 6");
dataset.addValue(180, "Series 1", "Category 7");
// 创建折线图
JFreeChart chart = ChartFactory.createLineChart(
"Line Chart", // 图表标题
"Category", // 横轴标签
"Value", // 纵轴标签
dataset, // 数据集
PlotOrientation.VERTICAL, // 图表方向
true, // 是否显示图例
true, // 是否显示工具提示
false // 是否显示url
);
// 设置标题字体
Font titleFont = new Font("宋体", Font.BOLD, 18);
chart.getTitle().setFont(titleFont);
// 设置图例字体
Font legendFont = new Font("宋体", Font.PLAIN, 12);
chart.getLegend().setItemFont(legendFont);
// 设置图表整体背景色
chart.setBackgroundPaint(java.awt.Color.white);
// 设置绘图区域对象
CategoryPlot plot = (CategoryPlot) chart.getPlot();
// 设置绘图区域背景色
plot.setBackgroundPaint(java.awt.Color.lightGray);
plot.setDomainGridlinePaint(java.awt.Color.white);
plot.setRangeGridlinePaint(java.awt.Color.white);
// 设置横轴
CategoryAxis domainAxis = plot.getDomainAxis();
domainAxis.setLabelFont(legendFont);
domainAxis.setTickLabelFont(legendFont);
domainAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45); // 横轴倾斜45度
// 设置纵轴
NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
rangeAxis.setLabelFont(legendFont);
rangeAxis.setTickLabelFont(legendFont);
rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
// 设置数据点标签
LineAndShapeRenderer renderer = (LineAndShapeRenderer) plot.getRenderer();
renderer.setBaseItemLabelsVisible(true);
renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
renderer.setBaseShapesVisible(true);
renderer.setDrawOutlines(true);
renderer.setUseFillPaint(true);
renderer.setBaseFillPaint(java.awt.Color.white);
// 设置图表内边距
plot.setInsets(new RectangleInsets(10, 10, 10, 10));
// 生成图表面板对象
org.jfree.chart.ChartPanel chartPanel = new org.jfree.chart.ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
// 将图表面板输出到输出流中
FileOutputStream fos = new FileOutputStream("lineChart.png");
ChartUtilities.writeChartAsPNG(fos, chartPanel.getChart(), 500, 270);
// 关闭输出流
fos.close();
}
}
```
注意,上述代码中使用的字体是微软雅黑,如果你的系统中没有该字体,可以将其替换为其他可用字体。
阅读全文