Как изменить размер графика в 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()!

Спасибо, Зоя!

Другие вопросы по тегам