文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

微信小程序开发中如何使用canvas绘制坐标图

2023-06-26 08:05

关注

这篇文章主要为大家展示了“微信小程序开发中如何使用canvas绘制坐标图”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“微信小程序开发中如何使用canvas绘制坐标图”这篇文章吧。

线图

function draw(data, ctx) {  var width, height = 300, ratioX, ratioY, maxY, stepY;  var newArr = new Array();  //-------- 数据处理 -----------  if (data.time == null) {return;  }  if (data.type == 'day' || data.type == 'month') {var timeList = new Array();for (var i = 0; i < data.time.length; i++) {      if ((i % 4 == 0 && data.type == 'day') || (i % 5 == 0 && data.type == 'month')) {        timeList.push(data.time[i].substr(data.time[i].length - 5, 5));      }    }    data.time = timeList;  } else {for (var i = 0; i < data.time.length; i++) {      data.time[i] = data.time[i].substr(data.time[i].length - 5, 5);    }  }//这里是后台返回的数据,处理后展示在页面  // ---------- 获取屏宽 ---------------  wx.getSystemInfo({    success: function (res) {      width = res.windowWidth;    }  })  ratioX = parseInt((width - 60) / (data.time.length - 1));  ratioY = parseInt((height - 45) / 6);  //求value的最大值  for (var i = 0; i < data.list.length; i++) {    newArr.push(Math.max.apply(Math, data.list[i].value));  }  maxY = Math.max.apply(Math, newArr);  stepY = Math.ceil(maxY / 4);  // ------- 绘制坐标线 ------  ctx.beginPath();  for (var i = 0; i < 5; i++) {    ctx.save();    ctx.setStrokeStyle("#dde2e3");    ctx.setFillStyle("#848198");    ctx.setFontSize('8');    ctx.fillText(i * stepY, 0, 220 - i * ratioY);    ctx.moveTo(22, 215 - i * ratioY);    ctx.lineTo((width - 30), 215 - i * ratioY);    ctx.stroke();    ctx.restore();  }  //--------- 绘制图例 ------------  for (var i = 0; i < data.list.length; i++) {    ctx.save();    ctx.translate(15, 215);    ctx.beginPath();    ctx.setStrokeStyle(color[i]);    ctx.setLineCap("round");    ctx.setLineWidth(10);    ctx.moveTo(22 + i * 38, 46);    ctx.lineTo(38 + i * 38, 46);    ctx.stroke();    ctx.setFontSize('8');    ctx.setFillStyle("#000000");    ctx.fillText(data.list[i].title, 21 + i * 38, 66);    ctx.restore();  }  // ------ 绘制横坐标 ------  for (var i = 0; i < data.time.length; i++) {    ctx.save();    ctx.translate(15, 215);    ctx.setFontSize('8');    ctx.setFillStyle('#848198');    ctx.fillText(data.time[i], i * (ratioX), 20);    ctx.restore();  }  //------ 绘制折线 ---------  for (var i = 0; i < data.list.length; i++) {    ctx.beginPath();    ctx.save();    ctx.translate(22, 215);    ctx.setStrokeStyle(color[i]);    ctx.moveTo(0, -data.list[i].value[0] / (stepY / ratioY));//console.log(data.list[i].value);for (var j = 0; j < data.list[i].value.length; j++) {      ctx.lineTo(j * (parseFloat((width - 53) / (data.list[i].value.length - 1))), -(data.list[i].value[j] / (stepY / ratioY)));      ctx.stroke();    }    ctx.restore();  }  ctx.draw();}

饼图

function draw(data, ctx) {  var start = 0,x,y = 140,r = 90,total=0, end,width;  var ratio = new Array();  wx.getSystemInfo({success: function (res) {      width = res.windowWidth;    }  });  x = width / 2 - 15;  for(var i=0;i<data.length;i++){    total += data[i].num;  }  for (var i = 0; i < data.length; i++) {    ratio.push(data[i].num / total);  }  // -------- 绘制饼图 --------------------  for (var i = 0; i < data.length; i++) {    end = start + Math.PI * 2 * ratio[i];    ctx.save();    ctx.translate(x, y);    ctx.setFontSize("8");    ctx.setFillStyle(color[i]);    ctx.setTextAlign("center");    ctx.setTextBaseline("middle");    ctx.fillText(data[i].name + ' ' + (ratio[i] * 100).toFixed(2) + '%', Math.cos((end+start)/2)* 120, Math.sin((end+start)/2)* 120);    ctx.restore();    ctx.save();    ctx.beginPath();    ctx.setFillStyle(color[i]);    ctx.moveTo(x, y);    ctx.arc(x, y, r, start, end, false);    ctx.fill();    ctx.restore();    start = end;  }  // -------- 饼心 ---------------  ctx.save();  ctx.beginPath();  ctx.moveTo(x, y);  ctx.arc(x, y, 50, 0, Math.PI * 2);  ctx.setFillStyle("#ffffff");  ctx.fill();  ctx.restore();  ctx.draw();}

柱状图

function draw(data, ctx) {  var width,height = 260;  var newArr = new Array();  wx.getSystemInfo({success: function (res) {      width = res.windowWidth;    }  })  var ratioX = (width - 55) / data.length;  var ratioY = parseInt((height - 45) / 5);  //求NUM的最大值  for (var i = 0; i < data.length; i++) {    newArr.push(data[i].num);  }  var maxY = Math.max.apply(Math, newArr);  var stepY = Math.ceil(maxY / 4);  // ------- 绘制坐标线 ------  ctx.beginPath();  for (var i = 0; i < 5; i++) {    ctx.save();    ctx.setStrokeStyle("#dde2e3");    ctx.setFillStyle("#848198");    ctx.setFontSize('8');    ctx.moveTo(15, 215 - i * ratioY);    ctx.lineTo(380, 215 - i * ratioY);    ctx.fillText(i * stepY, 0, 220 - i * ratioY);    ctx.stroke();    ctx.restore();  }

 

以上是“微信小程序开发中如何使用canvas绘制坐标图”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯