D3.js 如何在D3 v4中将水平条形图更改为垂直条形图

D3.js 如何在D3 v4中将水平条形图更改为垂直条形图,d3.js,D3.js,我在D3中有一个水平条形图,但我想要一个垂直条形图而不是水平条形图。这是它现在的样子。我试着摆弄X轴和Y轴,但似乎弄不好。任何帮助都将不胜感激 分层条形图 VarDataArray=[10,20,40,60]; var canvas=d3.selectbody .appendsvg .attr宽,500.attr高,500; var bar=canvas.selectAllrect .DataArray 进来 .appendrect .attr'class','base' .attrwidth

我在D3中有一个水平条形图,但我想要一个垂直条形图而不是水平条形图。这是它现在的样子。我试着摆弄X轴和Y轴,但似乎弄不好。任何帮助都将不胜感激

分层条形图 VarDataArray=[10,20,40,60]; var canvas=d3.selectbody .appendsvg .attr宽,500.attr高,500; var bar=canvas.selectAllrect .DataArray 进来 .appendrect .attr'class','base' .attrwidth,函数d{ 返回d*10; } .身高30 .attry,功能正常,i{ 返回i*35; } .绿色,蓝色; //.填充宽度,绿色; /* canvas.appendtext .textfunctiond{ 返回d; }.attr; */ var dataArray1=[5,10,20,30]; var bars1=canvas.selectAllrect.addon .DataArray1 进来 .appendrect .attr'class','addon' .attrwidth,函数d{ 返回d*7; } .身高20 .attry,功能正常,i{ 返回i*35+5; } .填充,红色; //.填充宽度,黑色;
对于这种类型的转换,您需要更改x和y以上的值

使用示例代码,图表的形状将由每个矩形的四个属性决定:x、y、宽度和高度。毕竟,通常垂直条形图的每个条形图的高度都不相同,而水平条形图的高度相同

其次,大多数垂直条形图的矩形定位在底部,而大多数水平条形图的矩形定位在左侧。在svg坐标空间中,svg的顶部为y=0,而svg的左侧为x=0。因此,在您的示例中,只需交换x和y、宽度和高度,就会生成一个条形图,其中条形图从图表顶部向下延伸

要解决此问题,需要修改每个矩形的y属性。由于y属性设置了矩形的顶部,因此需要计算出每个矩形的顶部。对于您的代码:

.attr("y", function(d,i) { return heightOfSVG - heightOfRectangle; }) // bottom of rectangle - rectangle height = rectangle top
这一行是新的,因为您没有在原始代码中设置x属性,而是使用默认的零。这在垂直图形中不起作用,因为在大多数情况下,矩形的顶部不能位于y=0

当然,使用刻度会使这一点变得复杂,如标记轴、多系列条形图等。我已经使用了您提供的代码。我已经将您的示例剥离为一个图表,而不是两个图表,以显示这些更改可能应用于无比例图的最小示例

var canvas=d3.selectbody .appendsvg .attr宽,500.attr高,500; var bar=canvas.selectAllrect .数据[10,20,40,60] 进来 .appendrect .attrheight,函数为{ 返回d*10; } .宽度,30 .attrx,函数d,i{ 返回i*35; } .attry,函数d,i{return 500-d*10;} .绿色,蓝色;
你必须:1。改变尺度,包括域和范围;2.更改轴生成器和轴组;3.更改矩形的x、y、高度和宽度属性的逻辑。很多工作让你玩得开心。谢谢你的回复Gerardo。你能找到上面的代码并在代码中提到我必须更改的地方吗。谢谢。这将对我有很大帮助。我已经告诉你必须更改的内容。谢谢Andrew。这其实是我想要的