
画一个折线图,x轴是所有的second_code,y轴是不同sales_code的ord值.
import java.awt.Color;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.xy.DefaultXYDataset;
import org.jfree.data.xy.XYDataset;
import tech.tablesaw.api.DoubleColumn;
import tech.tablesaw.api.Table;
public class ChartExample {
public static void main(String[] args) throws IOException {
// 读取数据
Table table = Table.read().csv("data.csv");
// 将sales_code和second_code作为键,ord作为值,存储到map中
Map<String, Double> dataMap = new HashMap<>();
List<DoubleColumn> ordColumns = table.columns().select(column -> column.name().startsWith("ord"));
for (DoubleColumn ordColumn : ordColumns) {
String columnName = ordColumn.name();
String[] parts = columnName.split("_");
String salesCode = parts[1];
String secondCode = parts[2];
for (int i = 0; i < table.rowCount(); i++) {
double ord = ordColumn.get(i);
String key = salesCode + "_" + secondCode;
dataMap.put(key, ord);
}
}
// 计算所有second_code
List<String> secondCodes = table.stringColumn("second_code").unique().asList();
// 创建数据集
DefaultXYDataset dataset = new DefaultXYDataset();
List<String> salesCodes = table.stringColumn("sales_code").unique().asList();
for (String salesCode : salesCodes) {
double[][] data = new double[2][secondCodes.size()];
for (int i = 0; i < secondCodes.size(); i++) {
String secondCode = secondCodes.get(i);
String key = salesCode + "_" + secondCode;
double ord = dataMap.getOrDefault(key, 0.0);
data[0][i] = i;
data[1][i] = ord;
}
dataset.addSeries(salesCode, data);
}
// 创建图表
JFreeChart chart =
ChartFactory.createXYLineChart(
"Sales Orders", // title
"Second Code", // x-axis label
"Ord", // y-axis label
dataset, // data
PlotOrientation.VERTICAL,
true, // include legend
true, // tooltips
false // urls
);
// 设置线条颜色
XYPlot plot = (XYPlot) chart.getPlot();
XYLineAndShapeRenderer renderer = (XYLineAndShapeRenderer) plot.getRenderer();
for (int i = 0; i < salesCodes.size(); i++) {
Color color = Color.getHSBColor((float) i / salesCodes.size(), 0.8f, 0.8f);
renderer.setSeriesPaint(i, color);
}
// 保存图表
ChartUtilities.saveChartAsPNG(new File("chart.png"), chart, 800, 600);
}
}
不知道你这个问题是否已经解决, 如果还没有解决的话:
如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^