Как изменить размер графика в Plottable.js
Я использую Plottable.js, чтобы нарисовать диаграмму на своей странице. Я хотел бы изменить размер графика при изменении размера окна.
Я попытался установить размер с помощью css (а также svg width и height) безуспешно.
Вот моя попытка установить через атрибут svg:
$('#svgSample').attr('width', w);
$('#svgSample').attr('height', h);
Вот моя попытка установить через CSS:
$('#svgSample').css({
'width': w + 'px',
'height': h + 'px'
});
Любая идея?
Спасибо
3 ответа
Я считаю, что все, что вам нужно сделать, это позвонить Plot.redraw()
после установки атрибутов SVG
вот пример:
window.onload = function() {
var data = [
{ x: 1, y: 1 },
{ x: 2, y: 1 },
{ x: 3, y: 2 },
{ x: 4, y: 3 },
{ x: 5, y: 5 },
{ x: 6, y: 8 }
];
var xScale = new Plottable.Scales.Linear();
var yScale = new Plottable.Scales.Linear();
var plot = new Plottable.Plots.Scatter()
.addDataset(new Plottable.Dataset(data))
.x(function(d) { return d.x; }, xScale)
.y(function(d) { return d.y; }, yScale);
plot.renderTo("#chart");
$('#chart').attr('width', 500);
$('#chart').attr('height', 400);
plot.redraw();
}
</style> <link rel="stylesheet" type="text/css" href="https://rawgithub.com/palantir/plottable/develop/plottable.css"> <style type="text/css">
body { background-color: #AAA; }
svg { background-color: #FFF; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>
<script src="https://rawgithub.com/palantir/plottable/develop/plottable.js"></script>
<svg id="chart" width="100" height="100"></svg>
С помощью CSS вы можете перезаписать ширину, используя CSS "важное" свойство
Пример: ширина: 100%! Важно; примените это к вашему div и попробуйте
Благодаря Zoe, я изменил свой код в ответ на перерисовку при изменении размера окна.
var data = [
{ x: 1, y: 1 },
{ x: 2, y: 1 },
{ x: 3, y: 2 },
{ x: 4, y: 3 },
{ x: 5, y: 5 },
{ x: 6, y: 8 }
];
var xScale = new Plottable.Scales.Linear();
var yScale = new Plottable.Scales.Linear();
var xAxis = new Plottable.Axes.Category(xScale, "bottom");
var yAxis = new Plottable.Axes.Numeric(yScale, "left");
var plot = new Plottable.Plots.Bar()
.addDataset(new Plottable.Dataset(data))
.x(function(d) { return d.x; }, xScale)
.y(function(d) { return d.y; }, yScale);
var chart = new Plottable.Components.Table([
[yAxis, plotBar],
[null, xAxis]
]);
chart.renderTo("svg#svgSample");
window.addEventListener("resize", function () {
plot.redraw();
});
Как видите, мне даже не нужно беспокоиться о настройке ширины и высоты в css. Я думаю, что Plottable обрабатывает это при вызове plot.redraw()!
Спасибо, Зоя!