Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在D3V4的scaleTime中使用rangeRound?_Javascript_D3.js - Fatal编程技术网

Javascript 如何在D3V4的scaleTime中使用rangeRound?

Javascript 如何在D3V4的scaleTime中使用rangeRound?,javascript,d3.js,Javascript,D3.js,我试图创建一个发散条形图,它使用时间刻度(日期)作为x轴。我在使用带日期的缩放键时遇到问题,日期标签重叠 这就是我目前得到的。不幸的是,当我使用scaleTime时,图形无法加载 我需要在这张图上使用缩放和画笔 <!DOCTYPE html> <meta charset="utf-8"> <svg width="960" height="500"></svg> <script src="https://d3js.org/d3.v4.min.j

我试图创建一个发散条形图,它使用时间刻度(日期)作为x轴。我在使用带日期的缩放键时遇到问题,日期标签重叠

这就是我目前得到的。不幸的是,当我使用scaleTime时,图形无法加载

我需要在这张图上使用缩放和画笔

<!DOCTYPE html>
<meta charset="utf-8">
<svg width="960" height="500"></svg>
<script src="https://d3js.org/d3.v4.min.js"></script>
<script>

var data = [{"Date":"2015-01-02T00:00:00.000Z","Buy":554646.5,"Sell":-406301.3547},{"Date":"2015-02-02T00:00:00.000Z","Buy":565499.5,"Sell":-673692.5697},{"Date":"2015-03-02T00:00:00.000Z","Buy":421954.5,"Sell":-571685.4629},{"Date":"2015-04-02T00:00:00.000Z","Buy":466242.0,"Sell":-457477.7121},{"Date":"2015-05-02T00:00:00.000Z","Buy":350199.7,"Sell":-579682.8772},{"Date":"2015-06-02T00:00:00.000Z","Buy":391035.1,"Sell":-338816.6205},{"Date":"2015-07-02T00:00:00.000Z","Buy":437644.6,"Sell":-502329.557},{"Date":"2015-08-02T00:00:00.000Z","Buy":291978.9,"Sell":-504067.0329},{"Date":"2015-09-02T00:00:00.000Z","Buy":360913.8,"Sell":-489519.6652},{"Date":"2015-10-02T00:00:00.000Z","Buy":505799.1,"Sell":-723353.7089},{"Date":"2015-11-02T00:00:00.000Z","Buy":510691.0,"Sell":-374061.8139},{"Date":"2015-12-02T00:00:00.000Z","Buy":527757.1,"Sell":-597800.0116},{"Date":"2016-01-02T00:00:00.000Z","Buy":564799.1,"Sell":-451779.1593},{"Date":"2016-02-02T00:00:00.000Z","Buy":336533.7,"Sell":-522601.1707},{"Date":"2016-03-02T00:00:00.000Z","Buy":460684.6,"Sell":-643556.0079999999},{"Date":"2016-04-02T00:00:00.000Z","Buy":428388.1,"Sell":-349216.2376},{"Date":"2016-05-02T00:00:00.000Z","Buy":525459.5,"Sell":-597258.4075},{"Date":"2016-06-02T00:00:00.000Z","Buy":677659.1,"Sell":-513192.107},{"Date":"2016-07-02T00:00:00.000Z","Buy":365612.8,"Sell":-287845.8089},{"Date":"2016-07-03T00:00:00.000Z","Buy":358775.2,"Sell":-414573.209}]

 var parseTime =  d3.utcParse("%Y-%m-%dT%H:%M:%S.%LZ");

    data.forEach(d => {
                  d["Date"] = parseTime(d["Date"]);

                })


var series = d3.stack()
    .keys(["Buy", "Sell"])
    .offset(d3.stackOffsetDiverging)
    (data);

var svg = d3.select("svg"),
    margin = {top: 20, right: 30, bottom: 30, left: 60},
    width = +svg.attr("width"),
    height = +svg.attr("height"); 

var x = d3.scaleBand()
    .domain(data.map(function(d) { return d['Date']; }))
    .rangeRound([margin.left, width - margin.right])
    .padding(0.1);

var y = d3.scaleLinear()
    .domain([d3.min(series, stackMin), d3.max(series, stackMax)])
    .rangeRound([height - margin.bottom, margin.top]);

var z = d3.scaleOrdinal()
            .range(["green","red"]);

svg.append("g")
  .selectAll("g")
  .data(series)
  .enter().append("g")
    .attr("fill", function(d) { return z(d.key); })
  .selectAll("rect")
  .data(function(d) { return d; })
  .enter().append("rect")
    .attr("width", x.bandwidth)
    .attr("x", function(d) { return x(d.data["Date"]); })
    .attr("y", function(d) { return y(d[1]); })
    .attr("height", function(d) { return y(d[0]) - y(d[1]); })

svg.append("g")
    .attr("transform", "translate(0,"+ (height-margin.top) + ")")
    .call(d3.axisBottom(x));

svg.append("g")
    .attr("transform", "translate(" + margin.left + ",0)")
    .call(d3.axisLeft(y));

function stackMin(serie) {
  return d3.min(serie, function(d) { return d[0]; });
}

function stackMax(serie) {
  return d3.max(serie, function(d) { return d[1]; });
}

</script>

“买”:554646.5,“买”:421954.5,”买:421954.5,“买”:421954.5,“卖,”卖,”卖,”卖,”卖:卖卖卖:卖:40631954.5,”卖:卖:卖:卖:卖:卖:卖:卖:卖:卖:卖:卖:卖:卖:卖:卖:卖:571954.5.5,卖:卖:5758585.585.585.465.465.465.465.4629},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,日期日期:,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,日期日期日期日期日期日期日期:,,,,,,,,,,,,,,,,,,七,,“买买”:391035.1,“买”:391035.1,“卖,”卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖日期日期日期:日期:2015-2008-08-08-08-0200:00:00:00 00 00.00.00.000Z,”买:购买:291978.1978.9 9.9,卖卖卖卖卖卖卖卖卖卖:1978.1978.1978.9。卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖。5050505050505050504040404040407.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.9。卖卖卖卖卖购买,,,,,,,,,,,日期::,,,,,,日期::,,,,,,,,,日期::,,,,,,日期::,,,,,,,,,,购买:2015-11-11-11-11-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-00:00:00:00.00.00.00 00.00 00 00 00 00.000Z,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,日期日期:,,,日期:,,,,日期:,日期:,日期:,,日期:,日期:,日期:,,日期:,,,日期:,日期日期:,日期:2016 2016-2016-2016-2016-2016-2016-2016-2016-2016-2016-2016-2016-01-01-01-01-01-01-T00:00:00.000Z“,“买入”:460684.6,“卖出”:-643556.007999999},{“日期”:“2016-04-02T00:00:00.000Z”,“买入”:428388.1,“卖出”:-349216.2376},{“日期”:“2016-05-02T00:00:00.000Z”,“买入”:525459.5,“卖出”:-597258.4075},{“日期”:“2016-06-02T00:00.000Z”,“买入”:677659.1,“卖出”:-513192.107},{“日期”:“卖出”:“2016-05-02T00:00.00012.000Z”,“买入”:“2016-07-03T00:00:00.000Z”,“买入”:358775.2,“卖出”:-414573.209}]
var parseTime=d3.utcParse(“%Y-%m-%dT%H:%m:%S.%LZ”);
data.forEach(d=>{
d[“日期”]=解析时间(d[“日期”]);
})
var series=d3.stack()
.keys([“购买”、“出售”])
.偏移(d3.堆栈偏移发散)
(数据);
var svg=d3。选择(“svg”),
边距={顶部:20,右侧:30,底部:30,左侧:60},
宽度=+svg.attr(“宽度”),
高度=+svg.attr(“高度”);
var x=d3.scaleBand()
.domain(data.map(函数(d){returnd['Date'];}))
.rangeRound([margin.left,width-margin.right])
.填充(0.1);
变量y=d3.scaleLinear()
.domain([d3.min(series,stackMin),d3.max(series,stackMax)])
.rangeRound([高度-边距.底部,边距.顶部]);
var z=d3.scaleOrdinal()
.范围([“绿色”、“红色]);
svg.append(“g”)
.全选(“g”)
.数据(系列)
.enter().append(“g”)
.attr(“fill”,函数(d){返回z(d.key);})
.selectAll(“rect”)
.data(函数(d){return d;})
.enter().append(“rect”)
.attr(“宽度”,x.带宽)
.attr(“x”,函数(d){返回x(d.data[“Date”];})
.attr(“y”,函数(d){返回y(d[1]);})
.attr(“height”,函数(d){返回y(d[0])-y(d[1]);})
svg.append(“g”)
.attr(“变换”、“平移(0)”+(高度边距.top)+”)
.call(d3.axisBottom(x));
svg.append(“g”)
.attr(“变换”、“平移”(+margin.left+”,0))
.调用(d3.左(y));
函数stackMin(系列){
返回d3.min(序列,函数(d){返回d[0];});
}
函数stackMax(系列){
返回d3.max(序列,函数(d){返回d[1];});
}

d3.scaleTime必须在许多方面得到不同的处理

比例不将填充作为参数:

var x = d3.scaleTime()
    .domain(d3.extent(data, function(d) { return d.Date; }))
    .rangeRound([margin.left, width - margin.right]);
时间是连续的,而不是离散的,因此需要手动计算条的宽度,作为
rect
series.length
的比率。我已经做到了这一点,但也许你想要更优雅的东西:

.attr("width", width/series.length - 450)

d3.scaleTime
必须在许多方面进行不同的处理

比例不将填充作为参数:

var x = d3.scaleTime()
    .domain(d3.extent(data, function(d) { return d.Date; }))
    .rangeRound([margin.left, width - margin.right]);
时间是连续的,而不是离散的,因此需要手动计算条的宽度,作为
rect
series.length
的比率。我已经做到了这一点,但也许你想要更优雅的东西:

.attr("width", width/series.length - 450)

谢谢,它成功了。你介意看看我发布的这个问题吗?我想我已经接近解决我的问题了。给我一些建议,用缩放和条形图效果来实现这个图形。谢谢,它成功了。你介意看看我发布的这个问题吗?我想我已经接近解决我遇到的问题了ave.给我一些建议来实现这个带有缩放和条形图效果的图形。