Jfreechart生成折线图和柱状图混合图

<%@ page language="java" contentType="text/html; charset=GBK"
    pageEncoding="GBK"%>
  <%@ page import="java.awt.Color"%>
<%@ page import="java.awt.Dimension"%>
<%@ page import="javax.swing.JPanel"%> 
<%@ page import="org.jfree.data.general.DefaultPieDataset"%>
<%@ page import="org.jfree.chart.JFreeChart"%>
<%@ page import="org.jfree.chart.plot.PiePlot"%>
<%@ page import="org.jfree.chart.ChartRenderingInfo"%>
<%@ page import="org.jfree.chart.servlet.ServletUtilities"%>
<%@ page import="org.jfree.chart.urls.StandardPieURLGenerator"%>
<%@ page import="org.jfree.chart.entity.StandardEntityCollection"%>
<%@ page import="org.jfree.chart.encoders.SunPNGEncoderAdapter"%>
<%@ page import="org.jfree.chart.renderer.category.BarRenderer"%>
 <%@ page import="org.jfree.chart.renderer.category.StackedBarRenderer"%>
  <%@ page import="org.jfree.data.category.CategoryDataset"%>
  <%@ page import="org.jfree.chart.ChartFactory"%>
    <%@ page import="java.awt.Color"%>
     <%@ page import="java.awt.Font"%>
   
<%@ page import="java.io.File"%>
<%@ page import="java.io.FileOutputStream"%>
<%@ page import="java.text.DecimalFormat"%>
<%@ page import="java.text.NumberFormat"%>
<%@ page import="org.jfree.chart.ChartUtilities"%>
<%@ page import="org.jfree.chart.axis.CategoryAxis"%>
<%@ page import="org.jfree.chart.axis.CategoryLabelPositions"%>
<%@ page import="org.jfree.chart.axis.NumberAxis"%>
<%@ page import="org.jfree.chart.axis.ValueAxis"%>
<%@ page import="org.jfree.chart.labels.StandardCategoryItemLabelGenerator"%>
<%@ page import="org.jfree.chart.labels.StandardPieSectionLabelGenerator"%>

<%@ page import="org.jfree.chart.title.TextTitle"%>

<%@ page import="org.jfree.data.category.CategoryDataset"%>

<%@ page import="org.jfree.data.general.DatasetUtilities"%>
<%@ page import="org.jfree.chart.plot.CategoryPlot"%>
<%@ page import="org.jfree.chart.plot.PlotOrientation"%>


<%@ page import="org.jfree.ui.TextAnchor"%>
<%@ page import="org.jfree.chart.labels.ItemLabelAnchor"%>
<%@ page import="org.jfree.chart.labels.ItemLabelPosition"%>

<%@ page import="org.jfree.chart.labels.StandardCategoryToolTipGenerator"%> 
 <%@ page import="org.jfree.chart.renderer.category.LineAndShapeRenderer"%> 
<%@ page import="org.jfree.chart.title.CompositeTitle"%> 
<%@ page import="org.jfree.chart.title.LegendTitle"%> 
<%@ page import="org.jfree.data.category.CategoryDataset"%> 
<%@ page import="org.jfree.data.category.DefaultCategoryDataset"%> 

   
<%!

private  static  CategoryDataset  createDataset1(String[] stationName,double[] troubleNumber) 

        DefaultCategoryDataset  defaultcategorydataset  =  new  DefaultCategoryDataset(); 
        for(int i=0;i<stationName.length;i++)
        {
          defaultcategorydataset.addValue(troubleNumber[i],stationName[i], stationName[i]); 
        }       
       
        return  defaultcategorydataset; 

%>

<%!
private  static  CategoryDataset  createDataset2(String[] stationName,double troubleAverageNumber) 

        DefaultCategoryDataset  defaultcategorydataset  =  new  DefaultCategoryDataset(); 
        for(int i=0;i<stationName.length;i++)
        {
          defaultcategorydataset.addValue(troubleAverageNumber,"平均故障率", stationName[i]); 
        }       
       
        return  defaultcategorydataset; 

%>
  <%!
  private  static  JFreeChart  createChart(String chartTitle,String Xname, String Yname, CategoryDataset dataset1, CategoryDataset dataset2) 
  { 
   
   JFreeChart  chart  =  ChartFactory.createBarChart(chartTitle, Xname, Yname,  dataset1,  PlotOrientation.VERTICAL,  true,  false,  false); 
   chart.setBackgroundPaint(Color.white); 
  
   CategoryPlot categoryplot = chart.getCategoryPlot();//获得图表对象
  
   // 图例字体清晰
    chart.getLegend().setItemFont(new Font("宋体", Font.BOLD, 14));
    chart.setTextAntiAlias(false);
   // 2 .2 主标题对象 主标题对象是 TextTitle 类型
    chart.setTitle(new TextTitle(chartTitle, new Font("隶书", Font.BOLD,25)));
    // 2 .2.1:设置中文
    // x,y轴坐标字体
    Font labelFont = new Font("宋体", Font.TRUETYPE_FONT, 12);
  
   //Y轴数据设置
    NumberAxis vn = (NumberAxis) categoryplot.getRangeAxis();
    // 设置最大值是1
   // vn.setUpperBound(1);
    // 设置数据轴坐标从0开始
   // vn.setAutoRangeIncludesZero(true);
    // 数据显示格式是百分比
    DecimalFormat df = new DecimalFormat("0.0%");
    vn.setNumberFormatOverride(df); // 数据轴数据标签的显示格式
  
        //X轴坐标的显示中文   domainAxis是X轴
       CategoryAxis domainAxis = categoryplot.getDomainAxis();
     domainAxis.setLabelFont(labelFont);// 轴标题
     domainAxis.setTickLabelFont(labelFont);// 轴数值   
    
     // y轴设置
  ValueAxis rangeAxis = categoryplot.getRangeAxis();
  rangeAxis.setLabelFont(labelFont); //轴标题
     rangeAxis.setTickLabelFont(labelFont);//轴数值
     
          categoryplot.setBackgroundPaint(new  Color(238,  238,  255)); 
         // categoryplot.setDomainAxisLocation(AxisLocation.BOTTOM_OR_RIGHT); 
         //创建折线图
         CategoryDataset  categorydataset  =  dataset2; 
          //0显示是柱状图,1显示折线图
         categoryplot.setDataset(1,categorydataset); 
          //显示折线图,0,0坐标轴都在左侧
          categoryplot.mapDatasetToRangeAxis(0, 0); 
         
          //设置横轴的label为45度
          CategoryAxis  categoryaxis  =  categoryplot.getDomainAxis(); 
          categoryaxis.setCategoryLabelPositions(CategoryLabelPositions.DOWN_45); 
         
          //在右边显示折线图的坐标和主题
         // NumberAxis  numberaxis  =  new  NumberAxis("平均值"); 
         /// numberaxis.setLabelFont(labelFont);
         // categoryplot.setRangeAxis(1,  numberaxis); 
         
        
          //画折线图
          LineAndShapeRenderer  lineandshaperenderer  =  new  LineAndShapeRenderer(); 
          lineandshaperenderer.setToolTipGenerator(new  StandardCategoryToolTipGenerator()); 
          categoryplot.setRenderer(1,  lineandshaperenderer);
       
          // 图例字体清晰
  
          //画柱状图
          StackedBarRenderer renderer = new StackedBarRenderer();
       
          renderer.setItemLabelsVisible(true);
 
         
          // 设置柱子宽度
     renderer.setMaximumBarWidth(0.03);
     // 设置柱子高度
     renderer.setMinimumBarLength(0.1);
     // 设置柱的边框颜色
     renderer.setBaseOutlinePaint(Color.BLACK);
     // 设置柱的边框可见
     renderer.setDrawBarOutline(true);
     // // 设置柱的颜色(可设定也可默认)
     renderer.setSeriesPaint(0, new Color(204, 255, 204));
     renderer.setSeriesPaint(1, new Color(255, 204, 153));
     // 设置每个地区所包含的平行柱的之间距离
     renderer.setItemMargin(0.4);
     //显示数据
     renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());
     //显示数据的格式是百分比
     renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator("{2}",NumberFormat.getPercentInstance()));
    renderer.setItemLabelFont(new Font("黑体",Font.BOLD,12));
    renderer.setItemLabelsVisible(true); 
    //数据显示格式是百分比
    ItemLabelPosition itemLabelPositionFallback=new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12,TextAnchor.BASELINE_LEFT,TextAnchor.HALF_ASCENT_LEFT,-1.57D);
    //显示小于显示范围的数据
     renderer.setPositiveItemLabelPositionFallback(itemLabelPositionFallback);
     renderer.setNegativeItemLabelPositionFallback(itemLabelPositionFallback);
     //显示柱状图
          categoryplot.setRenderer(0,renderer);      
         
          return  chart; 
  } 
 
  %>
       

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JFreeChart是一个Java类库,用于创建各种类型的表,包括折线图柱状图,饼等等。在JFreeChart中,创建动态折线图可以通过以下步骤完成: 1. 导入JFreeChart类库。 2. 创建一个XYSeries对象,用于存储折线图的数据。 3. 创建一个XYSeriesCollection对象,用于管理XYSeries对象并将其添加到折线图中。 4. 创建一个ChartPanel对象,用于显示折线图。 5. 创建一个JFreeChart对象,用于设置折线图的标题、坐标轴等属性。 6. 使用ScheduledExecutorService定时更新折线图的数据。 下面是一个示例代码,演示如何创建一个简单的动态折线图: ``` import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.util.Random; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import javax.swing.JFrame; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.NumberAxis; import org.jfree.chart.plot.XYPlot; import org.jfree.data.time.Millisecond; import org.jfree.data.time.TimeSeries; import org.jfree.data.time.TimeSeriesCollection; public class DynamicLineChart extends JFrame { private static final long serialVersionUID = 1L; private TimeSeries series; private ScheduledExecutorService executor; public DynamicLineChart() { super("Dynamic Line Chart"); setDefaultCloseOperation(EXIT_ON_CLOSE); // create dataset TimeSeriesCollection dataset = new TimeSeriesCollection(); series = new TimeSeries("Random Data"); dataset.addSeries(series); // create chart JFreeChart chart = ChartFactory.createTimeSeriesChart( "Dynamic Line Chart", "Time", "Value", dataset, true, true, false ); // customize chart XYPlot plot = chart.getXYPlot(); plot.setBackgroundPaint(Color.WHITE); plot.setDomainGridlinePaint(Color.BLACK); plot.setRangeGridlinePaint(Color.BLACK); NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis(); rangeAxis.setAutoRange(true); // create chart panel ChartPanel chartPanel = new ChartPanel(chart); chartPanel.setPreferredSize(new Dimension(640, 480)); add(chartPanel, BorderLayout.CENTER); // create executor to update chart data executor = Executors.newSingleThreadScheduledExecutor(); executor.scheduleAtFixedRate(this::updateData, 0, 50, TimeUnit.MILLISECONDS); } private void updateData() { double value = Math.random() * 100; series.add(new Millisecond(), value); } public static void main(String[] args) { DynamicLineChart chart = new DynamicLineChart(); chart.pack(); chart.setVisible(true); } } ``` 在上面的代码中,我们创建了一个继承自JFrame的DynamicLineChart类,并在其构造函数中完成了以下操作: 1. 创建一个TimeSeries对象,用于存储折线图的数据。 2. 创建一个TimeSeriesCollection对象,用于管理TimeSeries对象并将其添加到折线图中。 3. 创建一个JFreeChart对象,用于设置折线图的标题、坐标轴等属性。 4. 创建一个ChartPanel对象,用于显示折线图。 5. 使用ScheduledExecutorService定时更新折线图的数据。 在updateData()方法中,我们生成随机数据并将其添加到TimeSeries对象中。通过ScheduledExecutorService定时调用updateData()方法,我们可以实现动态更新折线图的效果。 最后,在main()方法中,我们创建一个DynamicLineChart对象,并设置其可见性。运行程序后,我们可以看到生成的动态折线图

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值