```
public class DrawPhoto3dTime {
    static SimpleDateFormat f = new SimpleDateFormat("yyyyMMdd");
    static {
        StandardChartTheme standardChartTheme  = new StandardChartTheme("EN");
        standardChartTheme.setExtraLargeFont(new Font("宋体",Font.BOLD,15));
        standardChartTheme.setRegularFont(new Font("宋体",Font.PLAIN,12));
        standardChartTheme.setLargeFont(new Font("宋体",Font.BOLD,12));
        ChartFactory.setChartTheme(standardChartTheme);




    }

    public static void main(String[] args) throws Exception {



        byte[] bytes2 = drawTimePhoto();


        String path2 = "d:\\zx.png";

        FileStreamCovertUtils.bytesToFile(bytes2,path2);





    }


    /**
     * 生成折线图
     * @param
     * @return
     */
    private static byte[] drawTimePhoto() throws Exception{






        // 创建数据
        TimeSeriesCollection dataset = new TimeSeriesCollection();
        TimeSeriesCollection dataset1 = getTimeSeriesCollection1();
        TimeSeriesCollection dataset2 = getTimeSeriesCollection2();

        dataset.addSeries(getTimeSeries1());
        dataset.addSeries(getTimeSeries2());




        // 创建JFreeChart对象
        JFreeChart chart = ChartFactory.createTimeSeriesChart("报名统计" ,"x轴", "人数/人次", dataset);


        chart.setBackgroundPaint(Color.LIGHT_GRAY);// 设置背景色

        //获取绘图区对象
        XYPlot plot = chart.getXYPlot();
        plot.setBackgroundPaint(Color.LIGHT_GRAY); // 设置绘图区背景色
        plot.setRangeGridlinePaint(Color.WHITE); // 设置水平方向背景线颜色
        plot.setRangeGridlinesVisible(true);// 设置是否显示水平方向背景线,默认值为true
        plot.setDomainGridlinePaint(Color.WHITE); // 设置垂直方向背景线颜色
        plot.setDomainGridlinesVisible(false); // 设置是否显示垂直方向背景线,默认值为false




        Font f1 = new Font("宋体",Font.PLAIN,12);

        XYLineAndShapeRenderer r = (XYLineAndShapeRenderer) plot.getRenderer();
        r.setDefaultShapesVisible(true);


        DateAxis domainAxis = new DateAxis() {
            //@see https://www.jfree.org/forum/viewtopic.php?t=25189
            @Override
            protected ArrayList refreshTicksHorizontal(Graphics2D g2, Rectangle2D dataArea, RectangleEdge edge) {
                ArrayList<Tick> ticks = (ArrayList) super.refreshTicksHorizontal(g2, dataArea, edge);
                ArrayList ret = new ArrayList();
                for (Tick tick :  ticks) {
                    if (tick instanceof DateTick) {
                        ret.add(new DateTick(((DateTick) tick).getDate(), tick.getText(),
                                tick.getTextAnchor(), tick.getRotationAnchor(), -45));
                    } else {
                        ret.add(tick);
                    }
                }
                return ret;
            }
        };

        //plot.setDataset(1, dataset2);

        AttributedString as = new AttributedString("日期");
        domainAxis.setAttributedLabel(as);
        domainAxis.setDateFormatOverride(f);
        domainAxis.setTickLabelsVisible(true);
        domainAxis.setVerticalTickLabels(true);



       // plot.setDomainAxis(domainAxis);



        //转成图片流
        byte[] bytes = jFreeChartToBytes(chart,500,350);
        return bytes;
    }



    /**
     * jFreeChart -> byte[]
     * @param chart
     * @param width
     * @param height
     * @return
     */
    private static byte[] jFreeChartToBytes(JFreeChart chart, int width, int height) {
        ByteArrayOutputStream bas = new ByteArrayOutputStream();
        try {
            ChartUtils.writeChartAsPNG(bas,chart,width,height);

            byte[] bytes = bas.toByteArray();
            bas.flush();
            bas.close();
            return bytes;

        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }


    public static TimeSeries getTimeSeries1(){
        try {
            SimpleDateFormat f = new SimpleDateFormat("yyyyMMdd");
            TimeSeries timeSeries2 = new TimeSeries("人数");
            // xySeries2.add(20231101,20);
            timeSeries2.add(new Day(f.parse("20231101")),20);
            timeSeries2.add(new Day(f.parse("20231103")),2);
            timeSeries2.add(new Day(f.parse("20231106")),30);
            return timeSeries2;
        }catch (Exception e){
            e.printStackTrace();
        }

        return null;
    }

    public static TimeSeriesCollection getTimeSeriesCollection1(){
        TimeSeriesCollection dataset1 = new TimeSeriesCollection();
        dataset1.addSeries(getTimeSeries1());
        return dataset1;
    }

    public static TimeSeries getTimeSeries2(){
        try {
            SimpleDateFormat f = new SimpleDateFormat("yyyyMMdd");
            TimeSeries timeSeries2 = new TimeSeries("人次");
            // xySeries2.add(20231101,20);
            timeSeries2.add(new Day(f.parse("20231101")),40);
            timeSeries2.add(new Day(f.parse("20231103")),2);
            timeSeries2.add(new Day(f.parse("20231106")),60);
            return timeSeries2;
        }catch (Exception e){
            e.printStackTrace();
        }

        return null;
    }

    public static TimeSeriesCollection getTimeSeriesCollection2(){
        TimeSeriesCollection dataset2 = new TimeSeriesCollection();
        dataset2.addSeries(getTimeSeries2());
        return dataset2;
    }
```