如何在Plottable.js中调整图表大小

How to resize chart in Plottable.js

本文关键字:调整 Plottable js      更新时间:2023-09-26

我使用Plottable.js在我的页面上绘制图表。我想在调整窗口大小时调整图表的大小。

我试过通过css(以及svg的宽度和高度属性)设置大小,但没有成功。

这是我的尝试设置通过svg属性:

$('#svgSample').attr('width', w);
$('#svgSample').attr('height', h);

这是我尝试通过css设置:

$('#svgSample').css({
    'width': w + 'px',
    'height': h + 'px'
});

任何想法?

谢谢

我相信你所需要做的就是在设置svg属性后调用Plot.redraw()

这里有一个例子:

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 "important"属性来覆盖宽度

Ex: width: 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()!

谢谢佐伊!