我'我试图通过使用codemmirror编辑器构建D3.js,但我在那里输入的任何东西都不能被D3.js正确地可
I'm trying to build D3.js by using CodeMirror editor, but anything I input in there can't be properly visualized by D3.js. What am I missing?
我是D3.js和CodeMirror的新手(以及StackOverflow,请原谅我的错误),我想为我的最新项目尝试一些很酷的东西,所以这两个是我最好的选择,但我有一些问题。请帮助我注意到我做错了什么,什么是最好的解决方案,使这个程序工作。我很高兴我们有一个好的论坛。
所以,长话短说,我试图通过使用D3.js和codemmirror作为我的编辑器来构建一个可视化工具。例如,这就是我试图可视化的内容,但是我想从codemmirror编辑器输入数据,而不是读取morley.csv
数据(硬编码)。这是我写给编辑的:
<textarea id="values"></textarea>
<script>
var editor = CodeMirror.fromTextArea(values, {
lineNumbers: true,
matchBrackets: true,
theme : '3024-day'
});
</script>
<a id="gen" class="btn btn-primary btn-block" role="button">Generate Visualization</a>
可视化构建器:
<div class="row" id="chart">
<script>
d3.select("#gen").on("click", function(){
d3.event.preventDefault();
d3.select("#chart svg").remove();
var dataset = editor.getValue();
var margin = {top: 10, right: 50, bottom: 20, left: 50},
width = 120 - margin.left - margin.right,
height = 500 - margin.top - margin.bottom;
var min = Infinity,
max = -Infinity;
var chart = d3.box()
.whiskers(iqr(1.5))
.width(width)
.height(height);
d3.csv(dataset, function(error, csv) {
if (error) throw error;
var data = [];
csv.forEach(function(x) {
var e = Math.floor(x.Expt - 1),
r = Math.floor(x.Run - 1),
s = Math.floor(x.Speed),
d = data[e];
if (!d) d = data[e] = [s];
else d.push(s);
if (s > max) max = s;
if (s < min) min = s;
});
chart.domain([min, max]);
var svg = d3.select("#chart").selectAll("svg")
.data(data)
.enter().append("svg")
.attr("class", "box")
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.bottom + margin.top)
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")")
.call(chart);
setInterval(function() {
svg.datum(randomize).call(chart.duration(1000));
}, 2000);
});
function randomize(d) {
if (!d.randomizer) d.randomizer = randomizer(d);
return d.map(d.randomizer);
}
function randomizer(d) {
var k = d3.max(d) * .02;
return function(d) {
return Math.max(min, Math.min(max, d + k * (Math.random() - .5)));
};
}
function iqr(k) {
return function(d, i) {
var q1 = d.quartiles[0],
q3 = d.quartiles[2],
iqr = (q3 - q1) * k,
i = -1,
j = d.length;
while (d[++i] < q1 - iqr);
while (d[--j] > q3 + iqr);
return [i, j];
};
}
});
</script>
</div>
让我们假设我使用相同的morley.csv
作为我的输入数据。
不知怎么的,它没有像我计划的那样工作。我不明白我在这里错过了什么,但我最好的猜测一定与d3.csv
如何不能解析我从textarea values
的输入有关。输出div chart
总是show nothing.
1。在新版本中将d3.csv()
更改为d3.csv.parse()
或d3.csvParse()
。前者只接受文件名,后者接受CSV数据字符串。
调试并确保您的数据集变量确实是一个逗号分隔的字符串。
2。此外,如果你需要的只是一个平面数组,如[1,2,3],我认为你需要把所有的代码从回调函数中删除,然后这样做:
data = d3.csv.parse(dataset);
然后继续使用现有的代码。
在csv中使用回调函数的原因。解析调用只是为了构造返回的数组;例如,如果你的数组元素是包含多个值的对象,你可以在回调函数中设置。
相关文章:
- 如何在d3.js中返回路径的y坐标
- 有条件更新d3.js力图中节点的最佳方法
- 使用D3.js计算带有字母间距的文本长度
- D3.js模式不适用于弧形或圆环图
- d3.js Chord图的动态工具提示
- 在D3.js中,有没有任何方法可以将x和y方向上的滚动事件绑定到平移svg
- HTML5FileReader输出到D3.js图表
- D3.js生成有效的SVG,但不显示任何内容
- 更改 JS/D3 页上的元素位置
- 带有更新按钮.js D3 将新数据添加到旧数据而不是替换旧数据
- D3.js d3.max undefined
- 为什么我的 js.d3 代码不显示轴
- dc.js d3+crossfilter.top将过滤后的数据导出为CSV
- 如何在Plottable.js/D3.js制作的饼图中启用qtip2
- 2dimple.js/d3.js在窗口大小更改时自动调整图表大小
- D3.js D3.json返回Uncaught TypeError:无法读取属性'0'的未定义
- 如何计算(SVG) X/Y坐标的平移和旋转(在JS/D3.js)
- 当我们需要信任大约 200-300 个自定义图表时.js D3 是最佳选择吗?
- 简单条形图按字符串名称分组,带有 DC.js D3.js 和交叉过滤器.js
- 缺少标签- Cola.js/D3.js