使用Flot Javascript绘图库重叠数据行

 袁怡松_779 发布于 2023-02-10 02:59

我必须绘制多行,并希望在鼠标悬停时在数据点上绘制工具提示.但是,有些人可能共享相同的(x,y).这导致重叠点.它们被绘制在彼此之上.

似乎"plothover"事件只返回最后绘制的最顶层的数据.因此,工具提示仅适用于该点.我希望在多个数据点悬停时绘制多个工具提示.

有没有人遇到过这个问题?

谢谢!

1 个回答
  • 是的,看看来源,flot只会找到最重要的一点plothover.最简单的方法就是自己完成工作.这是plothover绑定的通用搜索:

        if (item) {
            var content = item.series.label;
            var someData = plot.getData();
            for (var i = 0; i < someData.length; i++){
                if (someData[i].label == item.series.label){
                    continue; // skip item's series...
                }
                for (var j=0; j < someData[i].data.length; j++){
                    if (someData[i].data[j][0] == item.datapoint[0] &&
                        someData[i].data[j][1] == item.datapoint[1]){
                          content += ' ' + someData[i].label; 
                    }
                }                
            }
            showTooltip(item.pageX, item.pageY, content);
        }
    

    这里的小提琴示例.


    完整代码:

    $(function () {
    
        var plot = $.plot($("#placeholder"),[ 
            { data: [[0,0],[1,1],[2,2]], label: "Line One"},
            { data: [[0,2],[1,1],[2,0]], label: "Line Two"},
            { data: [[0,0],[0.5,1],[1,1],[2,3]], label: "Line Three"} 
        ], {
            series: {
                lines: { show: true },
                points: { show: true }
            },
            grid: { hoverable: true, clickable: true }
        });
    
        function showTooltip(x, y, contents) {
            $('#tooltip').html(contents);
            $('#tooltip').css({
                top: y + 5,
                left: x + 5,
                display: 'block'});
        }
    
        $("#placeholder").bind("plothover", function (event, pos, item) {
            if (item) {
                var content = item.series.label;
                var someData = plot.getData();
                for (var i = 0; i < someData.length; i++){
                    if (someData[i].label == item.series.label){
                        continue;   
                    }
                    for (var j=0; j < someData[i].data.length; j++){
                        if (someData[i].data[j][0] == item.datapoint[0] &&
                            someData[i].data[j][1] == item.datapoint[1]){
                              content += ' ' + someData[i].label; 
                        }
                    }                
                }
                
                
                
                showTooltip(item.pageX, item.pageY, content);
            }
            else 
            {
                $("#tooltip").css('display','none');       
            }
    
        });
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <script src="http://www.flotcharts.org/javascript/jquery.flot.min.js"></script>
    <br/><br/>
    <div id="placeholder" ></div>
    <div id="tooltip" style="position: absolute;
                display: none;            
                border: 1px solid #fdd;
                padding: 2px;
                background-color: #fee;
                opacity: 0.80"></div>
    2023-02-10 03:39 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有