用canvas绘制象素概率图,做数据新闻用得上的小工具
2017-03-10 00:00
246 查看
摘要: 本文简要介绍了用canvas绘制象素概率图的基本过程,附带制图小工具。用象素概率图表示概率的大小,十分的直观和形象,尤其是用来表示小概率事件。文中附带了程序代码,你可以动手来试一下,十分的简单。
从以上对比图中可以清晰的得出结论,还是买彩票比较靠谱。俺们涨工资的难度比得上巴萨6-1惊天逆转巴黎了吧。
利用该小工具,你可以定义画布的大小,点个数,背景颜色,点颜色等变量。
因为性能等原因,对自定义变量做了一些限制,其中画布最大宽度5000px,最小宽度10px;画布最大高度5000px,最小高度10px;最多点数量50000个,最少点数量1个。
1.象素概率图
随着社会的进步,概率(百分数)与生活的关系也越来越紧密。足球比赛的概率、交通事故发生的概率、中彩票的概率、涨工资的概率等等不一而足。概率的百分数表示不够直观和形象,尤其是对小概率的表示。用象素概率图表示事件发生可能性,则会比较直观,易于理解。1000乘1000象素的图片即可表示百万级别的分数,象素概率图可以广泛的应用于数据新闻生产。1.1双色球五等奖【10元】概率图(约为0.77%):
1.2小编今年涨工资的概率图(约为0.01%):
从以上对比图中可以清晰的得出结论,还是买彩票比较靠谱。俺们涨工资的难度比得上巴萨6-1惊天逆转巴黎了吧。
2.象素概率图小工具
地址:象素概率图
利用该小工具,你可以定义画布的大小,点个数,背景颜色,点颜色等变量。
因为性能等原因,对自定义变量做了一些限制,其中画布最大宽度5000px,最小宽度10px;画布最大高度5000px,最小高度10px;最多点数量50000个,最少点数量1个。
3.象素概率图程序
程序的基本思路是在X轴(画布宽),Y轴(画布高)上随机选点放到集合SET中,直到集合在点数达到指定个数为止,用canvas的fillRect方法绘制背景后,取集合中的(x,y)绘制一象素大小的点。3.1页面程序:
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>【42度】象素概率图生成工具</title> </head> <script language="javascript" src="/media/js/collection.js"></script> <body> <canvas id="myCanvas" width="1000" height="1000">your browser does not support the canvas tag </canvas> <script type="text/javascript"> var xs = new Set(); var canvas=document.getElementById('myCanvas'); var ctx=canvas.getContext('2d'); ctx.fillStyle="#ff0000"; ctx.fillRect(0,0,1000,1000); ctx.fillStyle="#0000ff"; while(xs.size() < 2000) { var x = Math.floor(Math.random()*1000 +1); var y = Math.floor(Math.random()*1000 +1); var val1 = x+"_"+y; xs.add(val1); } for( var i = 0; i < xs.size(); i++) { var val2 = xs.values()[i]; var loc = val2.indexOf("_"); var x2 = val2.substr(0,loc); var y2 = val2.substr(loc+1,val2.length); ctx.fillRect(parseInt(x2),parseInt(y2),1,1); } </script> </body> </html>
3.2JS集合类(collection.js):
function Set(){ var items = {}; this.has = function(value) { return items.hasOwnProperty(value) }; this.add = function(value) { if (!this.has(value)) { items[value] = value; return true; } return false; }; this.remove = function(value) { if (this.has(value)) { delete items[value]; return true; } return false; }; this.clear = function() { this.items = {}; }; this.size = function() { return Object.keys(items).length; } this.sizeLegacy = function() { var count = 0; for (var prop in items) { if (items.hasOwnProperty(prop)) { ++count; } } return count; } this.values = function() { return Object.keys(items); }; this.valuesLegacy = function() { var keys = []; for (var key in items) { keys.push(key) }; return keys; }; }
4.原文地址:
www.42du.cn相关文章推荐
- Android Canvas练习(7)绘制欧冠八强防守&控制率数据对比图
- canvas绘图工具加上JavaScript特效绘制出能动的太阳系
- 数据地图绘制工具汇总
- canvas绘图工具加上JavaScript特效绘制出能动的太阳系
- canvas 绘制大乐透数据图表
- 【数据结构与算法】 FIND!流程图绘制工具
- canvas基于页面宽度绘制饼图数据(适用与多屏幕适配开发)
- Canvas根据数据绘制饼形统计图
- canvas绘制心电图(js读取csv心电数据文件)
- 让IE8支持HTML5及canvas功能!chart.js图表绘制工具库IE8上兼容方案
- 数据可视化的实现技术和工具比较(HTML5 canvas(Echart)、SVG、webGL等等)
- HTML5中canvas画图之绘制数据图表
- Android绘制工具Canvas
- 数据对象类代码的生成小工具
- 使用matlab工具研究神经网络的简单过程(网络和数据下载)
- 新闻:IBM的新工具CHIPHOPPER! 一套能够极大扩展Linux应用范围的新工具、新资源和新软件
- 数据挖掘工具的选择
- 当年我QB的封笔之作——在VGA 12h 模式下实时抖动绘制真彩色数据
- 数据恢复,第三方工具(Log Explorer)的使用
- NHibernate 数据映射生成工具