2个数组一个值一个颜色使D3条形图具有相同索引值的颜色
2 arrays one of values one of colors make D3 bar chart have color at same index of value
我有两个数组:
values = [1,2,3,4,5,4,7,2,9,10];
colors = ['red','red','blue','blue','green','green','orange','orange','pink','pink'];
我试图建立一个D3条形图,其中每个条形图的高度是值的10倍,并对应于具有与值相同索引的颜色。
这是我目前为止写的:
d3.select("body").selectAll("div")
.data(total_data)
.enter()
.append("div")
.attr("class", "bar")
.style("fill", function(d) {
return colors[values.indexOf(d)];
})
但是,假设我们有一个重复的值,那么它将返回错误的颜色。我还试图从2个数组创建一个JSON,然后将其作为数据传递,但我遇到了麻烦。做上述事情的最好方法是什么?谢谢!
既然你只希望每个栏有一个颜色…
对应与值
具有相同索引的颜色
您只需要使用每个栏的索引访问数组colors
:
.attr("fill", function(d,i){ return colors[i]});
下面是一个工作示例(为简单起见,使用宽度为值的10倍,而不是高度):
values = [1,2,3,4,5,4,7,2,9,10];
colors = ['red','red','blue','blue','green','green','orange','orange','pink','pink'];
var width = 400, height = 400;
var svg = d3.select("body")
.append("svg")
.attr("width", width)
.attr("height", height);
var bars = svg.selectAll(".myBars")
.data(values)
.enter()
.append("rect");
bars.attr("x", 10)
.attr("y", function(d,i){ return 10 + i*40})
.attr("width", function(d){ return d*10})
.attr("height", 30)
.attr("fill", function(d,i){ return colors[i]});
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
提示:当你有一个大数据集,或者当你的数据集不断变化时,这不是一个好方法。相反,使用一个对象数组,您可以在其中为每个对象设置颜色,或者创建一个为条形条着色的规则。
相关文章:
- 我如何制作一个JS函数,它可以从相似的原始颜色双向更改为某个颜色
- 如何在php中创建一个函数,该函数与文本区域一起工作,通过输入类似[color:red]的内容来打印具有等效颜色的文本
- HTML-从mysql生成的选择框中的一个选项更改文本区域的颜色
- 如何用jquery动画改变背景颜色,就像一个过渡
- Javascript(如果var包含一个单词,则仅更改该单词的颜色)
- Google Apps 脚本,用于根据一个单元格的值对另一个单元格进行条件颜色格式设置
- 只使用一个整数表示颜色-Javascript
- JavaScript 创建一个随机表生成器并为单元格分配颜色
- 一次高亮显示一个城市,并在悬停其他城市时删除颜色填充
- 如何使细胞一次改变一个颜色,而不是一次改变所有颜色
- IE上的颜色框,打开一个颜色框,然后立即跟随页面上的链接
- Cs动画在悬停时在背景图像上放置一个颜色层
- 我想在javascript中有一个颜色列表
- 脚本只会最后一个文本和最后一个颜色,但会按照指示进行动画,发生了什么?
- 2个数组一个值一个颜色使D3条形图具有相同索引值的颜色
- 如何在three.js中创建一个颜色选择器,这将允许用户改变Maya 3D模型中特定多边形的颜色
- 从数组中随机选择一个颜色
- 创建一个颜色混合器,显示两种颜色组合的结果
- 我如何添加渐变的背景颜色在一个颜色时钟
- Bootstrap/Javascript/JQuery使按钮一次改变一个颜色