您当前的位置: 首页 >  qt

龚建波

暂无认证

  • 4浏览

    0关注

    313博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Qt绘制热力图

龚建波 发布时间:2020-02-29 00:27:07 ,浏览量:4

0.前言

热力图是一种重要的数据可视化方式,可以直观地展现空间数据的疏密程度或频率高低。本文将使用QPainter+QImage来实现热力图绘制,效果参照百度ECharts图表库:

《从前慢》 --------木心

记得早先少年时

大家诚诚恳恳

说一句 是一句

清早上火车站

长街黑暗无行人

卖豆浆的小店冒着热气

从前的日色变得慢

车,马,邮件都慢

一生只够爱一个人

从前的锁也好看

钥匙精美有样子

你锁了 人家就懂了

目录

1.实现思路

2.实现细节

3.代码链接

4.参考

1.实现思路

主要步骤如下:

a.每个单独的点为径向渐变色的圆,且透明度从中心到边缘逐渐降低
    QRadialGradient gradient(posX,posY,radius); //径向渐变
    gradient.setColorAt(0,QColor(0,0,0,alpha)); //点的透明度
    gradient.setColorAt(1,QColor(0,0,0,0));
    painter.setBrush(gradient);
    painter.drawEllipse(QPointF(posX,posY),radius,radius);
b.多个点组合时,透明度是互相叠加的,所以我们先用透明度绘制一个Image(透明度就表示热度)
    //透明度用Format_Alpha8就行了
    _dataImg=QImage(ImgWidth,ImgHeight,QImage::Format_Alpha8);
    _dataImg.fill(Qt::transparent);
    //接下来追加绘制圆点
c.如果一个点出现多次,那么就需要有权重的概念,可以根据重复最多的点来作为计算的标准,也可以根据重复次数分段
    //权重统计表(把权重单独拿出来,就可以不用遍历数据点来计算了)
    //加()初始化为0
    int *_countTable=new int[ImgWidth*ImgHeight]();
    //以最大次数来计算该点的权重
    const uchar alpha=uchar(_countTable[posX+posY*ImgWidth]/(double)_maxCount*255);
d.透明度的图绘制完成后就可以填充颜色,颜色根据透明度从计算好的颜色表中查表获得
void MainWindow::drawHeatImg()
{
    //把alpha值转为颜色值
    for(int row=0;row            
关注
打赏
1655829268
查看更多评论
0.1260s