怎么把这个dataframe数据中每个sales_code在不同second_code上的ord数值来分组

img


画一个折线图,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);
  }
}
不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^