(一)色阶图

1.  前言

色阶图适合二维的数据,而且横轴跟纵轴的标签都比较多。本期的数据:

Example data shows concurrent user sessions over time, taken from a development environment.

翻译过来大意就是:展示的是随着时间的推移用户会话并发的个数

数据结构:

 星期数 时间点 会话数
day hour value
1 1 16

资料来源:http://bl.ocks.org/tjdecke/5558084

2. 色阶图

图:

本地链接:http://127.0.0.1/Example/case3-color/color2.html

知识点:  1.   怎么画色阶图

2.   读取csv格式数据画图

3.   图形的转变效果: d3.transition().duration()

完整的网页代码:

  1 <!DOCTYPE html>
  2 <meta charset="utf-8">
  3 <html>
  4   <head>
  5     <style>
  6       rect.bordered {
  7         stroke: #E6E6E6;
  8         stroke-width:2px;
  9       }
 10
 11       text.mono {
 12         font-size: 9pt;
 13         font-family: Consolas, courier;
 14         fill: #aaa;
 15       }
 16
 17       text.axis-workweek {
 18         fill: #000;
 19       }
 20
 21       text.axis-worktime {
 22         fill: #000;
 23       }
 24     </style>
 25     <script src="http://d3js.org/d3.v3.js"></script>
 26   </head>
 27   <body>
 28     <div id="chart"></div>
 29     <div id="dataset-picker">
 30     </div>
 31     <script type="text/javascript">
 32     //一些全局变量
 33       var margin = { top: 50, right: 0, bottom: 100, left: 30 },
 34           width = 960 - margin.left - margin.right,
 35           height = 430 - margin.top - margin.bottom,
 36           gridSize = Math.floor(width / 24),
 37           legendElementWidth = gridSize*2,
 38           buckets = 9,
 39           colors = ["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#253494","#081d58"], // alternatively colorbrewer.YlGnBu[9]
 40           days = ["Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"],
 41           times = ["1a", "2a", "3a", "4a", "5a", "6a", "7a", "8a", "9a", "10a", "11a", "12a"
 42           ,"13p", "14p", "15p", "16p", "17p", "18p", "19p", "20p", "21p", "22p", "23p", "24p"];
 43           datasets = ["data.csv", "data2.csv"];  //数据文件变量
 44      //画布
 45       var svg = d3.select("#chart").append("svg")
 46           .attr("width", width + margin.left + margin.right)
 47           .attr("height", height + margin.top + margin.bottom)
 48           .append("g")
 49           .attr("transform", "translate(" + margin.left + "," + margin.top + ")");
 50      //日期轴Y
 51      var dayLabels = svg.selectAll(".dayLabel")
 52           .data(days)
 53           .enter().append("text")
 54             .text(function (d) { return d; })
 55             .attr("x", 0)
 56             .attr("y", function (d, i) { return i * gridSize; })
 57             .style("text-anchor", "end")
 58             .attr("transform", "translate(-6," + gridSize / 1.5 + ")")
 59             .attr("class", function (d, i) { return ((i >= 0 && i <= 4) ? "dayLabel mono axis axis-workweek" : "dayLabel mono axis"); }); //轴标签是否明显显示
 60       //时间轴X
 61       var timeLabels = svg.selectAll(".timeLabel")
 62           .data(times)
 63           .enter().append("text")
 64             .text(function(d) { return d; })
 65             .attr("x", function(d, i) { return i * gridSize; })
 66             .attr("y", 0)
 67             .style("text-anchor", "middle")
 68             .attr("transform", "translate(" + gridSize / 2 + ", -6)")
 69             .attr("class", function(d, i) { return ((i >= 7 && i <= 16) ? "timeLabel mono axis axis-worktime" : "timeLabel mono axis"); });//轴标签是否明显显示
 70       //读取csv格式数据
 71       d3.csv = d3.dsv(",", "text/csv");
 72       //定义heatmapChart函数,输入文件即可画图
 73       var heatmapChart = function(tsvFile) {
 74         d3.csv(tsvFile,function(d) {return {day: +d.day,hour: +d.hour,value: +d.value};},
 75
 76         function(error, data) {
 77           var colorScale = d3.scale.quantile() //比例尺:与quantize类似,但输入值域是独立的值,适合已经对数据分类的情形。
 78               .domain([0, buckets - 1, d3.max(data, function (d) { return d.value; })])
 79               .range(colors);
 80
 81           var cards = svg.selectAll(".hour")
 82               .data(data, function(d) {return d.day+‘:‘+d.hour;});
 83
 84           cards.append("title");
 85
 86           cards.enter().append("rect")
 87               .attr("x", function(d) { return (d.hour - 1) * gridSize; })
 88               .attr("y", function(d) { return (d.day - 1) * gridSize; })
 89               .attr("rx", 4)
 90               .attr("ry", 4)
 91               .attr("class", "hour bordered")
 92               .attr("width", gridSize)
 93               .attr("height", gridSize)
 94               .style("fill", colors[0]);
 95
 96          //颜色渐变效果
 97           cards.transition().duration(1000)
 98               .style("fill", function(d) { return colorScale(d.value); });
 99
100           cards.select("title").text(function(d) { return d.value; });
101
102           cards.exit().remove();
103
104          //添加图例
105           var legend = svg.selectAll(".legend")
106               .data([0].concat(colorScale.quantiles()), function(d) { return d; });
107
108           legend.enter().append("g")
109               .attr("class", "legend");
110
111           legend.append("rect")
112             .attr("x", function(d, i) { return legendElementWidth * i; })
113             .attr("y", height)
114             .attr("width", legendElementWidth)
115             .attr("height", gridSize / 2)
116             .style("fill", function(d, i) { return colors[i]; });
117
118           legend.append("text")
119             .attr("class", "mono")
120             .text(function(d) { return "≥ " + Math.round(d); })
121             .attr("x", function(d, i) { return legendElementWidth * i; })
122             .attr("y", height + gridSize);
123
124           legend.exit().remove();
125
126         });
127       };
128
129       //调用前面的heatmapChart函数,输入数据文件名称
130       heatmapChart(datasets[0]);
131
132       //按钮
133       var datasetpicker = d3.select("#dataset-picker").selectAll(".dataset-button")
134         .data(datasets);
135
136       datasetpicker.enter()
137         .append("input")
138         .attr("value", function(d){ return "Dataset " + d })
139         .attr("type", "button")
140         .attr("class", "dataset-button")
141         .on("click", function(d) {
142           heatmapChart(d);
143         });
144     </script>
145   </body>
146 </html>

时间: 2024-10-19 14:16:12

(一)色阶图的相关文章

Photoshop 使用阈值调整色阶

1. 阈值原理 阈值的定义其实就是“临界点”,即过了这个临界点是一种情况(比如黑色),没有超过这个临界点是另外一种情况(比如白色),所以图像上只有黑.白两种情况出现.临界点的值由你定义: 阈值实际应用是把彩色图像的所有像素的亮度映射到的人为划分的0-255这256种亮度层次区域中,0为黑色(RGB三色光全无,所以为黑色)也就是阈值滑块的最左端,255为白色(RGB三色光充分叠加,所以为白色)也就是阈值滑块的最右端: 当你在色阶对话框输入某个0-255之间的数值时,比如128,PS就会把亮度值小于

信息指纹

信息指纹的由来 ??信息有"指纹"吗?信息要"指纹"做什么呢? ??"指纹"一般特指我们识别人所采用各种方式的一个总称.生活中我们需要辨认出周围的每一个人,即使是非常相似的双胞胎,因为辨别是我们进行相互交流的前提.无论是通过名字.长相.声音的辨认,还是通过有技术依据的指纹与虹膜辨认,甚至是通过DNA鉴定,目的都只有一个,就是能准确确认对方. ??可见指纹的首要用途就是识别个体,当然作为指纹特征,需要它是可唯一确定的.不容易更改的.方便携带的.另外

CVPR论文《100+ Times Faster Weighted Median Filter (WMF)》的实现和解析(附源代码)。

四年前第一次看到<100+ Times FasterWeighted Median Filter (WMF)>一文时,因为他附带了源代码,而且还是CVPR论文,因此,当时也对代码进行了一定的整理和解读,但是当时觉得这个算法虽然对原始速度有不少的提高,但是还是比较慢.因此,没有怎么在意,这几天有几位朋友又提到这篇文章,于是把当时的代码和论文又仔细的研读了一番,对论文的思想和其中的实现也有了一些新的新的,再次做个总结和分享. 这篇文章的官网地址是:http://www.cse.cuhk.edu.h

Excel催化剂100+大主题功能梳理导读

Excel催化剂历经1年4个月的开发时间,终于荣登100+个大主题功能,完成数据领域的功能大矩阵,可以说在日常的数据处理及分析上,绝大部分的共性场景已经囊括其中,是数据工作者难得一遇的优秀作品之一.因开发过程没有系统性的规划,难免开发过程中的功能发布较为凌乱,特别是对初次接触的用户来说,很需要一个系统性的概览梳理,今天此文正是为此而准备的. 功能大模块 在100+的主题功能中,以下将尝试通过几个维度来作简单的梳理,希望能够对初次接触的朋友们可以更加清晰地了解Excel催化剂能够给自己的日常工作带