精华内容
下载资源
问答
  • Echarts柱状图与折线图的基本使用

    千次阅读 2017-12-18 20:23:15
    Echarts柱形图与折线图的使用

    最近在项目中需要使用到柱形图与折线图,因此学习了一下Echarts关于柱形图和折线图的基本用法,如下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script src="echarts.min.js"></script>
    </head>
    <body>
    <div id="main" style="width: 100%;height:400px;"></div>
    <script>
        //本次示例所使用到的表格插件为Echarts,所使用的功能配置都是参见http://echarts.baidu.com/option.html#title
        var myChart = echarts.init(document.getElementById('main'));
        var option = {
            tooltip: {          //聚焦触发的效果,详情可参见。全局设置
                trigger: 'axis',
                axisPointer: {
                    type: 'cross',
                    crossStyle: {
                        color: '#f8f1ff'
                    }
                }
            },
            toolbox: {          //图表容器的右上角工具栏
                feature: {
                    dataView: {show: true, readOnly: false},
                    magicType: {show: true, type: ['line', 'bar']},
                    restore: {show: true},
                    saveAsImage: {show: true}
                }
            },
            legend: {           //图表图例注释
                right: '10%' ,
                data:['降水量','蒸发量','温度']
            },
            xAxis: [        //x轴属性设置,需要详细了解该模块属性配置,可参见http://echarts.baidu.com/option.html#xAxis
                {
                    type: 'category',           //表示类型为科目类
                    data: ['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月']         //坐标轴的值
                }
            ],
            yAxis: [                            //(可以有多个坐标轴),数组中的对象位置决定了yAxisIndex的值(yAxisIndex会在series中用到)
                {
                    type: 'value',              //表示属性为value类
                    name: '降水',                 //坐标轴名称
                    minInterval: 1,             //坐标最小划分单位,设置为1表示坐标轴节点保留整数
                    splitNumber: 4,             //指定坐标轴节点分割数(非强制),会按照预算自行调整最合适的分割数
                    axisLine:{                  //表示坐标轴是否显示
                      show: false
                    },
                    splitLine: {                //表示分割线属性设置
                        lineStyle: {            //表示分割线的样式
                            type: 'dashed'         //虚线
                        }
                    },
                    axisLabel: {
                        formatter: '{value} ml'     //表示所有值得单位
                    }
                },
                {
                    type: 'value',
                    name: '温度',
                    minInterval: 1,
                    splitNumber: 4,
                    splitLine: {
                        show: false
                    },
                    axisLine:{
                        show: false
                    },
                    axisLabel: {
                        formatter: '{value} °C'
                    }
                }
            ],
            series: [           //坐标轴实际数据内容
                {
                    name:'降水量',             //数据名称
                    type:'bar',                 //数据表现形式(bar为柱形图,line为折线图)
                    barWidth:'20%',             //柱形图宽度
                    itemStyle:{                 //柱子的属性设置
                        normal:{
                            color: '#5fabff',   //柱子的颜色设置
                        }
                    },
                    data: [2.0, 2.2, 3.3, 4.5, 6.3, 10.2, 20.3, 23.4, 23.0, 16.5, 12.0, 6.2]    //该条数据对应一条记录
                },
                {
                    name:'蒸发量',
                    type:'bar',
                    barGap:'0%',
                    barWidth:'20%',
                    itemStyle:{
                        normal:{
                            color: '#25dfab',
                        }
                    },
                    data: [2.0, 2.2, 3.3, 4.5, 6.3, 10.2, 20.3, 23.4, 23.0, 16.5, 12.0, 6.2]
                },
                {
                    name:'温度',
                    type:'line',            //折线图
                    yAxisIndex: 1,
                    symbolSize: 10,
                    itemStyle:{
                        normal:{
                            color: {
                                type: 'linear',
                                x: 0,
                                y: 0,
                                colorStops: [{      //渐变模式
                                    offset: 0, color: '#5fabff' // 0% 处的颜色      //折线开始的颜色
                                }, {
                                    offset: 1, color: '#5fabff' // 100% 处的颜色    //折线结束的颜色,
                                }],
                                globalCoord: true // 缺省为 false
                            },
                        }
                    },
                    data:[2.0, 2.2, 3.3, 4.5, 6.3, 10.2, 20.3, 23.4, 23.0, 16.5, 12.0, 6.2]
                }
            ],
            grid: {             //设置网格属性
                left:'10%',     //网格距离容器左侧的距离
                right:'10%',       //网格距离容器右侧的距离
                borderWidth:1
            }
        };
        myChart.setOption(option);
    
    </script>
    
    </body>
    </html>

    柱形图、折线图基本属性的设置在上例都可找到。

    上例效果图如下:


    如果不能满足需求,可参见:Ecahrts配置


    展开全文
  • swing绘制折线图

    千次阅读 热门讨论 2019-10-16 15:57:03
    swing开发数据变化折线图(显示0时到当前时间的)案例:详细描述效果图片折线图工具类测试类数据类 案例:详细描述 需求要求定时刷新该折线图,只展示此刻之前的数据,但横坐标要求显示一天0点到23点。 效果图片 ...

    swing开发数据变化折线图(显示0时到当前时间的)

    案例:详细描述

    需求要求定时刷新该折线图,只展示此刻之前的数据,但横坐标要求显示一天0点到23点。

    效果图片

    图片:
    在这里插入图片描述

    折线图工具类

    XyChartFacDemo .java

    package xny.hyd.tool;
    
    import java.awt.BasicStroke;
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Font;
    import java.awt.event.ItemEvent;
    import java.awt.event.ItemListener;
    import java.util.ArrayList;
    import java.util.List;
    
    import javax.swing.BorderFactory;
    import javax.swing.BoxLayout;
    import javax.swing.JCheckBox;
    import javax.swing.JComboBox;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
    
    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.labels.XYItemLabelGenerator;
    import org.jfree.chart.plot.XYPlot;
    import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
    import org.jfree.data.time.Day;
    import org.jfree.data.time.Hour;
    import org.jfree.data.time.Minute;
    import org.jfree.data.time.TimeSeries;
    import org.jfree.data.time.TimeSeriesCollection;
    import org.jfree.data.xy.XYDataset;
    
    import xny.hyd.entity.ChartData;
    import xny.hyd.entity.MaxMinCoordinat;
    import xny.tool.NewJComboBox;
    
    /**
     * 折线图基类
     * 2019年8月28日08:44:47
     * @author Administrator
     *
     */
    public class XyChartFacDemo {
    	//定义整个界面panel
    	private JPanel contentPane;
    	//折线图变量
    //	private JFreeChart xylineChart = null;
    	//全部数据
    	public List<ChartData> date = null;
    	//当前要展示数据
    	public List<ChartData> dateNow = null;
    	//折线图图表
     	private JFreeChart lineChart;
     	//数据集
     	private TimeSeriesCollection dataset;
     	//每一条折线的最大最小值
    	public List<MaxMinCoordinat> value;
    	//是否需要顯示
    	private boolean isShowX;
    	//是否要查询条件
    	private boolean isHaveSelect = false;
    	//每隔多长时间一个数据点
    	private int timeinterval = 15;
    	//已知数据点时间长度,算出一天之内有多少个数据点/一天之内的总数据点个数
    	private int dataPoint = (24*60)/timeinterval;
    	//下拉数据
    	private List<String> selectData = new ArrayList<String>();
    	private String[] list;
    	public boolean isHaveSelect() {
    		return isHaveSelect;
    	}
    
    	public void setHaveSelect(boolean isHaveSelect) {
    		this.isHaveSelect = isHaveSelect;
    	}
    
    	public int getTimeinterval() {
    		return timeinterval;
    	}
    
    	public void setTimeinterval(int timeinterval) {
    		this.timeinterval = timeinterval;
    	}
    
    	public List<String> getSelectData() {
    		return selectData;
    	}
    
    	public void setSelectData(List<String> selectData) {
    		this.selectData = selectData;
    	}
    
    	/**
    	 * 构造方法
    	 */
    	public XyChartFacDemo() {
    		this(false);
    	}
    	
    	public XyChartFacDemo(boolean isShowX) {
    		this.isShowX = isShowX;
    		date = new ArrayList<ChartData>();
    		dateNow = new ArrayList<ChartData>();
    	}
    	public void init() {
    		if(selectData!=null&&selectData.size()>0) {
    			list = new String[selectData.size()];
    			for(int i=0;i<selectData.size();i++) {
    				list[i]=selectData.get(i);
    			}
    		}
    		
    	}
    	/**
    	 * 重新查询数据,刷新折线图
    	 */
    	public void zxtPushData() {
    		//查询数据
    		//数据处理
    		
    		//刷新折线图
    //		LineChart push = new LineChart();
    	}
    	/**
    	 * Create the frame.
    	 * 获取一个折线图jpanel
    	 */
    	public JPanel getChooseshow(List<ChartData> dateList) {
    		
    		contentPane = new JPanel();
    		contentPane.setOpaque(false);
    		contentPane.setLayout(new BorderLayout(0, 0));
    
    		getDate(dateList);
    		//获取折线图
    		LineChart xy = new LineChart();
    		ChartPanel charpanal = xy.getCharPanel(createDataset(dateList));
    		contentPane.add(charpanal,BorderLayout.CENTER);
    		
    		JPanel top = new JPanel();
    		top.setLayout(new BorderLayout(0, 0));
    		top.setOpaque(false);
    		contentPane.add(top, BorderLayout.NORTH);
    		//放多选框按钮
    		JPanel panel_2 = new JPanel();
    		panel_2.setOpaque(false);
    		panel_2.setLayout(new BoxLayout(panel_2, BoxLayout.X_AXIS));
    		top.add(panel_2, BorderLayout.WEST);
    		if(isHaveSelect) {
    			top.add(getCz(),BorderLayout.CENTER);
    		}
    		//循环添加选择框,并注册响应事件
    		for (int i = 0; i < dateList.size(); i++) {
    			JCheckBox checkBox = new JCheckBox(dateList.get(i).getName());
    			checkBox.setOpaque(false);
    			checkBox.setForeground(Color.decode(dateList.get(i).getColor()));
    			checkBox.setFont(new Font("苹方字体", Font.PLAIN, 17));
    			checkBox.setSelected(true);
    			checkBox.setName(dateList.get(i).getName());
    			panel_2.add(checkBox);
    			//入库流量选择框触发事件
    			checkBox.addItemListener(new ItemListener() {
    				@Override
    				public void itemStateChanged(ItemEvent e) {
    					
    					JCheckBox check = (JCheckBox) e.getSource();
    					// TODO Auto-generated method stub
    					if(!check.isSelected()) {
    						List<ChartData> xqlist = new ArrayList<ChartData>();
    						for (ChartData rk : dateNow) {
    							if(check.getName()!=null&&!"".equals(check.getName())) {
    								if(!check.getName().equals(rk.getName())) {
    									xqlist.add(rk);
    								}
    							}
    						}
    						dateNow = xqlist;
    						updateDate(createDataset(dateNow));
    					}else {
    						for (ChartData rk : date) {
    							if(check.getName()!=null&&!"".equals(check.getName())) {
    								if(check.getName().equals(rk.getName())) {
    									dateNow.add(rk);
    								}
    							}
    						}
    						updateDate(createDataset(dateNow));
    					}
    				}
    			});
    		}
    		return contentPane;
    	}
    	/**
    	 * 厂站
    	 * @return
    	 */
    	private JPanel getCz() {
    		//厂站
    		JPanel cz = new JPanel();
    		cz.setOpaque(false);
    		
    		
    		JLabel label_1 = new JLabel("厂(场)站:");
    		label_1.setFont(new Font("宋体", Font.PLAIN, 20));
    		label_1.setForeground(Color.WHITE);
    		cz.add(label_1);
    //		String[] czlist = new String[]{"全部"};
    		init();
    		final JComboBox box = new JComboBox(list);
    		box.setPreferredSize(new Dimension(150, 25));
    		box.setUI(new NewJComboBox());
    		box.setBackground(Color.decode("#1A5C63"));
    		box.setForeground(Color.white);
    		box.setBorder(BorderFactory.createLineBorder(Color.decode("#1A5C63"),1));
    		((JTextField) box.getEditor().getEditorComponent()).setBackground(Color.decode("#1A5C63"));
    		((JTextField) box.getEditor().getEditorComponent()).setForeground(Color.WHITE);
    		// 添加条目选中状态改变的监听器
    		box.addItemListener(new ItemListener() {
                @Override
                public void itemStateChanged(ItemEvent e) {
                    // 只处理选中的状态
                    if (e.getStateChange() == ItemEvent.SELECTED) {
                        System.out.println("选中: " + box.getSelectedIndex() + " = " + box.getSelectedItem());
                    }
                }
            });
    		box.setEditable(true);
    		box.setSelectedIndex(1);
    		cz.add(box);
    		return cz;
    	}
         /**
          * 数据库获取数据
          */
         public void getDate(List<ChartData> dateList) {
        	 date = dateList;
        	 dateNow = dateList;
         }
         /**
          * 数据出力
          * @return
          */
        public XYDataset createDataset(List<ChartData> pushdata)
        {
           //刷新时根据勾选按钮刷新,只重新装载勾中的框的 数据
           List<ChartData> data = new ArrayList<ChartData>();
           for(int i=0;i<pushdata.size();i++) {
        	   int t =0;
        	   for(int j =0;j<dateNow.size();j++) {
        		   if(pushdata.get(i).getName().equals(dateNow.get(j).getName())) {
        			   t++;
        		   }
        	   }
        	   if(t>0) {
        		   data.add(pushdata.get(i));
        	   }
           }
           dataset = new TimeSeriesCollection( );
           value = new ArrayList<MaxMinCoordinat>();
           Hour day = new Hour(0, new Day());
           
     	   for(int i=0;i<data.size();i++) {
    		   TimeSeries series = new TimeSeries( data.get(i).getName(),Minute.class ); 
     		   double max = 0;
     		   int ymax=0;
     		   double min = 100000000;
     		   int ymin=0;
     		   
     		   Minute hour22 = new Minute(0, day);
     		   int count = data.get(i).getDataList().size();//折线的数据量
     		   for (int j=0;j<dataPoint;j++) {//一天之内的总数据点个数
     			   if(j<count) {
     				   if(max<data.get(i).getDataList().get(j).getYvalue()) {
     	 				   max = data.get(i).getDataList().get(j).getYvalue();
     	 				   ymax = j;
     	 			   }
     	 			   if(min>data.get(i).getDataList().get(j).getYvalue()) {
     	 				   min = data.get(i).getDataList().get(j).getYvalue();
     	 				   ymin = j;
     	 			   }
     	 			   series.add(hour22, data.get(i).getDataList().get(j).getYvalue());
     			   }else {
     				   series.add(hour22, null );
     			   }
     			   for(int t=0;t<timeinterval;t++) {
     				   hour22 = ( Minute ) hour22.next(); 
     			   }
     		   }
     		   dataset.addSeries(series);
     		   MaxMinCoordinat maxVal = new MaxMinCoordinat();
     		   maxVal.setRow(1);//0:最小值       1:最大值
     		   maxVal.setXcoord(i);
     		   maxVal.setYcoord(ymax);
     		   value.add(maxVal);
     		   MaxMinCoordinat minVal = new MaxMinCoordinat();
     		   minVal.setRow(0);//0:最小值       1:最大值
     		   minVal.setXcoord(i);
     		   minVal.setYcoord(ymin);
    		   value.add(minVal);
     	   }
           return dataset;
        }
        /**
         * 刷新数据
         * @param dataset
         * @param color
         * @return
         */
        public void updateDate(XYDataset dataset) {
           //刷新时根据勾选按钮刷新,只重新装载勾中的框的 数据
           XYPlot plot = (XYPlot)lineChart.getPlot();
     	   plot.setDataset(dataset);
     	   
     	  XYLineAndShapeRenderer renderer = (XYLineAndShapeRenderer) plot.getRenderer();// 设置样式
    		for(int i=0;i<dateNow.size();i++) {
    			renderer.setSeriesPaint( i , Color.decode(dateNow.get(i).getColor()));
    			renderer.setSeriesStroke( i , new BasicStroke( 2.0f ) );
    			renderer.setSeriesItemLabelPaint(i, Color.decode(dateNow.get(i).getColor()));
    	    }
        }
         class LineChart 
         {
        	
         	/**
         	 * 获取一个折线图
         	 * @return
         	 */
         	public void getjfreechar(XYDataset data) {
         		lineChart = ChartFactory.createTimeSeriesChart(
         		         "",
         		         "",
         		         "",
         		         data,
         		         false,true,false);
         		lineChart.setBorderVisible(false);
         		lineChart.setBackgroundPaint(null);
         		lineChart.setBorderPaint(Color.red);
         		lineChart.setBorderStroke(null);
         		XYPlot plot = (XYPlot) lineChart.getPlot();
         		
         		plot.setRangeZeroBaselineVisible(true);
    //     		plot.getDomainAxis().setLowerMargin(0.02);//数据区距离左右的距离
    //     		plot.getDomainAxis().setUpperMargin(0.01);
         		plot.getDomainAxis().setLowerMargin(0.0D);//数据区距离左右的距离
         		plot.getDomainAxis().setUpperMargin(0.0D);
         		plot.setDomainGridlinesVisible(false);//竖直网格线隐藏
         		plot.setBackgroundAlpha(0);
         		plot.setOutlineVisible(false);//数据区黑色边框不可见
         		plot.getDomainAxis().setAxisLinePaint(Color.decode("#3CB5FC"));// X坐标轴颜色
         		// 设置网格横线颜色
         		plot.setRangeGridlinePaint(Color.decode("#1D566E"));
         		plot.setRangeGridlineStroke(new BasicStroke(2));
         		//x轴设置
    //     		DateAxis domainAxis = (DateAxis) plot.getDomainAxis(); 
    //     		domainAxis.setTickUnit(new DateTickUnit(DateTickUnit.HOUR, 1, new SimpleDateFormat("HH:mm")));//设置x轴一个小时一个刻度
         		if(isShowX) {//显示横坐标刻度值
         			plot.getDomainAxis().setTickLabelPaint(Color.decode("#00F4FC"));
         		}else {
         			plot.getDomainAxis().setTickLabelsVisible(false);
         		}
         		
         		plot.getDomainAxis().setTickMarksVisible(false);
         		plot.getDomainAxis().setAxisLinePaint(Color.decode("#1D566E"));//x轴颜色
        		plot.getDomainAxis().setAxisLineStroke(new BasicStroke(2));
    //     		categoryAxis.setVisible(false);
         		// 取得纵轴
         		plot.getRangeAxis().setAxisLineVisible(false);
         		plot.getRangeAxis().setTickMarksVisible(false);
         		NumberAxis numberAxis = (NumberAxis) plot.getRangeAxis();
    //     		numberAxis.setTickUnit(new NumberTickUnit(100));//纵轴每100一个刻度
         		numberAxis.setTickLabelPaint(Color.decode("#13BBBF"));
         		numberAxis.setUpperMargin(0.15);//设置最高数据显示与顶端的距离
        		numberAxis.setLowerMargin(2);//设置最低的一个值与图片底端的距离
         		numberAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits() );
         		//设置折线颜色
         		@SuppressWarnings("serial")
         		XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer() {
    				@Override
    				public boolean getItemShapeVisible(int series, int item) {
    					// TODO Auto-generated method stub
    					
    					boolean ret = false;
         				for (MaxMinCoordinat val : value) {
    						
         					if(val.getXcoord() == series&&val.getYcoord() == item) {//最大值
         						ret = true;
         						return ret;
         					}else {
         						ret = false;
         					}
    					}
    					return ret;
    				}
         			
         		};
         		XYItemLabelGenerator st = new XYItemLabelGenerator(){
         			@Override
         			public String generateLabel(XYDataset dataset, int row, int column) {
         				// TODO Auto-generated method stub
    //     				double value = (Double) (dataset.getValue(row, column));
         				String ret = "";
         				for (MaxMinCoordinat val : value) {
    						
         					if(val.getRow()==1&&val.getXcoord() == row&&val.getYcoord() == column) {//最大值
         						ret = "max:"+dataset.getYValue(row, column);
         						return ret;
         					}else if(val.getRow()==0&&val.getXcoord() == row&&val.getYcoord() == column) {//最小值
         						ret = "min:"+dataset.getYValue(row, column);
         						return ret;
         					}else {
         						ret = "";
         					}
    					}
    					return ret;
         			}
    
    				/*@Override
    				public String generateLabel(XYDataset arg0, int arg1, int arg2) {
    					// TODO Auto-generated method stub
    					return null;
    				}*/
         		};
         		
         		renderer.setBaseItemLabelGenerator(st);
         		for(int i=0;i<dateNow.size();i++) {
         			renderer.setSeriesPaint( i , Color.decode(dateNow.get(i).getColor()));
         			renderer.setSeriesStroke( i , new BasicStroke( 2.0f ) );
         			renderer.setSeriesItemLabelPaint(i, Color.decode(dateNow.get(i).getColor()));
    //     			renderer.setSeriesShape(new Shape());
    		      }
         		renderer.setBaseItemLabelsVisible(true);
         		renderer.setDrawOutlines(true);
         		renderer.setBaseShapesVisible(true);// 设置拐点是否可见/是否显示拐点
         		plot.setRenderer(renderer);
         	}
         	/**
         	 * 获取ChartPanel
         	 * @param width
         	 * @param heigh
         	 * @return
         	 */
         	public ChartPanel getCharPanel(XYDataset data) {
         		getjfreechar(data);
         		ChartPanel chartPanel = new ChartPanel( lineChart );
    //     	    chartPanel.setPreferredSize( new java.awt.Dimension( width , heigh ) );
         	    chartPanel.setOpaque(false);
         		chartPanel.setMouseZoomable( true , false ); 
         	    return chartPanel;
         	}
         }
    	public JFreeChart getLineChart() {
    		return lineChart;
    	}
    
    	public void setLineChart(JFreeChart lineChart) {
    		this.lineChart = lineChart;
    	}
         
    }
    

    XyChartFacDemo类生成折线图,并处理数据。

    重绘下拉选择框

    NewJComboBox.java

    package xny.tool;
    
    
    import javax.swing.*;
    import javax.swing.plaf.basic.BasicButtonUI;
    import javax.swing.plaf.basic.BasicComboBoxUI;
    import javax.swing.plaf.basic.BasicComboPopup;
    import javax.swing.plaf.basic.ComboPopup;
    import java.awt.*;
    
    /**
     * 重绘下拉选择框
     * 2019年9月16日15:18:59
     * 
     * @author Administrator
     *
     */
    public class NewJComboBox extends BasicComboBoxUI {
    
        private static ImageIcon DOWN_ICON = new ImageIcon("prjs/xny/src/xny/hyd/images/jComboBox.png");
    
        private static Color DEFAULT_COLOR = new Color(150, 207, 254);
    
    	@Override
        public void installUI(JComponent c) {
            super.installUI(c);
    
    		JComboBox comboBox = (JComboBox) c;
            comboBox.setFocusable(true);
            comboBox.setOpaque(false);
    
            comboBox.setRenderer(new MyListCellRenderer());
        }
    
        @Override
        protected JButton createArrowButton() {
            // 也可以使用BasicComboBoxUI里的arrowButton对象
            JButton arrow = new JButton();
            // 设置自己定义的UI
            arrow.setUI(new MyButtonUI());
            // 设置图标
            arrow.setIcon(DOWN_ICON);
            // 设置无法获得焦点
            arrow.setFocusable(false);
            // 设置边距,调整图标位置
            arrow.setMargin(new Insets(0, 0, 0, 0));
            return arrow;
        }
    
        @Override
        public void paint(Graphics g, JComponent c) {
    
            // 也可以使用BasicComboBoxUI里的combobox对象
    		JComboBox comboBox = (JComboBox) c;
    
            hasFocus = comboBox.hasFocus();
    
            Rectangle r = rectangleForCurrentValue();
    
            // JComboBox的textfield的绘制,并不是靠Renderer来控制
            // 它会通过paintCurrentValueBackground来绘制背景
            // 然后通过paintCurrentValue去绘制显示的值
            Graphics2D g2d = (Graphics2D) g;
            if (!comboBox.isEditable()) {
                paintCurrentValueBackground(g2d, r, hasFocus);
                paintCurrentValue(g2d, r, hasFocus);
            } else {
                paintCurrentValueBackground(g2d, r, hasFocus);
            }
    
            // 获取焦点时,用不同颜色来区分
            if (comboBox.hasFocus()) {
                g2d.setColor(DEFAULT_COLOR);
            } else {
                g2d.setColor(Color.GRAY);
            }
    
            // 边框透明度
            //g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f));
    
            // 绘制边框,后两个参数控制圆角
            // 边框也有占位,所以宽高都需要减去2,否则会导致边框不全
            g2d.drawRoundRect(0, 0, comboBox.getWidth() - 2, comboBox.getHeight() - 1, 2, 2);
        }
    
        @Override
        protected ComboPopup createPopup() {
            BasicComboPopup popup = (BasicComboPopup) super.createPopup();
            // 获取到popup,为其设置边框,和combobox的颜色保持同步
            popup.setBorder(BorderFactory.createLineBorder(DEFAULT_COLOR));
            return popup;
        }
    }
    /**
     * Created by SongFei on 2017/11/1.
     */
    class MyButtonUI extends BasicButtonUI implements SwingConstants {
    
        @Override
        public void installUI(JComponent c) {
            super.installUI(c);
            JButton button = (JButton) c;
            button.setContentAreaFilled(false);//父类不用绘制内容
            button.setFocusPainted(false);//父类不用绘制焦点
            button.setBorderPainted(false);//父类不用绘制边框
        }
    
    }
    /**
     * Created by SongFei on 2017/11/2.
     */
    class MyListCellRenderer implements ListCellRenderer {
    
        private DefaultListCellRenderer defaultCellRenderer = new DefaultListCellRenderer();
    
        @Override
        public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
    
            // 每一行,都转换成jlabel来处理
            JLabel renderer = (JLabel) defaultCellRenderer.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
    
            // 每一行的jlabel的颜色
            if (isSelected) {
                renderer.setBackground(new Color(150, 207, 254));
                renderer.setForeground(Color.WHITE);
            } else {
                renderer.setBackground(null);
            }
    
            // 字体靠左
            renderer.setHorizontalAlignment(JLabel.LEFT);
    
            // 左侧padding
            renderer.setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 0));
    
            // render的宽高
            renderer.setPreferredSize(new Dimension(100, 25));
    
            // list背景色,也就是向下的按钮左边儿那一块儿
            list.setSelectionBackground(Color.decode("#1A5C63"));
    
            list.setSelectionForeground(Color.WHITE);
            list.setBorder(null);
            return renderer;
        }
    
    }
    

    测试类

    TestLineChar.java

    package xny.hyd.test;
    
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.EventQueue;
    
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.border.EmptyBorder;
    
    import xny.hyd.tool.XyChartFacDemo;
    
    /**
     * 测试类
     * 2019年9月19日16:42:37
     * @author Administrator
     *
     */
    @SuppressWarnings("serial")
    public class TestLineChar extends JFrame {
    
    	private JPanel contentPane;
    
    	/**
    	 * Launch the application.
    	 */
    	public static void main(String[] args) {
    		EventQueue.invokeLater(new Runnable() {
    			public void run() {
    				try {
    					TestLineChar frame = new TestLineChar();
    					frame.setVisible(true);
    				} catch (Exception e) {
    					e.printStackTrace();
    				}
    			}
    		});
    	}
    
    	/** 
    	 * Create the frame.
    	 */
    	public TestLineChar() {
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		setBounds(100, 100, 650, 400); 
    		contentPane = new JPanel(new BorderLayout());
    		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    		contentPane.setBackground(Color.decode("#12343B"));
    		XyChartFacDemo line = new XyChartFacDemo(true);
    		contentPane.add(line.getChooseshow(TestData.getDateBssw()));
    		setContentPane(contentPane);
    	}
    
    }
    

    数据类

    TestLineChar.java

    package xny.hyd.test;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Random;
    
    import xny.hyd.entity.ChartProperty;
    import xny.hyd.entity.ChartData;
    
    
    public class TestData {
    	/**
         * 数据库获取数据
         */
        public static List<ChartData> getDateBssw() {
         List<ChartData> returndate = new ArrayList<ChartData>();
         ChartData line = new ChartData();
         line.setName("坝上水位");
         line.setColor("#FFFD38");
       	 List<ChartProperty> dateList1 = new ArrayList<ChartProperty>();
       	 
       	 for(int i=0;i<52;i++) {
       		 ChartProperty d1 = new ChartProperty();
       		 d1.setYvalue(Double.parseDouble(new Random().nextInt(400)+""));
       		 d1.setChartName("坝上水位");
       		 d1.setXvalue(""+i);
       		 dateList1.add(d1);
       	 }
       	 line.setDataList(dateList1);
       	 returndate.add(line);
       	 return returndate;
        }
    }
    

    实体类

    ChartData.java

    package xny.hyd.entity;
    
    import java.util.List;
    /**
     * 图表数据
     * 2019年9月16日15:21:14
     * @author Administrator
     *
     */
    public class ChartData {
    	private String id;//id
    	private String name;//图表中每类数据的名称
    	private String color;//颜色
    	private List<ChartProperty> dataList;//数据
    	public String getId() {
    		return id;
    	}
    	public void setId(String id) {
    		this.id = id;
    	}
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public String getColor() {
    		return color;
    	}
    	public void setColor(String color) {
    		this.color = color;
    	}
    	public List<ChartProperty> getDataList() {
    		return dataList;
    	}
    	public void setDataList(List<ChartProperty> dataList) {
    		this.dataList = dataList;
    	}
    }
    

    ChartProperty.java

    package xny.hyd.entity;
    /**
     * 降雨实体
     * 2019年9月16日15:21:23
     * @author Administrator
     *
     */
    public class ChartProperty {
    	//纵坐标
    	private Double yvalue;
    	//横坐标
    	private String xvalue;
    	//图表名类型
    	private String chartName;
    	
    	public Double getYvalue() {
    		return yvalue;
    	}
    	public void setYvalue(Double yvalue) {
    		this.yvalue = yvalue;
    	}
    	public String getXvalue() {
    		return xvalue;
    	}
    	public void setXvalue(String xvalue) {
    		this.xvalue = xvalue;
    	}
    	public String getChartName() {
    		return chartName;
    	}
    	public void setChartName(String chartName) {
    		this.chartName = chartName;
    	}
    	
    }
    

    MaxMinCoordinat.java

    package xny.entity;
    /**
     * 最大最小值
     * 2019年9月16日15:21:31
     * @author Administrator
     *
     */
    public class MaxMinCoordinat {
    //	private 
    	private int row;
    	private int xcoord;//横坐标
    	private int ycoord;//纵坐标
    	
    	public int getXcoord() {
    		return xcoord;
    	}
    	public void setXcoord(int xcoord) {
    		this.xcoord = xcoord;
    	}
    	public int getYcoord() {
    		return ycoord;
    	}
    	public void setYcoord(int ycoord) {
    		this.ycoord = ycoord;
    	}
    	public int getRow() {
    		return row;
    	}
    	public void setRow(int row) {
    		this.row = row;
    	}
    }
    
    
    

    1、此案例可以生成各种各样的折线图,根据数据变化而变化。
    2、同时根据折线条数生成图例、显示最大最小值、仅显示最大最小值数据点。
    3、当取消图例勾选时同步刷新折线(如图所示)
    例:在这里插入图片描述在这里插入图片描述

    展开全文
  • 用excel作图时候经常会碰到做柱状图和折线图组合,这样的图一般难在折线图的数据很小,是百分比趋势图,所以经常相对前面主数据太小了,在图里看不到,所以需要用次坐标轴来将其显示出来,下面就介绍这种柱状图添加...

    用excel作图时候经常会碰到做柱状图和折线图组合,这样的图一般难在折线图的数据很小,是百分比趋势图,所以经常相对前面主数据太小了,在图里看不到,所以需要用次坐标轴来将其显示出来,下面就介绍这种柱状图添加折线图(百分比趋势图)组合的做法。

    Excel百分比趋势图制作教程

    我们就用这个年份、销售量和增长率表格为例作图。

    sg_trans.gif

    首先选中销售量和增长率两列数据

    sg_trans.gif

    接着如图所示插入柱状图。

    sg_trans.gif

    在出现的图上点击鼠标右键,再点击菜单中的选择数据。

    sg_trans.gif

    此时会跳出来选择数据源的界面。点击界面右侧的编辑,这里是编辑横坐标轴的数据。

    sg_trans.gif

    跳出轴标签以后,选择年份列的2005到2013,点击确定

    sg_trans.gif

    回到选择数据源界面,再点击左侧的编辑,这里是编辑图标签。

    sg_trans.gif

    跳出编辑数据系列界面后,选择销售量单元格,确定

    sg_trans.gif

    同样的方式,编辑好增长率。

    sg_trans.gif

    接着,点击图中所示位置,右键单击。

    sg_trans.gif

    在菜单中点击设置数据系列格式。

    sg_trans.gif

    勾选次坐标轴,关闭。

    sg_trans.gif

    再在红色图(增长率图)上右键单击,出现菜单以后点击更改系列图标类型。

    sg_trans.gif

    在跳出的页面选择下图所示的折线图。点击确定

    sg_trans.gif

    好了,一个柱状图加折现图的完整的做法就完成了。

    sg_trans.gif

    更改标签,主要是将横坐标轴变为年份列,这里可根据自己实际情况确定是否需要修改。

    因为增长率相对于销售量太小了,看不见所以很多时候步骤10的位置很难点到,需要多点几次选中以后再进行后续步骤。

    展开全文
  • 我们可能会遇到需要将不同量级的个系列数据放到同一个中的需求,比如我们在成本核算的时候需要展示当天的成本是多少,收入是多少,然后对应当天的ROI是多少,成本和收入通常都是比较大的数值,而ROI通常是约等于...

    前言

    • 效果展示
      在这里插入图片描述
    • 在实际工作中,我们可能会遇到需要将不同量级的多个系列数据放到同一个图中的需求,比如我们在成本核算的时候需要展示当天的成本是多少,收入是多少,然后对应当天的ROI是多少,成本和收入通常都是比较大的数值,而ROI通常是约等于1的比率,这时最好的办法便是成本和收入通过直方图展示,ROI通过折线图来展示,折线图和直方图分别对应不同的Y轴。

    代码

    代码中有以下三点需要注意:

    1. 添加Y轴
      bar = Bar(init_opts=opts.InitOpts(theme='light',
        
    展开全文
  • 本文以展示柱状进行介绍,当然这仅仅是一种方法而已;还有很方法可以用于展示图表,例如自定义图表标签、使用jfreechart插件等; 1、导入js文件,包含了很展示方法: 代码如下: [removed]>[removed] ...
  • 面积图其实就是想折线图下方区域进行填充,在Pyecharts中本身没有面积图,要实现面积图效果只需要将Line图进行区域填充即可: 添加如下代码即可,opacity设置区域透明度,设置一个大于0的值即可实现填充效果,1表示...
  • Qt自定义折线图控件

    千次阅读 热门讨论 2018-10-15 11:34:43
    目录 基础效果图 前言 设计要点 ...使用Qt自定义折线图,可以自己控制折线图的重绘规则,究竟是每添加一个数据就刷新整个折线图,还是只刷新部分折线图。 我把折线图分为以下两类: 坐标系是静...
  • 导读:Tableau是商业智能软件届的翘楚,对于制作各种可视化分析图表极为便捷。本文主要讲解用tableau制作各种多变折线图,包括凹凸图、弧线图和雷达图等。...很可视化工具的默认图表形式就是折线图...
  • matplotlib 数据可视化基础(以折线图
  • C# 实时折线图,波形图

    千次阅读 2017-11-17 15:40:38
    原文网址:C# 实时折线图,波形图 源码下载链接原文中有 作者:飞飞月  出处:http://www.cnblogs.com/hsiang/  此Demo是采用VS自带的Chart图表控件,制作实时动态显示的折线图,和波形图。 涉及到...
  • origin Pro 9.0画条三维折线图(此处以两条为) 首先,建立两个New workbook,将需要的绘制的图分别放在book1 book2…如下图 选中book1 中的三维数据,操作如下图所示: 双击图中散点 (需要试几次 ...
  • excel柱状图加折线图组合怎么做听语音原创|浏览:133121|更新:2014-02-16 23:06|标签:excel 返回暂停重播播放x 01:02
  • 65岁不同性别人群中静坐时长和血胆固醇水平的关系,分别招募50名男性和女性(gender)询问其每天静坐时长(time,分钟),并检测其血液中胆固醇水平(cholesterol, mmol/L),部分数据如1。研究者该如何绘图展示...
  • 以柱状图和折线图: 在上述两张图中,只有点击柱状图形和折线的圆形折点才能触发通过on添加的事件监听,图中标注的灰色区域并不能触发点击。在数据差别很大的图形中,想准确点击数据较小...
  • C#使用chart绘制实时折线图,波形图

    万次阅读 多人点赞 2018-08-24 16:12:32
    采用VS自带的Chart图表控件,制作实时动态显示的折线图,和波形图 涉及知识点: Chart 控件,功能强大,可以绘制柱状图,折线图,波形图,饼状图,大大简化了对图的开发与定制。 Chart控件的相关概念: ChartArea...
  • G2折线图

    千次阅读 2019-04-04 15:03:18
    angular7使用G2折线图安装依赖单折线多折线图结语 安装依赖 antv G2(官方资料)提供了多种安装方式, 这里使用npm添加依赖 npm install @antv/g2 --save 当前版本3.5.2 单折线 在 ~/app/t 文件夹中创建组件 ...
  • 散点图和折线图是数据分析中最常用的两种图形。其中,折线图用于分析自变量和因变量之间的趋势关系,最适合用于显示随着时间而变化的连续数据,同时还可以看出数量的差异,增长情况。Matplotlib 中绘制散点图的函数...
  • 也是网上找了下资料,现学现用,很快图表就出来了,但是却发现一个小问题,那就是折线图上面显示的内容是float类型,而我希望显示的是 (数字+ ℃,:29℃)。如下图。 只能去网上找资料,但是却发现网上的...
  • FusionCharts数据展示成饼状图、柱状图和折线图 本文以展示柱状图为进行介绍,当然这仅仅是一种方法而已;还有很方法可以用于展示图表,例如echarts,自定义图表标签、使用jfreechart插件等; 1、导入js文件,...
  • 在Lu脚本中绘制普通XY图(折线图

    千次阅读 2013-12-15 18:56:29
    在Lu脚本中绘制普通XY图(折线图) 目 录 1 基础知识 绘制普通XY图的基础知识。 2 绘制条函数曲线 需要自己双击窗口,或者单击右键,弹出菜单设置曲线的各种属性。 3 绘制条函数曲线并用代码设置部分...
  • 相比普通的折线图可以有更的层次感; 这里最重要的就是linestyle的配置,不过pyecharts中LineStyleOpts中并不支持阴影效果的配置,可配置参数只有如下所示: class LineStyleOpts( # 是否显示 is_show: bool...
  • 今天我们以R中自带的Orange 数据集为,来学习折线图的画法,该数据集中包含五种橘树的树龄和年轮数据。要考察橘树的年轮如何随着树龄变化,先画个散点图看看: # 先看第一种橘树,提取第一种树的数据,保存在t1中...
  • 文章目录jsp页面整合ECharts绘制折线图先看效果图前端代码后端测试代码 jsp页面整合ECharts绘制折线图 官网: https://echarts.apache.org/zh/index.html 官网上有demo可以直接调试样式。 话不说, 直接上代码, 因为...
  • 今天我们以R中自带的Orange 数据集为,来学习折线图的画法,该数据集中包含五种橘树的树龄和年轮数据。要考察橘树的年轮如何随着树龄变化,先画个散点图看看: #先看第一种橘树,提取第一种树的数据,保存在t1中...
  • Echarts绘制折线图

    万次阅读 2018-05-24 11:50:28
    我们想绘制什么类型图表,可以在百度官方示例中找...贴下表示: 一、引入echarts的JS文件 #这个是百度的csdn &lt;script type="text/javascript" src="http://echarts.baidu.com/galler...
  • 2.在页面上创建一个div容器存放折线图; 3.引用个自定义主题js 注意:  在页面的head部分我们需要添加amCharts JavaScript库文件的引用。由于V3 amCharts库被拆分成了几个文件,为了节省几个kb空间—你...
  • 一般的图标折线图的数据都是有一个共同的字段作为x轴: : ``` const data = [ { month: "Jan", Tokyo: 7.0, London: 3.9 }, { month: "Feb", Tokyo: 6.9, London: 4.2 }, { ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,672
精华内容 3,068
关键字:

多图例折线图