JQuery、Flot、值标签、中心

标签 jquery center flot

是否可以将值标签放置在条形上,使它们位于条形的中心?

如果我设置条形 align: "center",则条形上的标签将关闭且不居中。

enter image description here

<script type="text/javascript">

    $(function() {

        var data = [<?php echo $data; ?>];

        $.plot("#<?php echo $target; ?> .chart-placeholder", data, {
            series: {
                color: "rgb(57,137,209)",
                bars: {
                    show: true,
                    // align: "center",
                    barWidth: .8,
                    fill: 1     
                },
                valueLabels: {
                    show: true,
                    showAsHtml: true,
                    align: "center"
                }               
            },
            grid: {
                aboveData: true,
                hoverable: true,
                borderWidth: 0
            },
            xaxis: {
                mode: "categories",
                tickLength: 0,
                labelAngle: -45,
                showAsHtml: true
            },
            yaxis: {
                show: false,
                tickLength: 0
            },
        });
    });

    </script>

Flot

Flot Value Labels plugin

JSFIDDLE

最佳答案

插件让你失望了吗?自己做吧,生活就简单多了。这就是 flot 的优点,代码紧凑,不会妨碍您......

以下是我添加这些标签的方法:

// draw initial plot
// notice no categories plugin either, why?  
// Because it's easier to do it yourself...
var series = {data: [[0, 5.2], [1, 3], [2, 9.2], [3, 10]],
              lines: {show: false},
              bars: {show: true, barWidth: 0.75, align:'center'}}   
var somePlot = $.plot("#placeholder", [ series ], {
    xaxis: {
        ticks: [[0,"One"],[1,"Two"],
                [2,"Three"],[3,"Four"]]
    }
});

// after initial plot draw, then loop the data, add the labels
// I'm drawing these directly on the canvas, NO HTML DIVS!
// code is un-necessarily verbose for demonstration purposes
var ctx = somePlot.getCanvas().getContext("2d"); // get the context
var data = somePlot.getData()[0].data;  // get your series data
var xaxis = somePlot.getXAxes()[0]; // xAxis
var yaxis = somePlot.getYAxes()[0]; // yAxis
var offset = somePlot.getPlotOffset(); // plots offset
ctx.font = "16px 'Segoe UI'"; // set a pretty label font
ctx.fillStyle = "black";
for (var i = 0; i < data.length; i++){
    var text = data[i][1] + '';
    var metrics = ctx.measureText(text);
    var xPos = (xaxis.p2c(data[i][0])+offset.left) - metrics.width/2; // place it in the middle of the bar
    var yPos = yaxis.p2c(data[i][1]) + offset.top - 5; // place at top of bar, slightly up
    ctx.fillText(text, xPos, yPos);
}

Fiddle 演示是 here .

产品:

enter image description here

关于JQuery、Flot、值标签、中心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21701504/

相关文章:

javascript - 如何更改 Bootstrap slider 的大小?

css - 为什么这些 div 不排队?

javascript - Flot:0:00 的时间标记

javascript - 如何将FlotJs集成到ReactJs中

jquery - 工具提示指针向下显示到超链接的左侧

jquery - CSS 中的底部居中(拇指托盘)

javascript - Google map 风格和可视化 GeoCharts

html - 容器内的CSS中心div?

html - 联系表不会在父 div 中居中

jquery - float 条形图数据标签左偏移