D3:条形图着色
D3: Bar chart coloring
我在D3中有一个x和y值的条形图,我想根据y的值来给我的条形图上色,如果y小于6,那么它应该是一种颜色,否则我想要另一种颜色
这是我到目前为止的代码。这只适用于一个值。
var data = [
{x: 2, y: 4},
{x: 5, y: 8},
{x: 8, y: 10}
];
bars.selectAll(".rect")
.data(data)
.enter().append("rect")
.attr("class", "rect")
.attr("x", function(d) { return x(d.x); })
.attr("y", function(d) { return y(d.y); })
.attr("height", function(d) { return h - y(d.y); })
.attr("width", 15)
.attr("fill", function(d){
return colorPicker(d);
});
function colorPicker(v){
if(v<=6) { return "#666666"}
else if (v > 6){ return "#FF0033";}
}
你知道我该怎么改变吗?提前感谢!
根据该规则设置颜色的最简单方法是使用三元操作符:
.attr("fill", function(d){ return d.y > 6 ? "#FF0033" : "#666666"});
检查演示:
var w = 300, h = 100, padding = 20;
var svg = d3.select("body")
.append("svg")
.attr("width", w)
.attr("height", h);
var data = [{name: "foo", y:10},
{name: "bar", y:30},
{name: "baz", y: 5}];
var xScale = d3.scaleBand()
.range([0,w])
.domain(data.map(function(d){ return d.name}))
.paddingInner(0.2)
.paddingOuter(0.2);
var yScale = d3.scaleLinear()
.range([h - padding, 0])
.domain([0, d3.max(data, function(d){ return d.y})]);
var xAxis = d3.axisBottom(xScale);
var bars = svg.selectAll(".bars")
.data(data)
.enter()
.append("rect");
bars.attr("x", function(d){ return xScale(d.name)})
.attr("width", xScale.bandwidth())
.attr("y", function(d){ return yScale(d.y)})
.attr("height", function(d){ return h - padding - yScale(d.y)})
.attr("fill", function(d){ return d.y > 6 ? "#FF0033" : "#666666"});
var gX = svg.append("g")
.attr("transform", "translate(0," + (h - padding) + ")")
.call(xAxis);
<script src="https://d3js.org/d3.v4.min.js"></script>
但是,如果您想保留该函数,则必须使用d.y
作为参数调用colorPicker
,而不是d
:
colorPicker(d.y)
检查演示:
var w = 300, h = 100, padding = 20;
var svg = d3.select("body")
.append("svg")
.attr("width", w)
.attr("height", h);
var data = [{name: "foo", y:10},
{name: "bar", y:30},
{name: "baz", y: 5}];
var xScale = d3.scaleBand()
.range([0,w])
.domain(data.map(function(d){ return d.name}))
.paddingInner(0.2)
.paddingOuter(0.2);
var yScale = d3.scaleLinear()
.range([h - padding, 0])
.domain([0, d3.max(data, function(d){ return d.y})]);
var xAxis = d3.axisBottom(xScale);
var bars = svg.selectAll(".bars")
.data(data)
.enter()
.append("rect");
bars.attr("x", function(d){ return xScale(d.name)})
.attr("width", xScale.bandwidth())
.attr("y", function(d){ return yScale(d.y)})
.attr("height", function(d){ return h - padding - yScale(d.y)})
.attr("fill", function(d){return colorPicker(d.y);});
function colorPicker(v){
if(v<6) { return "#666666"}
else{ return "#FF0033";}}
var gX = svg.append("g")
.attr("transform", "translate(0," + (h - padding) + ")")
.call(xAxis);
<script src="https://d3js.org/d3.v4.min.js"></script>
相关文章:
- d3.js用按钮更新条形图工具提示
- 添加新数据时D3.JS条形图列偏移量
- d3.js条形图转换无法正常工作
- 从数组在d3中创建条形图时出现问题
- d3.js组条形图不起作用
- 对d3堆叠条形图的数据进行排序
- d3.js条形图未根据单击事件进行更新
- D3:如何更改现有条形图中的数据
- 如何在d3中更新带有附带文本的条形图
- 将两个图形(饼图和条形图)并排对齐::d3-js
- D3.js条形图未显示
- D3.js更新堆叠条形图
- D3 分组条形图
- D3.js条形图:不显示 .text
- 在 D3 中追加堆积条形图和另一个条形图
- 如何在 d3.js 中创建分层条形图
- 条形图 d3.js 的颜色出现问题
- 条形图D3.js错误:<rect>属性
- 水平条形图D3, .txt文件
- 带视图查找器的条形图d3.js