- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用类似于下面示例的代码绘制一条线,它工作正常,除非所有数据项都相等。
例如,对于以下数据,我画了一个圆但没有线。
var data1 = [{
"Date": "Feb 1, 2014",
"Close": "25"
}, {
"Date": "Feb 2, 2014",
"Close": "25"
}, {
"Date": "Feb 3, 2014",
"Close": "25"
}, {
"Date": "Feb 4, 2014",
"Close": "25"
}, {
"Date": "Feb 5, 2014",
"Close": "25"
}, {
"Date": "Feb 5, 2014",
"Close": "25"
}, {
"Date": "Feb 8, 2014",
"Close": "25"
}, {
"Date": "Feb 9, 2014",
"Close": "25"
}, {
"Date": "Feb 10, 2014",
"Close": "25"
}, {
"Date": "Feb 11, 2014",
"Close": "25"
}];
如果只有“收盘价”值不同于 25,则该线可见。
var width = 400;
var height = 40;
var x = d3.scale.linear().range([0, width - 2]);
var y = d3.scale.linear().range([height - 4, 0]);
var parseDate = d3.time.format("%b %d, %Y").parse;
var line = d3.svg.line()
.interpolate("linear") // use basis for rounded
.x(function(d) {
return x(d.date);
})
.y(function(d) {
return y(d.close);
});
function sparkline(elemId, data, lo, hi, targetPoint) {
var point = targetPoint;
targetPoint = data1.length - targetPoint;
data.forEach(function(d) {
d.date = parseDate(d.Date);
d.close = +d.Close;
});
x.domain(d3.extent(data, function(d) {
return d.date;
}));
y.domain(d3.extent(data, function(d) {
return d.close;
}));
var svg = d3.select(elemId)
.append('svg')
.attr('width', width)
.attr('height', height)
.append('g')
.attr('transform', 'translate(0, 2)');
var defs = svg.append("defs");
var gradient = defs.append("linearGradient")
.attr("id", "gradient")
.attr("x1", "0%")
.attr("x2", "100%");
gradient.append("stop")
.attr("offset", "0%")
.attr("stop-color", "red");
gradient.append("stop")
.attr("offset", (point * 10) + "%")
.attr("stop-color", "red");
gradient.append("stop")
.attr("offset", (point * 10) + "%")
.attr("stop-color", "green");
svg.append('path')
.datum(data)
.attr('class', 'sparkline')
.attr('d', line)
.style("stroke", "url(#gradient)");
svg.append('circle')
.attr('class', 'sparkcircle')
.attr('cx', x(data[data.length - targetPoint].date))
.attr('cy', y(data[data.length - targetPoint].close))
.attr('r', 2.5);
}
var data1 = [{
"Date": "Feb 1, 2014",
"Close": "26"
}, {
"Date": "Feb 2, 2014",
"Close": "27"
}, {
"Date": "Feb 3, 2014",
"Close": "29"
}, {
"Date": "Feb 4, 2014",
"Close": "23"
}, {
"Date": "Feb 5, 2014",
"Close": "22"
}, {
"Date": "Feb 5, 2014",
"Close": "22"
}, {
"Date": "Feb 8, 2014",
"Close": "24"
}, {
"Date": "Feb 9, 2014",
"Close": "29"
}, {
"Date": "Feb 10, 2014",
"Close": "26"
}, {
"Date": "Feb 11, 2014",
"Close": "25"
}];
var targetPoint = 3;
sparkline('#spark1', data1, 24.3, 25.6, targetPoint);
.sparkline {
fill: none;
stroke-width: 2px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
<div id="spark1"></div>
最佳答案
您需要更改gradientUnits
属性的默认值
var gradient = defs.append("linearGradient")
.attr('gradientUnits',"userSpaceOnUse") // Add This LIne
.attr("id", "gradient")
.attr("x1", "0%")
.attr("x2", "100%");
检查片段
var width = 400;
var height = 40;
var x = d3.scale.linear().range([0, width - 2]);
var y = d3.scale.linear().range([height - 4, 0]);
var parseDate = d3.time.format("%b %d, %Y").parse;
var line = d3.svg.line()
.interpolate("linear") // use basis for rounded
.x(function(d) {
return x(d.date);
})
.y(function(d) {
return y(d.close);
});
function sparkline(elemId, data, lo, hi, targetPoint) {
var point = targetPoint;
targetPoint = data1.length - targetPoint;
data.forEach(function(d) {
d.date = parseDate(d.Date);
d.close = +d.Close;
});
x.domain(d3.extent(data, function(d) {
return d.date;
}));
y.domain(d3.extent(data, function(d) {
return d.close;
}));
var svg = d3.select(elemId)
.append('svg')
.attr('width', width)
.attr('height', height)
.append('g')
.attr('transform', 'translate(0, 2)');
var defs = svg.append("defs");
var gradient = defs.append("linearGradient")
.attr('gradientUnits',"userSpaceOnUse")
.attr("id", "gradient")
.attr("x1", "0%")
.attr("x2", "100%");
gradient.append("stop")
.attr("offset", "0%")
.attr("stop-color", "red");
gradient.append("stop")
.attr("offset", (point * 10) + "%")
.attr("stop-color", "red");
gradient.append("stop")
.attr("offset", (point * 10) + "%")
.attr("stop-color", "green");
svg.append('path')
.datum(data)
.attr('class', 'sparkline')
.attr('d', line)
.style("stroke", "url(#gradient)");
svg.append('circle')
.attr('class', 'sparkcircle')
.attr('cx', x(data[data.length - targetPoint].date))
.attr('cy', y(data[data.length - targetPoint].close))
.attr('r', 2.5);
}
var data1 = [{
"Date": "Feb 1, 2014",
"Close": "25"
}, {
"Date": "Feb 2, 2014",
"Close": "25"
}, {
"Date": "Feb 3, 2014",
"Close": "25"
}, {
"Date": "Feb 4, 2014",
"Close": "25"
}, {
"Date": "Feb 5, 2014",
"Close": "25"
}, {
"Date": "Feb 5, 2014",
"Close": "25"
}, {
"Date": "Feb 8, 2014",
"Close": "25"
}, {
"Date": "Feb 9, 2014",
"Close": "25"
}, {
"Date": "Feb 10, 2014",
"Close": "25"
}, {
"Date": "Feb 11, 2014",
"Close": "25"
}];
var targetPoint = 3;
sparkline('#spark1', data1, 24.3, 25.6, targetPoint);
.sparkline {
fill: none;
stroke-width: 2px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
<div id='spark1'></div>
关于javascript - 当所有数据项都相同时,使用 d3 绘制一条线是不可见的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43643141/
我正在尝试弄清楚如何将一些数据从手机同步到 Android Wear 设备,并且我已经阅读了 developer.android.com 上关于数据项的文章,但是我仍然不清楚究竟如何使用它们。具体来说
$("selector").data("name", null); console.log($("selector").data("name")); 这将打印未定义。 有没有办法在元素的 jQuery
我使用 LINQ 从 CheckBoxList 控件中检索选中的项目: 这里是 LINQ: IEnumerable allChecked = (from ListItem item in Ch
在尝试为 C 堆栈构建测试平台时,我遇到了如何正确显示它的问题。我已经检查了六本书,它们都有一种将堆栈插入堆栈或从堆栈弹出的方法,但没有一本示例说明您如何实际使用这些例程。谁能告诉我模式,这样我就可以
我尝试在 AppEngine 中使用 urlfetch 将 POST 数据发送到服务器。其中一些 POST 数据项具有相同的名称,但具有不同的值。 form_fields = { "data":
我有以下情况(使用 KendoUI): 我有一个绑定(bind)到数据源的网格。当我在网格中选择一行时,我会调用其“change”事件来让所选的 dataItem e 通过其他 HTML 元素显示其值
我基本上是在构建一个快速而肮脏的类(class)目录,其中包含多个层次类别以及属于不同级别的这些类别的类(class)。 在旧的实现中,每个主要类别都有自己的 HTML 页面,与该类别相关的所有类(c
我是 MVC 和 ASP.NET 的新手,希望学习一些东西,所以我正在尝试制作一些简单的应用程序来学习来龙去脉。 好吧,我正在尝试让一个下拉框显示一个图书列表,它会在其中显示图书的标题,但会发布 bo
此行为导致我的项目出现问题。这是正在发生的事情的简化版本。我想了解为什么会发生这种情况,以及如何避免这种情况。我已将 vue 加载到我的网站头部: 这是 Vue 对象: vueObject = ne
我是一名优秀的程序员,十分优秀!