精华内容
下载资源
问答
  • VBA生成折线图

    2011-11-21 22:02:04
    VBA生成折线图VBA生成折线图VBA生成折线图
  • Java语言纯后台生成折线图,饼图,柱状图。
  • asp生成折线图源码

    2008-10-30 09:16:39
    asp生成折线图asp生成折线图asp生成折线图asp生成折线图asp生成折线图asp生成折线图asp生成折线图asp生成折线图asp生成折线图asp生成折线图asp生成折线图
  • 分享一个php生成折线图代码类,y值处理,参数处理,图片流开始,绘制网格,绘制轴线,产生折线以及参数说明使用。
  • JSP利用JFreeChart生成折线图,文档中包含所需jar包,共有四个例子,导入即可运行,内附有说明
  • android中生成折线图和饼状图的demo
  • java JXL导出Excel源码及jfreechart 生成折线图,饼图 java JXL导出Excel源码及jfreechart 生成折线图,饼图 java JXL导出Excel源码及jfreechart 生成折线图,饼图
  • 主要介绍了微信小程序使用echarts获取数据并生成折线图,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • easy to drew a line chart.简单生成折线图
  • 资源描述:一个使用java做的导出数据,并且可以在excel表生成折线图的工具类,使用简单操作方便。
  • jfreechart 生成折线图,饼图,柱状图,堆栈柱状图
  • 使用matplotlib简单生成折线图,散点图和直方图

    数据可视化是数据分析的利器,好的数据分析如果没有完美的图表展现,效果也会大打折扣。今天简单介绍使用matplotlib生成图表,小伙伴们快来围观吧大笑

    安装matplotlib:pip install matplotlib

    ep:如果人口和年份的对应关系为

    year = [2010, 2012, 2014, 2016]

    people = [20, 40, 60, 100]

    那么生成折线图的代码如下:

    # matplotlib中有很多可用的模块,我们使用pyplot模块
    from matplotlib import pyplot
    year = [2010, 2012, 2014, 2016]
    people = [20, 40, 60, 100]
    #生成图表
    pyplot.plot(year, people)
    #设置横坐标为year,纵坐标为population,标题为Population year correspondence
    pyplot.xlabel('year')
    pyplot.ylabel('population')
    pyplot.title('Population year correspondence')
    #设置纵坐标刻度
    pyplot.yticks([0, 25, 50, 75, 90])
    #设置填充选项:参数分别对应横坐标,纵坐标,纵坐标填充起始值,填充颜色(可以有更多选项)
    pyplot.fill_between(year, people, 10, color = 'green')
    #显示图表
    pyplot.show()
    
    代码执行结果如下图所示:

    如果要生成散点图,只需将代码中的

    pyplot.plot(year, people)
    改为:
    pyplot.scatter(year,people)
    代码执行结果如下图:


    是不是很神奇,不管你觉不觉得神奇,反正我是觉得神奇(好像暴露了我没有见过世面啊 大笑)。

    当然直方图在数据可视化当中用的也不少,生成直方图的代码如下:

    from matplotlib import pyplot
    #bins代表显示为几个直方
    pyplot.hist([0 ,10, 25, 13, 14, 55, 56, 77, 78, 89], bins = 3)
    pyplot.show()
    代码执行结果如下:

    分享技术,共同进步,构建美好社会。
    展开全文
  • jfreechart_生成折线图,饼图,柱状图,堆栈柱状图
  • java生成 折线图

    万次阅读 多人点赞 2019-01-21 11:10:32
    标题上就是生成的效果了, 下面是代码 package com.szboanda.ewaq_hn.jjrbg; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Font; import java.awt.Paint; import java.io.File; ...
    Charts
    标题

    上图就是生成的效果了, 下面是代码

    
    
    package com.szboanda.ewaq_hn.jjrbg;
    
    import java.awt.BasicStroke;
    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Paint;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.text.NumberFormat;
    import java.util.List;
    import java.util.Vector;
    
    import javax.swing.SwingUtilities;
    
    import org.jfree.chart.ChartFactory;
    import org.jfree.chart.ChartPanel;
    import org.jfree.chart.ChartUtilities;
    import org.jfree.chart.JFreeChart;
    import org.jfree.chart.StandardChartTheme;
    import org.jfree.chart.axis.ValueAxis;
    import org.jfree.chart.block.BlockBorder;
    import org.jfree.chart.labels.ItemLabelAnchor;
    import org.jfree.chart.labels.ItemLabelPosition;
    import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
    import org.jfree.chart.plot.CategoryPlot;
    import org.jfree.chart.plot.DefaultDrawingSupplier;
    import org.jfree.chart.plot.PieLabelLinkStyle;
    import org.jfree.chart.renderer.category.LineAndShapeRenderer;
    import org.jfree.chart.renderer.category.StandardBarPainter;
    import org.jfree.chart.renderer.xy.StandardXYBarPainter;
    import org.jfree.data.category.DefaultCategoryDataset;
    import org.jfree.ui.RectangleInsets;
    import org.jfree.ui.TextAnchor;
    
    
    /**
     * @Title:创建折线图
     * @author  
     * @since   JDK1.6
     * @history
     */
    public class CreatLineChart {
    
        /**
        * Jfreechart工具类
        * <p>
        * 解决中午乱码问题<br>
        * 用来创建类别图表数据集、创建饼图数据集、时间序列图数据集<br>
        * 用来对柱状图、折线图、饼图、堆积柱状图、时间序列图的样式进行渲染<br>
        * 设置X-Y坐标轴样式
        * <p>
        * 
        */
           private static String NO_DATA_MSG = "数据加载失败";
           private static Font FONT = new Font("宋体", Font.PLAIN, 12);
          
           public static Color[] CHART_COLORS = {
                   new Color(31,129,188), new Color(92,92,97), new Color(144,237,125), new Color(255,188,117),
                   new Color(153,158,255), new Color(255,117,153), new Color(253,236,109), new Color(128,133,232),
                   new Color(158,90,102),new Color(255, 204, 102) };//颜色
           /**
            * 静态代码块
            */
           static {
               setChartTheme();
           }
    
           /**
            * 无参构造器
            */
           public CreatLineChart() {
               
           }
           
           /** TODO  可以通过调用这个方法, 提供对应格式的参数即可生成图片,并存在指定位置
            * 生成一个这先出并保存为png格式,
            * @param title 图片标题
            * @param xtitle x轴标题
            * @param ytitle y轴标题
            * @param filepath 文件路径+文件名
            * @param categorie 横坐标类型
            * @param series 数据内容
            * @param width 图片宽度
            * @param height 图片高度
            * @throws Exception
            */
           public  static void CreateNewLineChartForPng(String title,String xtitle,String ytitle,String filepath,List<String> categorie,List<Serie> series,int width,int height) throws Exception{
                 ChartPanel  chartPanel = new CreatLineChart().createChart(title, xtitle, ytitle, categorie,series);
                 //将图片保存为png格式 
                 saveAsFile(chartPanel.getChart(),filepath,width,height);
           }
           
    
           /**
            * 中文主题样式 解决乱码
            */
           public static void setChartTheme() {
               // 设置中文主题样式 解决乱码
               StandardChartTheme chartTheme = new StandardChartTheme("CN");
               // 设置标题字体
               chartTheme.setExtraLargeFont(FONT);
               // 设置图例的字体
               chartTheme.setRegularFont(FONT);
               // 设置轴向的字体
               chartTheme.setLargeFont(FONT);
               chartTheme.setSmallFont(FONT);
               chartTheme.setTitlePaint(new Color(51, 51, 51));
               chartTheme.setSubtitlePaint(new Color(85, 85, 85));
    
               chartTheme.setLegendBackgroundPaint(Color.WHITE);// 设置标注
               chartTheme.setLegendItemPaint(Color.BLACK);//
               chartTheme.setChartBackgroundPaint(Color.WHITE);
               // 绘制颜色绘制颜色.轮廓供应商
               // paintSequence,outlinePaintSequence,strokeSequence,outlineStrokeSequence,shapeSequence
    
               Paint[] OUTLINE_PAINT_SEQUENCE = new Paint[] { Color.WHITE };
               // 绘制器颜色源
               DefaultDrawingSupplier drawingSupplier = new DefaultDrawingSupplier(CHART_COLORS, CHART_COLORS, OUTLINE_PAINT_SEQUENCE,
                       DefaultDrawingSupplier.DEFAULT_STROKE_SEQUENCE, DefaultDrawingSupplier.DEFAULT_OUTLINE_STROKE_SEQUENCE,
                       DefaultDrawingSupplier.DEFAULT_SHAPE_SEQUENCE);
               chartTheme.setDrawingSupplier(drawingSupplier);
    
               chartTheme.setPlotBackgroundPaint(Color.WHITE);// 绘制区域
               chartTheme.setPlotOutlinePaint(Color.WHITE);// 绘制区域外边框
               chartTheme.setLabelLinkPaint(new Color(8, 55, 114));// 链接标签颜色
               chartTheme.setLabelLinkStyle(PieLabelLinkStyle.CUBIC_CURVE);
    
               chartTheme.setAxisOffset(new RectangleInsets(5, 12, 5, 12));
               chartTheme.setDomainGridlinePaint(new Color(192, 208, 224));// X坐标轴垂直网格颜色
               chartTheme.setRangeGridlinePaint(new Color(192, 192, 192));// Y坐标轴水平网格颜色
    
               chartTheme.setBaselinePaint(Color.WHITE);
               chartTheme.setCrosshairPaint(Color.BLUE);// 不确定含义
               chartTheme.setAxisLabelPaint(new Color(51, 51, 51));// 坐标轴标题文字颜色
               chartTheme.setTickLabelPaint(new Color(67, 67, 72));// 刻度数字
               chartTheme.setBarPainter(new StandardBarPainter());// 设置柱状图渲染
               chartTheme.setXYBarPainter(new StandardXYBarPainter());// XYBar 渲染
    
               chartTheme.setItemLabelPaint(Color.black);
               chartTheme.setThermometerPaint(Color.white);// 温度计
    
               ChartFactory.setChartTheme(chartTheme);
           }
    
           
           /**
            * 创建类别数据集合
            */
           public static DefaultCategoryDataset createDefaultCategoryDataset(List<Serie> series, String[] categories) {
               DefaultCategoryDataset dataset = new DefaultCategoryDataset();
    
               for (Serie serie : series) {
                   String name = serie.getName();
                   Vector<Object> data = serie.getData();
                   if (data != null && categories != null && data.size() == categories.length) {
                       for (int index = 0; index < data.size(); index++) {
                           String value = data.get(index) == null ? "" : data.get(index).toString();
                           if (isPercent(value)) {
                               value = value.substring(0, value.length() - 1);
                           }
                           if (isNumber(value)) {
                               dataset.setValue(Double.parseDouble(value), name, categories[index]);
                           }
                       }
                   }
    
               }
               return dataset;
    
           }
    
           /**
            * 设置图例无边框,默认黑色边框
            */
           public static void setLegendEmptyBorder(JFreeChart chart) {
               chart.getLegend().setFrame(new BlockBorder(Color.WHITE));
    
           }
           
           /**
            * 是不是一个%形式的百分比
            * 
            * @param str
            * @return
            */
           public static boolean isPercent(String str) {
               return str != null ? str.endsWith("%") && isNumber(str.substring(0, str.length() - 1)) : false;
           }
           
           /**
            * 是不是一个数字
            * 
            * @param str
            * @return
            */
           public static boolean isNumber(String str) {
               return str != null ? str.matches("^[-+]?(([0-9]+)((([.]{0})([0-9]*))|(([.]{1})([0-9]+))))$") : false;
           }
           
           /**
            * 设置 折线图样式
            * 
            * @param plot
            * @param isShowDataLabels
            *            是否显示数据标签 默认不显示节点形状
            */
           public static void setLineRender(CategoryPlot plot, boolean isShowDataLabels) {
               setLineRender(plot, isShowDataLabels, false);
           }
           /**
            * 设置折线图样式
            * 
            * @param plot
            * @param isShowDataLabels
            *            是否显示数据标签
            */
           @SuppressWarnings("deprecation")
        public static void setLineRender(CategoryPlot plot, boolean isShowDataLabels, boolean isShapesVisible) {
               plot.setNoDataMessage(NO_DATA_MSG);
               plot.setInsets(new RectangleInsets(10, 10, 0, 10), false);
               LineAndShapeRenderer renderer = (LineAndShapeRenderer) plot.getRenderer();
    
               renderer.setStroke(new BasicStroke(1.5F));
               if (isShowDataLabels) {
                   renderer.setBaseItemLabelsVisible(true);
                   renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator(StandardCategoryItemLabelGenerator.DEFAULT_LABEL_FORMAT_STRING,
                           NumberFormat.getInstance()));
                   renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE1, TextAnchor.BOTTOM_CENTER));// weizhi
               }
               renderer.setBaseShapesVisible(isShapesVisible);// 数据点绘制形状
               setXAixs(plot);
               setYAixs(plot);
    
           }
    
           
           /**
            * 设置类别图表(CategoryPlot) X坐标轴线条颜色和样式
            * 
            * @param axis
            */
           public static void setXAixs(CategoryPlot plot) {
               Color lineColor = new Color(31, 121, 170);
               plot.getDomainAxis().setAxisLinePaint(lineColor);// X坐标轴颜色
               plot.getDomainAxis().setTickMarkPaint(lineColor);// X坐标轴标记|竖线颜色
    
           }
    
           /**
            * 设置类别图表(CategoryPlot) Y坐标轴线条颜色和样式 同时防止数据无法显示
            * 
            * @param axis
            */
           public static void setYAixs(CategoryPlot plot) {
               Color lineColor = new Color(192, 208, 224);
               ValueAxis axis = plot.getRangeAxis();
               axis.setAxisLinePaint(lineColor);// Y坐标轴颜色
               axis.setTickMarkPaint(lineColor);// Y坐标轴标记|竖线颜色
               // 隐藏Y刻度
               axis.setAxisLineVisible(false);
               axis.setTickMarksVisible(false);
               // Y轴网格线条
               plot.setRangeGridlinePaint(new Color(192, 192, 192));
               plot.setRangeGridlineStroke(new BasicStroke(1));
    
               plot.getRangeAxis().setUpperMargin(0.1);// 设置顶部Y坐标轴间距,防止数据无法显示
               plot.getRangeAxis().setLowerMargin(0.1);// 设置底部Y坐标轴间距
    
           }
           
           /**
            * 必须设置文本抗锯齿
            */
           public static void setAntiAlias(JFreeChart chart) {
               chart.setTextAntiAlias(false);
    
           }
    
           //-----------------------------------------------------------------------------------------------------------------
           /**
            * 
            * 折线图
            *       <p>
            *       创建图表步骤:<br/>
            *       1:创建数据集合<br/>
            *       2:创建Chart:<br/>
            *       3:设置抗锯齿,防止字体显示不清楚<br/>
            *       4:对柱子进行渲染,<br/>
            *       5:对其他部分进行渲染<br/>
            *       6:使用chartPanel接收<br/>
            * 
            *       </p>
            */
           //创建折线图图表
           public DefaultCategoryDataset createDataset(List<String> categorie,List<Serie> series) {
               // 标注类别
               String[] categories = categorie.toArray(new String[categorie.size()]);
               //横坐标
    //           String[] categories = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
    //           series = new Vector<Serie>();
    //           // 柱子名称:柱子所有的值集合
    //           //纵坐标
    //           series.add(new Serie("Tokyo", new Double[] { 49.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4 }));
    //           series.add(new Serie("New York", new Double[] { 83.6, 78.8, 98.5, 93.4, 106.0, 84.5, 105.0, 104.3, 91.2, 83.5, 106.6, 92.3 }));
    //           series.add(new Serie("London", new Double[] { 48.9, 38.8, 39.3, 41.4, 47.0, 48.3, 59.0, 59.6, 52.4, 65.2, 59.3, 51.2 }));
    //           series.add(new Serie("Berlin", new Double[] { 42.4, 33.2, 34.5, 39.7, 52.6, 75.5, 57.4, 60.4, 47.6, 39.1, 46.8, 51.1 }));
               // 1:创建数据集合
               DefaultCategoryDataset dataset = CreatLineChart.createDefaultCategoryDataset(series, categories);
               return dataset;
           }
    
           /**
            * 创建折线图
            * @param title 折线图标题
            * @param xtitle x轴标题
            * @param ytitle y轴标题
            * @param categorie 横坐标类别
            * @param series 数据集
            * @return
            * @throws Exception
            */
           public ChartPanel createChart(String title,String xtitle,String ytitle,List<String> categorie,List<Serie> series) throws Exception {
               
               // 2:创建Chart[创建不同图形]
               JFreeChart chart = ChartFactory.createLineChart(title, xtitle, ytitle, createDataset(categorie,series));
               // 3:设置抗锯齿,防止字体显示不清楚
               CreatLineChart.setAntiAlias(chart);// 抗锯齿
               // 4:对柱子进行渲染[[采用不同渲染]]
               CreatLineChart.setLineRender(chart.getCategoryPlot(), false,true);//
               // 5:对其他部分进行渲染
               CreatLineChart.setXAixs(chart.getCategoryPlot());// X坐标轴渲染
               CreatLineChart.setYAixs(chart.getCategoryPlot());// Y坐标轴渲染
               // 设置标注无边框
               chart.getLegend().setFrame(new BlockBorder(Color.WHITE));
               // 6:使用chartPanel接收
               ChartPanel chartPanel = new ChartPanel(chart);
               return chartPanel;
           }
    
           
           /**
            * 主方法 用来测试  `
            * @param args
            */
           public static void main(String[] args) {
    //           final JFrame frame = new JFrame();
    //           frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    //           frame.setSize(1024, 420);
    //           frame.setLocationRelativeTo(null);
            try {
                List<String> categorie = null;
                List<Serie> series = null;
                //横坐标
                String[] categories = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
                series = new Vector<Serie>();
                // 柱子名称:柱子所有的值集合
                //纵坐标
                series.add(new Serie("Tokyo", new Double[] { 49.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4 }));
                series.add(new Serie("New York", new Double[] { 83.6, 78.8, 98.5, 93.4, 106.0, 84.5, 105.0, 104.3, 91.2, 83.5, 106.6, 92.3 }));
                series.add(new Serie("London", new Double[] { 48.9, 38.8, 39.3, 41.4, 47.0, 48.3, 59.0, 59.6, 52.4, 65.2, 59.3, 51.2 }));
                series.add(new Serie("Berlin", new Double[] { 42.4, 33.2, 34.5, 39.7, 52.6, 75.5, 57.4, 60.4, 47.6, 39.1, 46.8, 51.1 }));
                
                ChartPanel  chartPanel = new CreatLineChart().createChart(NO_DATA_MSG, NO_DATA_MSG, NO_DATA_MSG, categorie,series);
    //            frame.getContentPane().add(chartPanel);
    //            frame.setVisible(true);
                //将图片保存为png格式 
    //            saveAsFile(chartPanel.getChart(),"D:\\1\\lol.png",900,500);
                CreateNewLineChartForPng("lol2.png", NO_DATA_MSG, NO_DATA_MSG, NO_DATA_MSG, categorie, series, 900, 500);
                
            } catch (Exception e1) {
                e1.printStackTrace();
            }
            
            //swing 运行
               SwingUtilities.invokeLater(new Runnable() {
                   @Override
                   public void run() {
                       // 创建图形
                    try {
                        
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                   }
               });
           }
          
           
            
            /**
             * 将图表保存为PNG、JPEG图片
             * @param chart  折线图对象
             * @param outputPath 文件保存路径, 包含文件名
             * @param weight  宽
             * @param height 高
             * @throws Exception
             */
           public static void saveAsFile(JFreeChart chart, String outputPath, int weight, int height)throws Exception {      
               FileOutputStream out = null;      
                   File outFile = new File(outputPath);      
                   if (!outFile.getParentFile().exists()) {      
                       outFile.getParentFile().mkdirs();      
                   }      
                   out = new FileOutputStream(outputPath);      
                   // 保存为PNG      
                   ChartUtilities.writeChartAsPNG(out, chart, weight, height);      
                   // 保存为JPEG      
                   // ChartUtilities.writeChartAsJPEG(out, chart, weight, height);      
                   out.flush();      
                   if (out != null) {      
                       try {      
                           out.close();      
                       } catch (IOException e) {      
                           // do nothing  
                           e.printStackTrace();
                       }      
    
               }      
           }
           
           
           
           
    }
       
    

    下面是 一个实体类

     

    package com.szboanda.ewaq_hn.jjrbg;
    
    import java.io.Serializable;
    import java.util.Vector;
    
    /**
     * 系列:名字和数据集合 构成一条曲线</br> 可以将serie看作一根线或者一根柱子:
     * 
     * <p>
     * 参照JS图表来描述数据:series: [{ name: 'Tokyo', data: [7.0, 6.9, 9.5, 14.5]
     * }, { name: 'New York', data: [-0.2, 0.8, 5.7, 11.3} ]
     * 
     * 
     */
    public class Serie implements Serializable {
    
        private static final long serialVersionUID = 1L;
        private String name;// 名字
        private Vector<Object> data;// 数据值ֵ
    
        public Serie() {
    
        }
    
        /**
         * 
         * @param name
         *            名称(线条名称)
         * @param data
         *            数据(线条上的所有数据值)
         */
        public Serie(String name, Vector<Object> data) {
    
            this.name = name;
            this.data = data;
        }
    
        /**
         * 
         * @param name
         *            名称(线条名称)
         * @param array
         *            数据(线条上的所有数据值)
         */
        public Serie(String name, Object[] array) {
            this.name = name;
            if (array != null) {
                data = new Vector<Object>(array.length);
                for (int i = 0; i < array.length; i++) {
                    data.add(array[i]);
                }
            }
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Vector<Object> getData() {
            return data;
        }
    
        public void setData(Vector<Object> data) {
            this.data = data;
        }
    
    }
    

    上面代码是一个完整的类, 可以通过调用其中的 CreateNewLineChartForPng() 方法 并传入对应参数自动生成折线图

    展开全文
  • python爬取二手房库存,存数数据库,生成折线图(上) 想着快要买房了,可是房价又那么的贵。那么为啥不是自己爬点二手房的价格走势图。看看那里的房子适合自己(虫啊!!!) 打算用python3 django2.1 mysql5.7 做...
  • .net读取数据库表中数据在页面生成折线图 本人是查阅多人博客,反复比较调试,得到通俗易懂的方法和代码。请按以下步骤一步一步理解。 用html的img标签在页面上显示最后生成的折线图 在你需要展现折线图的aspx...

    .net读取数据库表中数据在页面生成折线图

    本人是查阅多人博客,反复比较调试,得到通俗易懂的方法和代码。请按以下步骤一步一步理解。

    用html的img标签在页面上显示最后生成的折线图

    在你需要展现折线图的aspx页面放置下面两行代码:(我大概介绍下数据库,一个小区的平均价在不同时间的价格不同)

    <%string xqnames = Xqname;%> //xqnames是我在数据库中查找的字段条件:小区名称
     //Xqname是我在页面后台代码定义的一个变量:public string Xqname = "";
    <img src="show_linechart.aspx?xqm=<%=xqnames %>" id="show_pic" onclick="this.src='show_linechart.aspx?xqm='<%=xqnames %>"/>
    

    获取了小区名后,通过img标签的src属性传递小区名到show_linechart.aspx页面。下面介绍show_linechart.aspx的页面和后台代码。

    通过show_linechart.aspx页面读取数据,生成折线图

    画布的坐标布局原理
    C#画布的坐标布局原理

    //页面代码
    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="show_linechart.aspx.cs" Inherits="AutomatedValuation.Jzpg.show_linechart" %>
    
    //页面后台代码
    using AutomatedValuation.MyDBClass;
    using DocumentFormat.OpenXml.Packaging;
    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using ValuationBLL;//调用三层架构的业务逻辑层
    using ValuationModel;//调用三层架构的model层
    using Ajax;
    using System.Data;
    using System.Drawing;
    using System.Drawing.Drawing2D;
    using System.Windows.Forms;//引入窗体命名空间,支持窗体相关的类
    
    namespace AutomatedValuation.Jzpg
    {
        public partial class show_linechart : System.Web.UI.Page
        {
            protected override void OnPreInit(EventArgs e)
            {
                base.OnPreInit(e);
                this.newlinechart();
            }
    
            //获取小区名,生成折线图在页面上显示出来
            public void newlinechart()
            {
                //获取传递的小区名值
                string xqm = "";
                xqm = Request.QueryString["xqm"];
                if (xqm == "" || xqm == null)
                    return;
                string VillageName = xqm;
                string strChartName = VillageName + "价格趋势折线图";//折线图的标题名称
                string yName = "价格";//纵坐标的名称
                string xName = "时间";//横坐标的名称
                int iyMaxValue = 14000;//纵坐标的最大值
                double dyAveValue = 46.67;//14000/(360-60) 纵坐标的最大值/纵坐标的最大高度300
                string xdbColumnName = "Time";//横坐标的数据在数据库中的字段名称
                string ydbColumnName = "Xqjzj";//纵坐标的数据在数据库中的字段名称
                Get_CurveData(VillageName, strChartName, yName, xName, iyMaxValue, dyAveValue, xdbColumnName, ydbColumnName, this.Context);
            }
    
            /// <summary>
            /// 获取数据 
            /// strChartName:图名称;
            /// yName:纵坐标名称;
            /// xName:横坐标名称;
            /// iyMaxValue:纵坐标最大值;为14000
            /// dyAveValue:纵坐标单位值=(纵坐标最大值/纵坐标的最大高度300)
            /// xdbColumnName:横坐标绑定显示数据表值的列名;
            /// ydbColumnName:纵坐标绑定显示数据表值得列名;
            /// </summary>
            public void Get_CurveData(string VillageName, string strChartName, string yName, string xName, int iyMaxValue, double dyAveValue, string xdbColumnName, string ydbColumnName, HttpContext hl)
            {
                BasePriceBLL bll = new BasePriceBLL();//
                BasePrice model = new BasePrice();//以上两个类是我用三层架构方法读取数据库数据的方法
                DataSet ds = bll.GetModelset(VillageName);
                //以下是BasePriceBLL.GetModelset(VillageName)的方法
                (
                	/// <summary>
            		/// 获得数据列表以dataset的形式返回
            		/// </summary>
            		public DataSet GetModelset(string VillageName)
            		{
            			private readonly BasePriceDAL dal = new BasePriceDAL();
                		return dal.Getset(VillageName);//返回的是每个小区不同时间的小区基准价格
            		}
            		//以下是BasePriceDAL.Getset(VillageName)的方法
            		/// <summary>
            	/// 获得一个小区12次不同时间点的价格
            	/// </summary>
            	public DataSet Getset(string VillageName)
            	{
                	int mm = DateTime.Now.Month;//当前月份
                	int yy = DateTime.Now.Year;//当前年份
                	if(mm >= 1 && mm <= 3)
                	{
                    	mm =3;//第一季度取3月份
                	}
                	else if(mm >= 4 && mm <= 6)
                	{
                    	mm = 6;//第二季度取6月份
                	}
                	else if (mm >= 7 && mm <= 9)
                	{
                    	mm = 9;//第三季度取9月份
                	}
                	else if (mm >= 10 && mm <= 12)
                	{
                    	mm = 12;//第四季度取12月份
                	}
                	StringBuilder strSql = new StringBuilder();
                	strSql.Append("select top 12 Xqjzj,Time ");
                	strSql.Append("  from BasepriceTendency ");
                	strSql.Append(" where Xqm=@Xqm ");//order by Time 
                	strSql.Append("  and (datepart(mm,Time)=12 or (datepart(mm,Time)=@nowmm and datepart(YY,Time)=@nowyy)) order by Time");
                	SqlParameter[] parameters = {
                        	new SqlParameter("@Xqm",  SqlDbType.NVarChar,600),
                        	new SqlParameter("@nowmm", SqlDbType.Int,4),
    						new SqlParameter("@nowyy", SqlDbType.Int,4)
                	};
                	parameters[0].Value = VillageName;
                	parameters[1].Value = mm;
                	parameters[2].Value = yy;
                	DataSet ds = DbHelperSQL.Query(strSql.ToString(), parameters);
                	return ds;
            	}
                )
                if (ds.Tables[0].Rows.Count == 1)
                {
                    return;//如果读取到数据库中该小区的价格数据只有一个则不生成折线图去显示
                }
                else
                {
                    draw(ds.Tables[0], strChartName, yName, xName, iyMaxValue, dyAveValue, xdbColumnName, ydbColumnName, hl);//多个数据就显示
                }
            }
    
            public void draw(DataTable dt, string strChartName, string yName, string xName, int iyMaxValue, double dyAveValue, string xdbColumnName, string ydbColumnName, HttpContext hc)
            {
                //取得记录数量 
                int count = dt.Rows.Count;
                //记算图表宽度 
                int wd = 80 + 20 * (count - 1);
                //设置最小宽度为1000 
                if (wd < 600) wd = 1000;
                //生成Bitmap对像 
                Bitmap img = new Bitmap(wd, 500);//500为折线图的高
                //生成绘图对像 
                Graphics g = Graphics.FromImage(img);
                try
                {
                    //定义白色画笔 C1C1C1
                    Pen Wh = new Pen(Color.White);
                    //定义黑色画笔 
                    Pen Bp = new Pen(Color.Black);
                    //定义红色画笔 
                    Pen Rp = new Pen(Color.Red);
                    //定义银灰色画笔 
                    Pen Sp = new Pen(Color.FromArgb(193,193,193));
                    //定义蓝色画笔
                    Pen Blp = new Pen(Color.FromArgb(10, 25, 167));
                    //定义绿色画笔
                    Pen Gre = new Pen(Color.Green);
                    //定义黄色画笔
                    Pen Org = new Pen(Color.Orange);
                    //定义大标题字体 
                    Font Bfont = new Font("黑体", 14, FontStyle.Bold);//Arial
                    //定义一般字体 
                    Font font = new Font("黑体", 9);
                    //定义大点的字体 
                    Font Tfont = new Font("黑体", 12);
                    //定义横坐标间隔,(最佳值是总宽度-留空宽度[左右侧都需要])/(记录数量-1) 
                    int xSpace = (wd - 100) / (count - 1);
                    //定义纵坐标间隔,不能随便修改,跟高度和横坐标线的条数有关,最佳值=(绘图的高度-上面留空-下面留空) 
                    int ySpace = 30;
                    //纵坐标最大值和间隔值 
                    int yMaxValue = iyMaxValue;
                    //绘制底色 
                    g.DrawRectangle(new Pen(Color.White, 1000), 0, 0, img.Width, img.Height);
                    //定义黑色过渡型笔刷 改成红色试试
                    LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, img.Width, img.Height), Color.Black, Color.Black, 1.2F, true);
                    //定义蓝色过渡型笔刷 
                    LinearGradientBrush Bluebrush = new LinearGradientBrush(new Rectangle(0, 0, img.Width, img.Height), Color.FromArgb(10, 25, 167), Color.FromArgb(10, 25, 167), 1.2F, true);
                    //绘制大标题 
                    //下面出现的数字以一对一对的出现,先是横坐标x的值,再是纵坐标y的值
                    g.DrawString(strChartName, Bfont, brush, 40, 5);
                    //绘制信息简报 
                    string info = "折线图生成时间:" + DateTime.Now.ToString();
                    g.DrawString(info, Tfont, brush, 200, 25);
                    //绘制图片边框 
                    g.DrawRectangle(Sp, 0, 0, img.Width - 1, img.Height - 1);
                    //绘制竖坐标轴 
                    g.DrawLine(Bp, 40, 55, 40, 360);//从纵坐标55到360
                    //绘制横坐标轴 x2的60是右侧空出部分 
                    g.DrawLine(Bp, 40, 360, 60 + xSpace * (count - 1), 360);
                    //绘制竖坐标标题 
                    g.DrawString(yName, Tfont, brush, 5, 34);
                    //绘制横坐标标题 
                    g.DrawString(xName, Tfont, brush, 953, 365);//这里改横坐标的标题位置
                    
                    //绘制竖坐标线 从这里开始认真的分析
                    for (int i = 0; i < count; i++)
                    {
                        g.DrawLine(Bp, 40 + xSpace * i, 60, 40 + xSpace * i, 360);//连接纵坐标两点的之间的连线,纵坐标的数值从0到14000占用的360-60=300的像素高
                    }
    
                    //绘制时间轴坐标标签 
                    for (int i = 0; i < count; i++)
                    {
                        //取时间,只要年和日期
                        string sts = dt.Rows[i][xdbColumnName].ToString();
                        string st = sts.Substring(0,10);
                        //将坐标的标签变成竖向的显示出来
                        StringFormat strF = new StringFormat(StringFormatFlags.DirectionVertical);
                        //以下代码可以将原本内容从上往下走变成从下往上走,已将它注释了。
                        //g.TranslateTransform(100.0F, 100.0F);
                        //g.RotateTransform(180.0F);
                        g.DrawString(st, Tfont, brush, 30 + xSpace * i, 370, strF);//黑色画横坐标的标签 字号需要为12 改
                    }
                    //绘制横坐标线 黑色改成蓝色
                    for (int i = 0; i < 10; i++)
                    {
                        g.DrawLine(Bp, 40, 60 + ySpace * i, 40 + xSpace * (count - 1), 60 + ySpace * i);
                        //横坐标轴的值间隔是最大值除以间隔数 
                        int s = yMaxValue - i * (yMaxValue / 10);
                        //绘制发送量轴坐标标签 
                        g.DrawString(s.ToString(), font, brush, 10, 60 + ySpace * i);
                    }
    
                    //处理小区价格的数据
                    string[] strArr = new string[dt.Rows.Count];
                    for (int i = 0; i < count; i++)
                    {
                        string strValue = dt.Rows[i][ydbColumnName].ToString();
                        strArr[i] = strValue;
                    }
                    //200/30 这里需要进行重点处理 对纵坐标的点准确到位
                    //定义纵坐标单位数值=纵坐标设置的最大值/纵坐标的标量最大值
                    double yAveValue = dyAveValue;//为
                    //定义曲线转折点 
                    Point[] p = new Point[count];
                    ///*******************画中值线///
                    for (int i = 0; i < count; i++)
                    {
                        p[i].X = 40 + xSpace * i;
    
                        p[i].Y = 360 - Convert.ToInt32(Convert.ToDouble(strArr[i]) / yAveValue);//纵坐标360对应的是纵坐标的数值为0的位置
                    }
                    for (int i = 0; i < count; i++)
                    {
                        //绘制发送记录点的发送量 
                        g.DrawString(strArr[i], Tfont, Bluebrush, p[i].X - 13, p[i].Y - 15);//价格显示变大点 12号字
                        //绘制发送记录点 
                        g.DrawRectangle(Rp, p[i].X - 1, p[i].Y - 1, 2, 2);
                    }
                    //绘制折线图 
                    //g.DrawLines(Rp, p);
                    //绘制自定义张力的曲线图(0.5F是张力值,默认就是这个值)
                    g.DrawCurve(Rp, p, 0.5F);
                    //保存绘制的图片 
                    MemoryStream stream = new MemoryStream();
                    img.Save(stream, System.Drawing.Imaging.ImageFormat.Gif);
                    //图片输出 在页面上输出
                    hc.Response.ClearContent();
                    hc.Response.ContentType = "image/Gif";//保存为gif格式
                    hc.Response.BinaryWrite(stream.ToArray());
                    hc.Response.End();
                }
                finally
                {
                    g.Dispose();
                    img.Dispose();
                }
            }
        }
    }
    

    生成的折线图如下:
    在这里插入图片描述

    展开全文
  • 利用JFreeChart生成折线图

    利用JFreeChart生成折线图

    展开全文
  • 如图,PHPGD库生成折线图; <?php // 1.创建画布 $width = 600; $height= 400; $image=imagecreatetruecolor($width,$height); $red = imagecolorallocate($image, 45, 56, 12); $fff = imagecolorallocate...
  • 1.新建一个Excel表格,并填入数据 2.选定一组数据,会有个快捷计算的小图标,快捷键是Ctrl+Q 3.生成折线图 转载于:https://www.cnblogs.com/-yjx-/p/8358238.html...
  • 代码如下:from openpyxl import load_workbook# 生成折线图from openpyxl.chart importlinechart,referencewb=load_workbook(销售数据.xlsx)sheet=wb.activechart=linechart()#... 新冠疫情已经持续好几个月了,...
  • 说明:这种方法是Thinkphp3.2版本引入的生成图片折线图并将折线图保存到本地文件中vendor('Jpgraph.jpgraph');vendor('Jpgraph.jpgraph_line');//数据$ydata=explode(",",$value);//画布的大小$width=450;$height=...
  • 利用Aspose.words .ZedGraph 生成折线图 报表
  • 请教示例外码,最好能带注释的,还有就是数据并不确定能有多少个,我先做的事把数据写进EXCEL表格中,然后生成折线图,所以请教大神如何生成折线图
  • JS解析xlsx,生成折线图

    2018-12-24 12:25:30
    js解析Excel文件,解析后的数据用Echarts折线图展示,希望对大家有用~
  • echarts生成折线图实现标签一上一下,避免数据过长重叠 图示(以此图为例) 代码展示 日常积累
  • Java生成折线图

    千次阅读 2018-12-26 15:49:36
    所需jar包:jcommon-1.0.23.jar、jfreechart-1.0.19.jar 所需js: overlib.js

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 27,136
精华内容 10,854
关键字:

如何生成折线图