精华内容
下载资源
问答
  • QCustomPlot类编写动态折线图,可坐标平移 看本博文前,请先弄清楚QCustomPlot的配置及使用方法,具体请参考网页: http://www.myexception.cn/program/1912498.html,本篇博文使用的是第一种方法,也就是提升法。...

    QCustomPlot类编写动态折线图,可坐标平移

    看本博文前,请先弄清楚QCustomPlot的配置及使用方法,具体请参考网页:

    http://www.myexception.cn/program/1912498.html,本篇博文使用的是第一种方法,也就是提升法。QCustomPlot类的源码库下载地址为:

    http://download.csdn.net/detail/a2886015/9697439

    首先新建Qt APP项目,ui文件使用QWidget,建好后添加qcustomplot.h和qcustomplot.cpp文件到工程里,然后打开ui文件,添加个widget部件到界面上,采用栅格布局,最后将widget部件提升为QCustomPlot类。这些都是QCustomPlot类的配置部分,就不多说了。

    widget.h文件里写入如下代码:

    #ifndef WIDGET_H

    #define WIDGET_H

     

    #include <QWidget>

    #include "qcustomplot.h"

    #include <QVector>

     

    namespace Ui {

    class Widget;

    }

     

    class Widget : public QWidget

    {

        Q_OBJECT

     

    public:

        double Buff[100];    //数据缓冲数组

        unsigned char CurrentData;

        //实时数据,嵌入式系统中,可将下位机传上来的数据存于此变量中

        explicit Widget(QWidget *parent = 0);

        ~Widget();

       void ShowLine(QCustomPlot *customPlot);//显示折线图

    public slots:

        void ReadyShowLine();

        //本例中用于修改实时数据,并调用ShowLine函数

    private:

        Ui::Widget *ui;

        unsigned long int flag;

     

     

    };

     

    #endif // WIDGET_H

     

    这部分说下为什么需要缓冲区Buff数组,以及CurrentData变量。QCustomPlot画折线图主要依靠setData()函数,而这个函数的原型为:

    void QCPGraph::setData(const QVector<double> &key,const QVector<double> &value)

    里面的2个参数分别是X坐标值和Y坐标值,QVector<double>里的double可以理解为点的编号。可以看到,setData()函数的2个形参是QVector类型的,而QVector这个容器类是在当前程序的内存的相邻位置开辟一段空间,一般只在函数内部定义QVector类,当程序出了函数后立刻释放,如果你在.h文件中将QVector定义为类的公共或私有变量,程序会报错,也就是说QVector类不具有全局记忆性。这就需要缓冲区Buff数组进行记忆,并使用CurrentData变量接收新来的数据。

    接下来是widget.cpp文件里的代码:

    #include "widget.h"

    #include "ui_widget.h"

    #include <QTimer>

    #include <QTime>

     

    QVector<double> x(10),y(10);

    Widget::Widget(QWidget *parent) :

        QWidget(parent),

        ui(new Ui::Widget)

    {

        ui->setupUi(this);

        for(int i=0;i<100;i++)

            {

                Buff[i] = 0;

            }

            CurrentData=0;

            flag=0;

            QTimer *timer = new QTimer(this);

            timer->start(200);//每200ms重绘一次折线图

            connect(timer,SIGNAL(timeout()),this,SLOT(ReadyShowLine()));

            ui->widget->xAxis->setRange(0,100);

            ui->widget->yAxis->setRange(0,100);

            ui->widget->xAxis->setLabel("time");

            ui->widget->yAxis->setLabel("data");

            //初始化坐标系范围和意义

    }

     

    Widget::~Widget()

    {

        delete ui;

    }

     

    void Widget::ShowLine(QCustomPlot *customPlot)

    {

        QVector<double> Xvalue(100);

        QVector<double> Yvalue(100);

        //无论如何,折线图一次能展示的区域总是有限的,这里一次最多绘制100个点

        //如果你想图形更加精细,可以多定义些点

           if(flag<=99){  //当图形中不足100个点时,进入到if句里处理

               Buff[flag]=CurrentData;//将新数据存入缓冲区

               for(int i=0;i<=flag;i++){

                   Xvalue[i]=i;

                   Yvalue[i]=Buff[i];

                  }//分别赋值X轴,Y轴值,产生多少个实时值,就赋值多少个点

                   flag++;

                   customPlot->addGraph();

                   customPlot->graph(0)->setPen(QPen(Qt::red));

                   customPlot->graph(0)->setData(Xvalue,Yvalue);

                   customPlot->xAxis->setLabel("time");

                   customPlot->yAxis->setLabel("data");

                   customPlot->xAxis->setRange(0,100);

                   customPlot->yAxis->setRange(0,100);

                   customPlot->replot();//重绘图形

                   return;

               }

          //当实时数据超过100个时,进行以下处理

           for(int i=0;i<99;i++)

           {

               Buff[i]=Buff[i+1];

           }

           Buff[99]=CurrentData;

           //缓冲区整体左移,Buff[0]丢弃,Buff[99]接收新数据

           for(int i=0;i<100;i++)

           {

               Xvalue[i] = flag-(99-i);

               Yvalue[i] =Buff[i];

           }//X,Y轴赋满100个值,其中X轴要跟着增加

           customPlot->addGraph();

           customPlot->graph(0)->setPen(QPen(Qt::red));

           customPlot->graph(0)->setData(Xvalue,Yvalue);

     

           customPlot->xAxis->setLabel("time");

           customPlot->yAxis->setLabel("data");

     

           customPlot->xAxis->setRange(0+flag-99,100+flag-99);

           //X坐标轴跟着平移

           customPlot->yAxis->setRange(0,100);

           customPlot->replot();//重绘图形

           flag++;

    }

     

    void Widget::ReadyShowLine()

    {

        CurrentData=CurrentData+5;

        if(CurrentData>=80) CurrentData=0;//产生锯齿波,最大值是75

        ShowLine(ui->widget);

    }

     

    这部分的解释代码里都写上了,就不多说了,最后是main.cpp里的代码,保持不变就可以了:

    #include "widget.h"

    #include <QApplication>

     

     

    int main(int argc, char *argv[])

    {

        QApplication a(argc, argv);

        Widget w;

        w.show();

     

        return a.exec();

    }

     

    最后给出4张结果图:

     

     

     

     


    展开全文
  • 示例:白度上随便搜一个股票如 ”中国石油股票行情“,那个走势和鼠标所在X坐标的指示线是用什么技术实现的?以及取值等,见。最好有示例代码的话发一份或者给个链接。lytd0903@163.com 非常感谢! ![图片...
  • html5绘制折线图详细代码(function (){window.addEventListener("load", function(){var data = [100,-1000,0,700];// 获取上下文var a_canvas = document.getElementById('a_canvas');var context = a_canvas....

    html5绘制折线图详细代码

    (function (){

    window.addEventListener("load", function(){

    var data = [100,-1000,0,700];

    // 获取上下文

    var a_canvas = document.getElementById('a_canvas');

    var context = a_canvas.getContext("2d");

    // 绘制背景

    var gradient = context.createLinearGradient(0,0,0,300);

    // gradient.addColorStop(0,"#e0e0e0");

    //gradient.addColorStop(1,"#ffffff");

    context.fillStyle = gradient;

    context.fillRect(0,0,a_canvas.width,a_canvas.height);

    // 描绘边框

    var grid_cols = data.length + 1;

    var grid_rows = 4;

    var cell_height = a_canvas.height / grid_rows;

    var cell_width = a_canvas.width / grid_cols;

    context.lineWidth = 1;

    context.strokeStyle = "#a0a0a0";

    // 结束边框描绘

    context.beginPath();

    // 准备画横线

    /*for (var col = 0; col <= grid_cols; col++) {

    var x = col * cell_width;

    context.moveTo(x,0);

    context.lineTo(x,a_canvas.height);

    }

    // 准备画竖线

    for(var row = 0; row <= grid_rows; row++){

    var y = row * cell_height;

    context.moveTo(0,y);

    context.lineTo(a_canvas.width, y);

    }*/

    //划横线

    context.moveTo(0,a_canvas.height/2);

    context.lineTo(a_canvas.width,a_canvas.height/2);

    //画竖线

    context.moveTo(0,0);

    context.lineTo(0,a_canvas.height);

    context.lineWidth = 1;

    context.strokeStyle = "#c0c0c0";

    context.stroke();

    var max_v =0;

    for(var i = 0; i

    var d=0;

    if(data[i]<0)

    {d=d-data[i];

    }

    else{d=data[i];};

    if (d > max_v) { max_v =d};

    }

    max_v = max_v * 1.1;

    // 将数据换算为坐标

    var points = [];

    for( var i=0; i < data.length; i++){

    var v= data[i];

    var px = cell_width * (i +1);

    var py = a_canvas.height/2 - a_canvas.height*(v / max_v)/2;

    points.push({"x":px,"y":py});

    }

    // 绘制折现

    context.beginPath();

    context.moveTo(points[0].x, points[0].y);

    for(var i= 1; i< points.length; i++){

    context.lineTo(points[i].x,points[i].y);

    }

    context.lineWidth = 2;

    context.strokeStyle = "#8BA9FF";

    context.stroke();

    //绘制坐标图形

    for(var i in points){

    var p = points[i];

    context.beginPath();

    context.arc(p.x,p.y,4,0,2*Math.PI);

    //实心圆

    /*

    context.fillStyle = "#000";*/

    //空心圆

    context.strokeStyle = "#000";

    context.stroke();

    context.fillStyle="white";

    context.fill();

    }

    //添加文字

    for(var i in points)

    { var p = points[i];

    context.beginPath();

    context.fillStyle="black";

    context.fillText(data[i], p.x + 1, p.y - 15);

    }

    },false);

    })();

    运行结果如下:

    c57d358303ac84411b90d531e076a972.png

    展开全文
  • 纯JS网页上的动态折线图

    千次阅读 2015-04-17 09:00:18
    用Javascript写了一个网页上的动态折线图,类似心电图的那种. 其中的画线用到的是我上一篇文章里写的那种方法. http://redstarofsleep.iteye.com/blog/1109116 先是简单的Demo页面: ...

    用Javascript写了一个网页上的动态折线图,类似心电图的那种.

    其中的画线用到的是我上一篇文章里写的那种方法.

    http://redstarofsleep.iteye.com/blog/1109116

    先是简单的Demo页面:

    <div class="outer" id="outer">
    		<div class="inner"></div>
    		<div class="inner"></div>
    		<div class="inner"></div>
    		<div class="inner"></div>
    		<div class="inner"></div>
    		<div class="inner"></div>
    		<div class="inner"></div>
    		<div class="inner"></div>
    		<div class="inner"></div>
    		<div class="inner"></div>
    	</div>
    	<input type="button" value="start" οnclick="startLine();"></input>
     

    然后是CSS:

    div.outer {
    	width: 402px;
    	height: 300px;
    	border: 1px solid #000000;
    }
    
    div.inner {
    	width: 40px;
    	height: 300px;
    	float: left;
    	margin: 0 0;
    }
     

    最后是核心的Javascript:

    // 起始点的纵坐标
    var startPoint;
    function startLine() {
    	startPoint = 0;
    	// 设定定时器,每秒钟更新一次
    	var timeLine = setInterval("doLine()",1000); 
    }
    function doLine() {
    	// 结束点的综坐标,这里以随机数来产生,实际中通过Ajax从后台取
    	var endPoint = Math.floor(Math.random() * 300);
    	// 获得大容器
    	var outer = document.getElementById('outer');
    	// 大容器中的第一个竖条
    	var firstInner = outer.getElementsByTagName('div')[0];
    	// 将第一个竖条中的已有线删除
    	var linePoint = firstInner.getElementsByTagName('div');
    	var length = linePoint.length;
    	for (var i = length-1; i >= 0; i--) {
    		firstInner.removeChild(linePoint[i]);
    	}
    	// 将第一个竖条放到大容器的最后
    	document.getElementById('outer').appendChild(firstInner);
    	// 在第一个竖条内画线(画线的方法用的是我上一篇博客里写的)
    	_jsline.line(0, startPoint, 40, endPoint, firstInner);
    	// 将这一次的结束点作为下一次的起始点
    	startPoint = endPoint;
    }
     

     

    实测Firefox5,IE9都是OK的,估计其它浏览器应该也问题不大.

    展开全文
  • php实现动态折线图,highcharts折线图

    千次阅读 2017-07-12 16:21:28
    title: {text: '趋势图'},//折线图名字 xAxis: {categories:eval(categor)},//横坐标下面展示名称,categor是已经拼接好的。格式是['2','3','4'] yAxis: { //Y轴左边展示的名字 title: {text: name}, //隔行...

    官网:https://www.hcharts.cn/docs/line-chart

    这是官方的静态写法。下面我简单介绍下php把 categorie和series循环为动态数据 往下看

    var chart = new Highcharts.Chart('container', {
    xAxis: {
        categories: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月']
    },
    
    series: [{
        name: '东京',
        data: [7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6]
    }, {
        name: '纽约',
        data: [-0.2, 0.8, 5.7, 11.3, 17.0, 22.0, 24.8, 24.1, 20.1, 14.1, 8.6, 2.5]
    }
    

    });

    作为一名php,我用的是数据渲染。简单讲下用法

    这里写图片描述

        0)首先写一个div展示趋势图,宽高视情况而定。
            <div id="container" style="min-width:700px;height:400px"></div>
    
        1)然后引入js
        <script type="text/javascript" src="路径/highcharts.js"></script>
    
     2)将控制器返回的数据接收到,
         $(function () 
         {
         // 1接收php返回的json数据 2 name是折线图左边展示的名字  调用Getseries函数
            var q=<?php echo $data;?>
            var name ='XXXX趋势图';
            Getseries(q,name)
        }
    
    3)此方法是循环得到的数据 最后调用GetD方法将拼接好的动态数据放进去
    
        function Getseries(q,name) {
        dataTmp = "";
        categor="[";
        $.each(q, function (i, field) 
        { 
            dataTmp += "{name: '" +  i+"',"+ "data:[";
            //视情况而定。如果返回的数据一循环即可搞定就不需要二次循环
            $.each(field,function(a,b)
            {
                dataTmp +=   + b['browse']  + ",";
                categor+="'"+b['time']+"',";
            });
            dataTmp+="]},";
    
        });
       categor+="]";
       GetD(dataTmp,categor,name);
    };
    
    
    4 )绑定数据信息 之前写的div的id值为container
    
    function GetD(dataw,categor,name) 
    {
        //实例化 highcharts
        $('#container').highcharts(
        {
            title: {text: '趋势图'},//折线图名字
            xAxis: {categories:eval(categor)},//横坐标下面展示名称,categor是已经拼接好的。格式是['2','3','4']
            yAxis: {  
                    //Y轴左边展示的名字
                    title: {text: name},
                    //隔行加背景色
                    alternateGridColor: '#FDFFD5'},
            legend:{
                  layout: 'vertical',
                  align: 'right',
                  verticalAlign: 'middle',
                  borderWidth: 0
              },
            series:eval("[" + dataw + "]")   //获取数据源操作信息
        });
    }
    

    这里已经写的很详细了。如果有不是很清楚的可以回复我一起交流。

    展开全文
  • Android 折线图绘制

    万次阅读 2017-03-29 12:34:49
    自定义View 折线图 点击事件处理
  • jfreechart 折线图 应用

    2009-10-21 13:00:43
    该程序为main 函数,定义了三个方法,分别是jfreechart三种实现折线图的类型,返回的是一个chart 本程序是把图片保存到本地,当然实际应用中,只要在程序和页面中做相关配置即可以使用。 因为图片带点透明,所以...
  • 这两日实现了使用python下载网页中的数据(网页上的TXT文档)并绘制成折线图 首先用urllib库中的urlopen函数打开网页,然后通过readlines方法读取数据,接下来就是最主要的也就是reportlab库,这个库可以将数据写入...
  • 前端---HTML5如何制作一个折线图

    万次阅读 2018-09-23 13:10:53
    在学习如何制作折线图,我们先学习一下canvas元素中CanvasRenderingContext2D对象提供的相关方法,通过使用坐标表换,开发者无须繁琐计算每个点的坐标,只需对坐标系整体表换即可.      CanvasRenderingContext2D...
  • Excel实现动态更新数据折线图

    万次阅读 2018-11-08 15:46:52
    一、数据源 数据源如下: 生成的数据透视表如下: 二、定义名称 打开公式菜单,选择定义名称,就打开定义名称弹框 定义三个名称,分别是tj,yw,rq ...选择 插入,折线图 这时会生成一个空的...
  • 网页上指定位置绘制折线图

    千次阅读 2010-12-28 10:20:00
    1 新建一个网页(.aspx),在网页上完成绘图代码。(绘图代码为转载) using System; using System.Data; using System.Configuration; using System.Collections; using System.Web...
  • 入门-初学使用d3.js完成折线图与曲线图 上一节我们简单的完成了一个柱状图的构造,今天继续学习d3.js,今天的目标是完成一个折线图和一个曲线图,曲线图只不过是在完成曲线图后在添加一个.interpolate("...
  • 利用matplotlib制作折线图 导入库/包: import numpy as np from matplotlib import pyplot as plt 代码块: x = range(1,8) #x轴的位置 y = [17,17,18,15,11,11,13] #传入x和y,通过plot画折线图 # plt.plot(x,y) ...
  • 简单使用canvas 绘制总量图,饼图,折线图
  • 参考链接:用plotly和plt画图的基本设置(标题、坐标轴、图例、注释、图像) - weixin_41670527的博客 - CSDN博客非常好的文章,值得推荐。一 用matplotlib.pyplot/或者seaborn画图import ''' matplotlib的图像都...
  • 最近一直使用echarts画折线图,在此做个记录 最后样式 代码 <!DOCTYPE html> <html style="height: 100%"> <head> <meta charset="utf-8"> <script src=...
  • android折线图的应用

    千次阅读 2015-09-01 18:23:34
    最近做项目遇到一个需求,要求显示温度的折线图,在网上搜索了下,一共有三个可以实现的办法:1.自定义view实现折线图,按目前的水平很难实现,所以果断放弃了。2.使用android系统自制的框架AChartEngine,这个框架...
  • Vue使用echarts画折线图

    2021-04-01 19:42:15
    Vue使用echarts画折线图实现内容安装echarts项目入口文件main.js中引入echarts在需要使用的组件中引入主要代码效果图 实现内容 同时显示两条折线 标定最大值、最小值、平均值 添加标题、图例 显示横纵坐标内容 ...
  • 统计图形种类繁多, 有柱状图, 折线图, 扇形图等等, 而统计图形的绘制方法也有很多, 有Flash制作的统计图形, 有水晶报表生成统计图形, 有专门制图软件制作, 也有编程语言自己制作的;这里我们用就C# 制作三...
  • .net读取数据库表中数据在页面生成折线图 本人是查阅多人博客,反复比较调试,得到通俗易懂的方法和代码。请按以下步骤一步一步理解。 用html的img标签在页面上显示最后生成的折线图 在你需要展现折线图的aspx...
  • 当你在网页绘制一个echarts折线图,但无法显示时,请参考以下排查方法。 一、布局检查(整个画布空白,连坐标轴都不显示) 打开浏览器控制台,查看你设定绘图区域的高度,如果高度为0,图是无法显示的。 如果你说...
  • 如何使用简单HTML和JavaScript制作复杂的“多折线图
  • 一、echarts简介1.1图表工具应用场景:网页工具:百度echarts highCharts学习:柱状图(条形图) 折线图 饼状图 地图 (数据交互)1.2 echarts点击下载1.下载echarts.js文件 官网下载 或者bootCDN下载2.写基本结构3.js...
  • python与数据可视化:使用matplotlib绘制折线图 一、matplotlib简介 matplotlib是python的一个数据可视化工具,是一个功能强大的数学绘图库,它能帮助程序员绘制出折线图或散点图等图表。 访问以下链接...
  • echarts实现折线图的绘制

    千次阅读 2018-07-20 11:51:16
    实现的是2013年到2017年,每个产品的数量统计折线图 代码如下: 首先从echarts官网上下载echarts.js文件 &lt;script src="echarts.js"&gt;&lt;/script&gt; &lt;!DOCTYPE ...
  • C# 绘制统计图(柱状图, 折线图, 扇形图) 统计图形种类繁多, 有柱状图, 折线图, 扇形图等等, 而统计图形的绘制方法也有很多, 有Flash制作的统计图形, 有水晶报表生成统计图形, 有专门制图软件制作, 也有编程...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,845
精华内容 1,138
关键字:

网页折线图坐标