我需要创建一个可以有负值的d3条形图.理想情况下,轴零位置应根据数据的范围进行计算,但我会考虑采用对称正负范围的解决方案,即它始终位于图表的中间位置.
这是我想要实现的一个例子.

Mike有一篇关于在D3中编写可重用组件的优秀文章.本文介绍了如何使组件可配置的模式,以及如何将组件应用于选择.
该模式允许单个组件对象通过将其连接到数据来重复使用多个选择; 例如
var chart = myChart();
d3.select("div.chart")
.data(data)
.call(chart);
Run Code Online (Sandbox Code Playgroud)
我的组件实现如下所示:
function myChart() {
function my(selection) {
selection.each(function(d, i) {
// generate chart here
// `d` is the data, `i` is the index, `this` is the element
var state = false;
var circle = d3.select(this).append("circle")
.attr("r", "10")
.style("fill", "#000")
.on("click", toggleState);
function toggleState() {
// this function updates the current instance trapped by this closure
(state = !state)
? circle.style("fill", "#fff")
: circle.style("fill", "#000");
}
});
}
my.toggleState(i) …Run Code Online (Sandbox Code Playgroud) 样本数据:
ID1 ID2 Num Type
---------------------
1 1 1 'A'
1 1 2 'A'
1 2 3 'A'
1 2 4 'A'
2 1 1 'A'
2 2 1 'B'
3 1 1 'A'
3 2 1 'A'
Run Code Online (Sandbox Code Playgroud)
期望的结果:
ID1 ID2
---------
1 1
1 2
3 1
3 2
Run Code Online (Sandbox Code Playgroud)
请注意,我按ID1和ID2进行分组,但不是Num,我正在寻找专门针对Type ='A'的组.我知道通过在同一个表上连接两个查询是可行的:一个查询用于查找具有不同类型的所有组,另一个查询用于过滤具有Type ='A'的行.但我想知道这是否可以以更有效的方式完成.
我正在使用SQL Server 2008,我当前的查询是:
SELECT ID1, ID2
FROM (
SELECT ID1, ID2
FROM T
GROUP BY ID1, ID2
HAVING COUNT( DISTINCT Type ) = 1
) AS SingleType …Run Code Online (Sandbox Code Playgroud)