canvas 根据数组生成柱状图

canvas柱状图

 var arr = [
            { id: 1001, price: 100 },
            { id: 1002, price: 150 },
            { id: 1003, price: 200 },
            { id: 1004, price: 70 },
            { id: 1005, price: 300 }
        ];
        var gap = 20;
        var canvas = document.querySelector("canvas");
        var ctx;
        init();
        function init() {
            canvas.width = 400;
            canvas.height = 300;
            ctx = canvas.getContext("2d");
            var max = arr.reduce((value, item) => {
                return value < item.price ? item.price : value;
            }, arr[0].price);
            //max高为300的4/5,其他的高为:300*(4/5)/(max) * h   maxh:240 = othersh: ?   ? = 240
            var scaleHeight = 300 * 4 / 5 / max;
            //每个柱状图的宽为总宽-间隙宽除个数
            var width = (400 - (gap * (arr.length + 1))) / arr.length;
            createChart(width, scaleHeight);
        }

        function createChart(w, hs) {
            ctx.fillStyle = "rgba(0,0,0,0.7)";
            ctx.fillRect(0, 0, 400, 300);
            var x = 0;
            for (var i = 0; i < arr.length; i++) {
                x += gap;
                ctx.fillStyle = "orange";
                var h = hs * arr[i].price;
                ctx.fillRect(x, 300 - h, w, h);
                x += w;
            }
        }

效果:

原文地址:https://www.cnblogs.com/ltfxy/p/12424004.html

时间: 2024-10-12 02:06:21

canvas 根据数组生成柱状图的相关文章

记一次非常无语的生成柱状图,js,ecshop。

如题,无语且非常郁闷. 要求是根据查询出来的数据动态生成柱状图.但是ecshop的查询ajax回调都是已经封装好了的.根本就不能改. 无奈之下只好百度了一个画柱状图的代码,每隔2秒抓取页面数据,重新绘制一次柱状图,假装自己是动态的.郁闷... 随便上个代码留个纪念,好歹做了三个小时.ummmm.... <canvas id="a_canvas" width="1000" height="700"></canvas> <

[canvas]通过动态生成像素点做绚丽效果

本例中的粒子就是实实在在的像素,由js代码在canvas上动态生成的像素点!这些像素点通过一个运动方法有规律地动了起来.透过这个思路,我们可以想到很多很炫的效果,但是这个性能有待考察.实验证明,动态控制太多像素点的话绝对会卡的!在做效果方面有经验的朋友,请提出宝贵意见!这个思路走得通么? <!doctype html> <html> <head> <title>智能粒子</title> <meta charset='utf-8' />

Java读取数据库数据生成柱状图

此案例是用swing显示数据的.需要引入jfreechart相关包,不同版本可能包不相同,本人用的是 此案例在ssi框架下会报错,不用框架就没问题. Java后台逻辑代码: public class BarChart { ChartPanel frame1; public BarChart() { CategoryDataset dataset = getDataSet(); JFreeChart chart = ChartFactory.createBarChart3D("水果",

71. C++ 分别用指针数组和二维数组生成二维空间,存储数据并释放。 练习new/delete, new[]/delete[]

分别用指针数组和二维数组生成二维空间,存储数据并释放.比如,数据如下:  //使用了下fgetc() 1 #include <iostream> 2 #include <stdio.h> 3 using namespace std; 4 5 6 int main() 7 { 8 #if 0 //生成二维数组存储 9 FILE* fp = fopen("G:\\qtcode\\temp.txt","r"); 10 11 //char buf[3

canvas用数组方式做出下雨效果

效果图 1.做出canvas画布和声明一个用来存储雨滴的数组 var c=document.getElementById('myCanvas'); var ctx= c.getContext('2d'); var ary=[]; 2.将雨滴的位置.大小得到 var x=Math.random()*1000;//在画布内随机生成雨滴x轴位置 var width=Math.random()*3;//随机生成雨滴宽度 var h=Math.random()*50+10;//随机生成雨滴长度 var y

小程序---canvas画图,生成分享图片,画图文字换行

小程序目前只支持转发,不支持分享朋友圈,为了能实现分享,很多线上小程序通过生成分享图片,保存到相册来给用户增加分享的可能. 具体思路及简要代码如下: 一:canvas画图 drawCanvas:function(){ var that = this; var contentPic = '/images/[email protected]' wx.downloadFile({ //当图片为网络图片时,需要先下载到本地,再进行操作, url: contentPic, //否则canvas会加载不到图

三角函数查表法和三角函数值数组生成方法

今天打算用STM32驱动TFTLCD屏显示显示一个画扇形的程序,这样就需要我们有一个画圆弧的程序,我尝试了很多方法,其中有一种方法就是使用三角函数来确定圆弧的点的坐标,即: x=radius*cos(angle); y=radius*sin(angle); 下面是当时的计算过程:我们先把角度变成弧度,我们在这里使用了ToRad()函数来实现,程序十分简单. #include <math.h> #define pi 3.141592653f int shu; float ToRad(float

面试题22:有序数组生成BST

对于一个含有n个数的有序数组1~N,能够产生多少种不同结果的二叉搜素树BST? 如何生成这些不同结构的BST? 1 class Solution { 2 public: 3 int numTrees(int n) { 4 int* dp = new int[n+1]; 5 dp[0] = 1; 6 dp[1] = 1; 7 dp[2] = 2; 8 for(int i=3;i<=n;i++){ 9 dp[i] = 0; 10 for(int j=1;j<=i;j++){ 11 dp[i]+=d

c语言cJson数组生成与解析

1.生成 json char* CreatJsCustNo( BT_BNF_CUST *p, char *strPaperNO) { cJSON *pJsonArry,*pJsonsub; pJsonArry=cJSON_CreateArray(); /*创建数组*/ cJSON_AddItemToArray(pJsonArry,pJsonsub=cJSON_CreateObject()); /* 给创建的数组增加对对象*/ cJSON_AddStringToObject(pJsonsub, "