浮点图 - 打开/关闭系列

2023-12-02

我成功地建立了我的流程图,基于上一篇文章

我想让查看者通过单击即可显示/隐藏该系列。 我找到了很多解决方案,包括官方的和其他的,但没有一个对我有用。 我会解释一下:

  1. 官方开启/关闭系列:这有效,但看起来非常混乱,因为图例最终被复制了两次(一旦系列关闭,就会从官方图例中消失)。
  2. 隐藏图.js:这是一个可以在插件存储库中找到的插件,但它不能正常工作,也不能与 Chrome 很好地交互(尝试了不止一台机器,它就是不起作用)。
  3. 这个解决方案实际上非常好(我不介意没有复选框可供检查),但是当我将它集成到我的代码中时,我得到的只是“跳”到页面顶部,并且没有任何反应。
  4. 最后我找到了这个解决方案,尽管使用另一个 js 库,它也可以工作,称为flot.togglelegend.js。 在这个实现中我发现了一些主要的冲突flot.cust.js,并且无法让他们俩一起工作。

这是我当前的js(用coffeescript编写)

    colorArray = []
    colorArray.push "rgba(180, 0, 75,    0.6)"
    colorArray.push "rgba(0, 150, 100,   0.6)"
    colorArray.push "rgba(0, 0, 255,     0.6)"
    colorArray.push "rgba(140, 0, 255,   0.6)"
    colorArray.push "rgba(90, 180, 20,   0.6)"
    colorArray.push "rgba(255, 236, 0,   0.6)"
    colorArray.push "rgba(234, 170, 21,  0.6)"
    colorArray.push "rgba(95, 180, 190,  0.6)"
    colorArray.push "rgba(214, 92, 63,   0.6)"
    colorArray.push "rgba(218, 106, 234, 0.6)"
    colorArray.push "rgba(213, 128, 155, 0.6)"

    # chart colors default 
    $chrt_border_color = "#efefef"
    $chrt_grid_color = "#DDD"
    $chrt_main = "#E24913"

    # red       
    $chrt_second = "#6595b4"
    # blue      
    $chrt_third = "#FF9F01"
    # orange    
    $chrt_fourth = "#7e9d3a"
    # green     
    $chrt_fifth = "#BD362F"
    # dark red  
    $chrt_mono = "#000"

    Chart = 

    generateDataObjects: (all_series, all_series_data) ->
        plotData = []

        for series, i in all_series
            obj =
                label: series.replace /__/g, "|"
                data: all_series_data[i]
                color: colorArray[i]

            plotData.push obj

        return plotData

    togglePlot: (seriesIdx) ->
        someData = plot.getData()
        someData[seriesIdx].lines.show = not someData[seriesIdx].lines.show
        plot.setData someData
        plot.draw()
        return  

    getTooltip: (label, xval, yval, flotItem) ->
            return 'Build: <span>'+ flotItem.series.data[flotItem.dataIndex][6]+'</span>' +" |     Run ID: <strong> #{flotItem.series.data[flotItem.dataIndex][7].toString()}</strong>" + '<br> Result: <span>'+Chart.commify(yval)+'</span>'

    commify: (x) ->
        return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");

    generateChartOptions: (legend_container, ticks) ->
        return (
            series:
                lines:
                    show: true

                points:
                    show: true

            crosshair:
                mode: "x"

            legend:
                container: $("##{legend_container}")
                labelFormatter: (label, series) ->
                    "<a href=\"javascript:void(0);\" onClick=\"Chart.togglePlot(" + series.idx + "); return false;\">" + label + "</a>"
                noColumns: 4
                # hideable: true

            grid:
              hoverable: true
              clickable: true
              tickColor: $chrt_border_color
              borderWidth: 0
              borderColor: $chrt_border_color

            tooltip: true
            tooltipOpts: 
              content : Chart.getTooltip
              #content : "Value <b>$x</b> Value <span>$y</span>",
              defaultTheme: false

            xaxis:
                ticks: ticks
                rotateTicks: 30

            selection:
                mode: "xy"
            )



     jQuery ->
        if $("#normalized_bw_chart").length         # render only if the chart-id is present

            raw_data = $("#normalized_bw_chart").data('results')
            ticks = $("#normalized_bw_chart").data('ticks')
            all_series = $("#normalized_bw_chart").data('series')

            plot = $.plot($("#normalized_bw_chart"), Chart.generateDataObjects(all_series, raw_data), Chart.generateChartOptions('normalized_bw_legend', ticks))    

        if $("#concurrent_flows_chart").length      # render only if the chart-id is present

            raw_data = $("#concurrent_flows_chart").data('results')
            ticks = $("#concurrent_flows_chart").data('ticks')
            all_series = $("#concurrent_flows_chart").data('series')

            plot = $.plot($("#concurrent_flows_chart"), Chart.generateDataObjects(all_series, raw_data), Chart.generateChartOptions('concurrent_flows_legend', ticks))

        if $("#bandwidth_chart").length         # render only if the chart-id is present

            raw_data = $("#bandwidth_chart").data('results')
            ticks = $("#bandwidth_chart").data('ticks')
            all_series = $("#bandwidth_chart").data('series')

            plot = $.plot($("#bandwidth_chart"), Chart.generateDataObjects(all_series, raw_data), Chart.generateChartOptions('bandwidth_legend', ticks))    

        $("[data-behavior~=chart-selection]").bind "plotselected", (event, ranges) ->
                selected_chart = $(this).attr('id')[0...-6] # slicing the name of the selected item
                console.log  ("zooming in to " + selected_chart)
                plot = $.plot($("##{selected_chart}_chart"), plot.getData(), $.extend(true, {}, Chart.generateChartOptions(selected_chart+'_legend', ticks),
                  xaxis:
                    min: ranges.xaxis.from
                    max: ranges.xaxis.to

                  yaxis:
                    min: ranges.yaxis.from
                    max: ranges.yaxis.to
                ))
             return

        $("[data-behavior~=chart-selection]").bind "dblclick", (event, pos, item) ->
                selected_chart = $(this).attr('id')[0...-6] # slicing the name of the selected item
                console.log  ("zooming out to " + selected_chart)
                plot = $.plot($("##{selected_chart}_chart"), plot.getData(), $.extend(true, {}, Chart.generateChartOptions(selected_chart+'_legend', ticks),
                  xaxis:
                    min: null
                    max: null
              yaxis:
                min: null
                max: null
            ))
         return

这是一个小提琴:http://jsfiddle.net/danklein/0tn1uzs9/3/

多谢!


1) 当 onClick 的范围超出了 HTML 的范围时,直接在 HTML 中使用 onClick 是一个坏主意Chart对象不是全局的。我将其更改为 jquery 事件处理程序:

$('body').on 'click', 'a.legendtoggle', (event) ->
    Chart.togglePlot($(this).data('index'))
    return false

2) The series对象在labelFormatter函数没有idx属性,所以我在里面使用了一个变量Chart object:

labelFormatter: (label, series) ->
    "<a href=\"#\" class=\"legendtoggle\" data-index=\"" + Chart.legendindex++ + "\">" + label + "</a>"

3)我也把你的plot里面有物体Chart以便可以在内部访问它togglePlot功能。我改变了lines to points因为您的数据每个系列只有一个数据点:

togglePlot: (seriesIdx) ->
    someData = this.plot.getData()
    someData[seriesIdx].points.show = not someData[seriesIdx].points.show
    this.plot.setData someData
    this.plot.draw()
    return

这应该是我改变的全部,但是你自己比较一下我是否得到了一切。
这是一个工作小提琴:http://jsfiddle.net/jhpgtxz1/2/

PS:我再也不会用 CoffeeScript 了:-(

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

浮点图 - 打开/关闭系列 的相关文章

随机推荐

  • 如何在 FastAPI 中使用带有表单数据的 Pydantic 模型?

    我正在尝试从 HTML 表单提交数据并使用 Pydantic 模型对其进行验证 使用此代码 from fastapi import FastAPI Form from pydantic import BaseModel from starl
  • ggmap 400 错误请求

    我以前用过这个 而且一直有效 library ggmap newmap2 lt get openstreetmap bbox c left 71 2612362452596 bottom 42 3308503846824 right 71
  • 如何使Google电子表格的所有工作表在左上角显示A1?

    我有一个 72 页的 Google 电子表格 我正在尝试重置每个工作表 以便当您单击其选项卡时 它会在左上角显示 A1 也就是说 如果向下滚动一张工作表以致您看不到 A1 我希望它向后滚动以便您可以看到 我已经尝试过以下谷歌脚本 但没有任何
  • 创建独立的jar文件

    我已经建立了一个jar使用 Netbeans 创建文件 它在我的系统中运行良好 但我想做jar能够在所有具有 JRE 的系统中运行的文件 即使是classpath没有在该系统中设置 package circle import java aw
  • 使用静态成员变量时出现链接器错误

    我已经在这里浏览了与静态成员变量相关的所有线程 但不幸的是这无法帮助我找出原因 这就是问题 定义一个类名dvd db 包括以下成员 数据成员 DVD 名称 私有字符数组 大小 10 价格 私有双变量 数量 私有 int 变量 一个私有静态
  • 分析是什么以及如何分析我的 Java 程序?

    我听说过很多关于剖析的事情 这是怎么回事 据我了解 这是某种绩效衡量 但有人可以更清楚地阐述这一点 以便新手能够掌握这个想法 另外 我将 Eclipse IDE 用于我的 Java 程序 我可以使用 Eclipse IDE 分析我的程序吗
  • Pandas read_csv 在解析数字时忽略美元符号

    我有一个 csv 文件 其中一些单元格带有美元符号 例如 46 5 我强迫所有类型都是numpy float64在函数中pandas read csv 它抱怨ValueError could not convert string to fl
  • 如何修复 IE7 浮动清除组合

    我有一个 field wrapper 类 div 其中包含 3 个子 div field label field input 和 field error 我需要将 field label field input 并排放置 并将 field
  • Canvas/JS:计算倾斜斜坡碰撞中物体的新速度矢量?

    好吧 我正在 JS Canvas 上开发弹球游戏 我想知道如何处理鳍状肢和球之间的碰撞 我可以让脚蹼击球 但我对如何通过不同的脚蹼位置 角度 改变球的速度方向感到困惑 以下是我可以从脚蹼和球中使用的信息 this ballPosX ball
  • Django:管理中的验证错误

    新手警报 背景 这是我第一次编写一个需要验证的模型 我不能有两个Items具有重叠的 日期范围 我一切正常 除了当我引发 forms ValidationError 时 我得到死亡黄屏 debug true 或 500 页 debug fa
  • 如何快速制作不同形状的图像视图

    我想将普通的ios图像视图更改为下面的图像形状 如弧线 您可以使用它来根据您的要求设计形状 您可以向路径添加额外的线条 以防您需要修改贝塞尔曲线路径 创建一个自定义 UIImageView 类 并将故事板中的图像视图子类化为您的自定义类 i
  • 默认最大 Java 堆大小是如何确定的?

    如果我省略 Xmxn来自 Java 命令行的选项 则将使用默认值 根据Java 文档 默认值是在运行时根据系统配置选择的 哪些系统配置设置会影响默认值 在 Windows 上 您可以使用以下命令来查找运行应用程序的系统上的默认值 java
  • 如何使用url参数自动登录网站?

    我有一个链接 如果用户点击该链接 它应该会自动登录该网站 并从该网址读取用户名和密码 因此 用户无需填写用户名字段和密码字段即可查看该站点 url 格式是否正确 如果不正确 正确的格式是什么 我认为你需要的格式是 http 用户名 电子邮件
  • 如何将 MFP 8 Beta 移动应用程序迁移到 MFP 8 GA 版本?

    情况是这样的 我构建了一个与 mfp 8 beta 进行不同集成的应用程序 该应用程序在本地开发服务器上完全运行 并且主要在 Bluemix 上运行 测试期间 该应用程序的所有基本功能均在 MFP 8 Beta 服务器 本地和 Bluemi
  • 使用 yadcf 过滤器导出为 PDF 时标题不正确

    当我尝试使用过滤器 yadcf 将数据表导出为 pdf 时 标题始终显示过滤器中的每个案例 如何隐藏它 我的 JavaScript 是 var vsan vsan DataTable lengthMenu 1 10 40 50 All 10
  • Clojure:try,catch 宏也会关闭任何文件流(不是 with-open)

    UPDATE 感谢迄今为止所有的帮助 这是我的新代码 可以运行 但并不完全如我所愿 我需要它返回java异常 不要问我为什么 例子 safe 1 0
  • 如何取消定时器并更新相同的定时器?

    我正在创建一个每 30 秒振动一次并发出蜂鸣声的应用程序 当我注销时 振动和蜂鸣声必须取消 当我登录时 振动和蜂鸣声应恢复 注意 它必须每 30 秒振动一次并发出蜂鸣声 直到我退出 在我的应用程序中我正在使用TimerTask对于这个实现
  • 当 Swift 桥接头导入导入 Hopscotch-Swift.h 本身的文件时,如何防止循环引用

    我正在将 Swift 集成到一个现有的大型 Objective C 项目中 并且遇到了我认为是循环引用的情况 有问题的类如下 Objective C 控制器 import Hopscotch Swift h interface MyCont
  • Powershell:接收函数返回的数组包含数组中每个值的增量数字[重复]

    这个问题在这里已经有答案了 我是 PowerShell 新手 有一个我无法解释的奇怪行为 我调用一个返回a的函数 System Collections ArrayList 但是当我打印接收数组内容的变量时 如果我有一个值 例如 logXXX
  • 浮点图 - 打开/关闭系列

    我成功地建立了我的流程图 基于上一篇文章 我想让查看者通过单击即可显示 隐藏该系列 我找到了很多解决方案 包括官方的和其他的 但没有一个对我有用 我会解释一下 官方开启 关闭系列 这有效 但看起来非常混乱 因为图例最终被复制了两次 一旦系列