gpt4 book ai didi

html - 根据 D3.js 中的设备大小更改 SVG 的大小?

转载 作者:搜寻专家 更新时间:2023-10-31 21:52:33 25 4
gpt4 key购买 nike

我正在尝试使用 leaflet.js 和 d3.js 可视化 map 和图表。我想让查看设备兼容。但是我的图表和 map 与设备不兼容。显示简单条形图的代码如下:

function updateCharts(data){

var margin = {top: 20, right: 20, bottom: 70, left: 40},
width = 400 - margin.left - margin.right,
height = 250 - margin.top;
var x = d3.scale.ordinal().rangeRoundBands([ 0, width ], .05);
var y = d3.scale.linear().range([ height, 0 ]);

var xAxis = d3.svg.axis().scale(x).orient("bottom");
var yAxis = d3.svg.axis().scale(y).orient("left").ticks(20);

x.domain(data.map(function(d) { return d.time; }));
y.domain([0, d3.max(data, function(d) { return d.speed1; })]);

var svg=d3.select("#bar").append("svg").attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom).append("g").attr("transform",
"translate(" + margin.left + "," + margin.top + ")");

var transition = svg.transition().duration(750), delay = function(d, i) {
return i * 50;
};
svg.append("text").attr("x", width / 2).attr("y", 0).style("text-anchor",
"middle").text("Speed of Lane1 Vs Time");

//Create X axis label
svg.append("text")
.attr("x", width / 2 )
.attr("y", height + margin.bottom)
.style("text-anchor", "middle")
.text("Time");

svg.append("text")
.attr("transform", "rotate(-90)")
.attr("y", 0-margin.left)
.attr("x",0 - (height / 2))
.attr("dy", "1em")
.style("text-anchor", "middle")
.text("Speed");

svg.append("g")
.attr("class", "x axis")
.attr("transform", "translate(0," + height + ")")
.call(xAxis)
.selectAll("text")
.style("text-anchor", "end")
.attr("dx", "-.8em")
.attr("dy", "-.55em")
.attr("transform", "rotate(-90)" );

svg.append("g")
.attr("class", "y axis")
.call(yAxis)
.append("text")
.attr("transform", "rotate(-90)")
.attr("y", 6)
.attr("dy", ".71em")
.attr("x",5)
.style("text-anchor", "middle");

svg.selectAll("rect")
.data(data)
.enter().append("rect").transition().delay(0)
.style("fill", "red")
.attr("x", function(d,i) { return x(d.time); }) //v
.attr("width", x.rangeBand())
.attr("y", function(d) { return y(d.speed1); })
.attr("height", function(d) { return height - y(d.speed1); });
//function(d){return " "+d.datetime;}

//transition.select(".y.axis").call(yAxis);

// New SVG
}

在 html 中,我还为设备兼容性添加了元标记,如下所示:

<meta name="viewport" content="width=device-width, initial-scale=1.0">

即使设备尺寸很小,也会出现水平滚动条。但我不想水平看到这样的滚动条。我希望图表和 map 适合设备宽度。谁能帮我解决这个问题?

最佳答案

示例(注意:使用 jQuery):

var $graphic = $('#graphic');
function drawGraphic() {
var margin = { top: 10, right: 10, bottom: 30, left: 30 };
var width = $graphic.width() - margin.left - margin.right;
$graphic.empty();
// ... code to create the chart ...
}
d3.csv("data.csv", function(data) { //loading data, may differ
// ... manipulate data here ...
drawGraphic();
window.onresize = drawGraphic;
}

这里描述了一种基于 D3 响应图表的方法:http://blog.apps.npr.org/2014/05/19/responsive-charts.html

此处描述了我的示例:http://bl.ocks.org/michalskop/2fa7d4c0ae029c36ba4e

在此处查看实际效果:http://bl.ocks.org/michalskop/raw/2fa7d4c0ae029c36ba4e/

我基于 Leaflet 的响应式 map 演示:http://bl.ocks.org/michalskop/raw/001f6182db52d08f4925/

关于html - 根据 D3.js 中的设备大小更改 SVG 的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28329342/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com