jfreechart折线图示例

public static void main(String[] args) 
{
    //创建主题样式 ,以下代码用于解决中文乱码问题
    StandardChartTheme standardChartTheme=new StandardChartTheme("CN");  
    //设置标题字体  
    standardChartTheme.setExtraLargeFont(new Font("宋体",Font.BOLD,20));  
    //设置图例的字体  
    standardChartTheme.setRegularFont(new Font("宋体",Font.PLAIN,15));  
    //设置轴向的字体  
    standardChartTheme.setLargeFont(new Font("宋体",Font.PLAIN,15));  
    //应用主题样式  
    ChartFactory.setChartTheme(standardChartTheme);

    //数据源
    DefaultCategoryDataset dataset1 = new DefaultCategoryDataset();
    dataset1.addValue(800, "黄瓜君(数量)", "1月");
    dataset1.addValue(600, "黄瓜君(数量)", "2月");
    dataset1.addValue(200, "黄瓜君(数量)", "3月");

    //百分比数据源
    DefaultCategoryDataset dataset2 = new DefaultCategoryDataset();
    dataset2.addValue(0.2, "黄瓜君(销量)", "1月");
    dataset2.addValue(0.35, "黄瓜君(销量)", "2月");
    dataset2.addValue(0.8, "黄瓜君(销量)", "3月");

    //创建图
    JFreeChart chart = ChartFactory.createLineChart("数量/销量走势图", 
        null,
        null,
        dataset1, 
        PlotOrientation.VERTICAL, 
        true, 
        true, 
        false);

    CategoryPlot plot = chart.getCategoryPlot();

    //设置数据源dataset2
    plot.setDataset(1, dataset2);

    if (dataset1.getColumnCount() > 0 && dataset2.getColumnCount() > 0)
    {
         // 设置Y轴右侧刻度
         plot.setRangeAxis(1, new NumberAxis());

         // 设置数据源dataset2应用Y轴右侧刻度
         plot.mapDatasetToRangeAxis(1, 1);
    }

    //设置画布颜色为白色
    plot.setBackgroundPaint(SystemColor.WHITE); 

    //设置水平方向背景线颜色  
    plot.setRangeGridlinePaint(Color.gray);   

    //设置是否显示水平方向背景线,默认值为true  
    plot.setRangeGridlinesVisible(true);   

    //设置垂直方向背景线颜色  
    plot.setDomainGridlinePaint(Color.gray);   

    //设置是否显示垂直方向背景线,默认值为true  
    plot.setDomainGridlinesVisible(true); 

    plot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD);

    for (int i = 0; i < plot.getDatasetCount(); i++)
    {
        LineAndShapeRenderer lineRender = new LineAndShapeRenderer();
        lineRender.setBaseToolTipGenerator(new StandardCategoryToolTipGenerator());

        BasicStroke brokenLine = new BasicStroke(2f,  //线条粗细  
              BasicStroke.CAP_SQUARE,             //端点风格  
              BasicStroke.JOIN_MITER,             //折点风格  
              8.f,                                //折点处理办法  
              new float[]{8.0f },                 //虚线数组  
              0.0f);
        lineRender.setSeriesStroke(0,brokenLine);

        plot.setRenderer(i, lineRender);

        //展示折线图节点值
        lineRender.setBaseItemLabelsVisible(true);
        lineRender.setBasePositiveItemLabelPosition(
            new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_CENTER));
        lineRender.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
    }

    for (int i = 0; i < plot.getRangeAxisCount(); i++)
    {
        ValueAxis rangeAxis = plot.getRangeAxis(i); 

        // 设置最高的一个 Item 与图片顶端的距离  
        rangeAxis.setUpperMargin(0.15);  

        // 设置最低的一个 Item 与图片底端的距离  
        rangeAxis.setLowerMargin(0.25);  
    }

    ChartFrame chartFrame=new ChartFrame("销量走势图",chart);   

    //以合适的大小展现图形  
    chartFrame.pack();

    //图形是否可见
    chartFrame.setVisible(true);
}

效果图如下:


  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值