Javascript 使用新值更新分组条形图
我尝试从dimple.js扩展这个示例。我想用单选按钮在“单位销售额”(如示例所示)和“销售额”(我的扩展名)之间进行选择 因为我对d3和dimple非常陌生,所以当点击收音机时,我不知道如何更新y值。据我所知,有三件事需要改变:Javascript 使用新值更新分组条形图,javascript,d3.js,dimple.js,Javascript,D3.js,Dimple.js,我尝试从dimple.js扩展这个示例。我想用单选按钮在“单位销售额”(如示例所示)和“销售额”(我的扩展名)之间进行选择 因为我对d3和dimple非常陌生,所以当点击收音机时,我不知道如何更新y值。据我所知,有三件事需要改变: 必须对所选值进行聚合(在“价格层”和“渠道”上求和) y轴必须根据新值进行更改 聚合值必须缩放到新的y轴 我尝试“单击”更新图表: function updateChart(){ // on click var what = this.value;
- 必须对所选值进行聚合(在“价格层”和“渠道”上求和)
- y轴必须根据新值进行更改
- 聚合值必须缩放到新的y轴
function updateChart(){ // on click
var what = this.value; // value of radio-button
var newValues = null; // have to be aggregated and scaled
svg.selectAll("rect")
.data(data)
.transition().duration(400)
.attr('y', function(d) { d[what]; }) // ?
.attr('height', function(d) { y._scale(d[what]); }); // ?
};
编辑:下面是一个正在工作的示例
感谢您的帮助 给你,我以你为例修改了它。酒窝可以自行处理,不需要修改d3中的形状。在您的示例中尝试使用以下代码:
<script type="text/javascript">
var svg = dimple.newSvg("#chartContainer", 600, 450);
d3.tsv("/data/example_data.tsv", function (data) {
// Some constants
var marginLeft = 65;
marginTop = 60;
width = 510;
height = 330;
var myChart = new dimple.chart(svg, data);
myChart.setBounds(marginLeft, marginTop, width, height)
myChart.addCategoryAxis("x", ["Price Tier", "Channel"]);
var y = myChart.addMeasureAxis('y', 'Unit Sales'); // should/will be updated
myChart.addSeries("Channel", dimple.plot.bar);
myChart.addLegend(marginLeft, marginTop-25, width, 25, "right");
myChart.draw();
// on click update
d3.selectAll("input").on("click", updateChart);
function updateChart(){
var what = this.value;
// Change the measure on the y axis
y.measure = what;
// Redraw the chart with a 1 second transition
myChart.draw(1000);
};
});
</script>
var svg=dimple.newSvg(“#chartContainer”,600450);
d3.tsv(“/data/example_data.tsv”),函数(数据){
//一些常数
var marginLeft=65;
marginTop=60;
宽度=510;
高度=330;
var myChart=new dimple.chart(svg,数据);
myChart.setBounds(边缘左侧、边缘顶部、宽度、高度)
myChart.addCategoryAxis(“x”,“价格层”,“渠道”);
var y=myChart.addMeasureAxis('y','unitsales');//应该/将被更新
myChart.addSeries(“通道”、酒窝、绘图、条形图);
myChart.addLegend(左侧边缘,右侧边缘,宽度25);
myChart.draw();
//单击“更新”
d3.选择全部(“输入”)。单击(“单击”,更新开始);
函数updateChart(){
var what=该值;
//更改y轴上的测量值
y、 度量=什么;
//用1秒的过渡重新绘制图表
我的图表绘制(1000);
};
});
我希望这有帮助
约翰给你,我以你为例修改了它。酒窝可以自行处理,不需要修改d3中的形状。在您的示例中尝试使用以下代码:
<script type="text/javascript">
var svg = dimple.newSvg("#chartContainer", 600, 450);
d3.tsv("/data/example_data.tsv", function (data) {
// Some constants
var marginLeft = 65;
marginTop = 60;
width = 510;
height = 330;
var myChart = new dimple.chart(svg, data);
myChart.setBounds(marginLeft, marginTop, width, height)
myChart.addCategoryAxis("x", ["Price Tier", "Channel"]);
var y = myChart.addMeasureAxis('y', 'Unit Sales'); // should/will be updated
myChart.addSeries("Channel", dimple.plot.bar);
myChart.addLegend(marginLeft, marginTop-25, width, 25, "right");
myChart.draw();
// on click update
d3.selectAll("input").on("click", updateChart);
function updateChart(){
var what = this.value;
// Change the measure on the y axis
y.measure = what;
// Redraw the chart with a 1 second transition
myChart.draw(1000);
};
});
</script>
var svg=dimple.newSvg(“#chartContainer”,600450);
d3.tsv(“/data/example_data.tsv”),函数(数据){
//一些常数
var marginLeft=65;
marginTop=60;
宽度=510;
高度=330;
var myChart=new dimple.chart(svg,数据);
myChart.setBounds(边缘左侧、边缘顶部、宽度、高度)
myChart.addCategoryAxis(“x”,“价格层”,“渠道”);
var y=myChart.addMeasureAxis('y','unitsales');//应该/将被更新
myChart.addSeries(“通道”、酒窝、绘图、条形图);
myChart.addLegend(左侧边缘,右侧边缘,宽度25);
myChart.draw();
//单击“更新”
d3.选择全部(“输入”)。单击(“单击”,更新开始);
函数updateChart(){
var what=该值;
//更改y轴上的测量值
y、 度量=什么;
//用1秒的过渡重新绘制图表
我的图表绘制(1000);
};
});
我希望这有帮助
约翰谢谢你,约翰!酒窝很棒:)谢谢你,我很高兴你喜欢它。我对上面的例子做了一点修改,直接更改了轴的测量值,没有理由使用via series的原始方法。谢谢John!酒窝很棒:)谢谢你,我很高兴你喜欢它。我对上面的例子做了一点修改,直接更改了轴的测量值,没有充分的理由使用via series的原始方法。