新窗口中的高图表

2023-12-04

我使用 highcharts 在我的页面中显示图表。 它工作正常,但有时图表中的数据过于“压缩”,所以我应该找到一种方法以更大的尺寸查看图表。

我在互联网上阅读了几篇关于这个主题的文章: - 一般来说,他们建议使用 highslide,但我不想这样做,因为我的页面已经被脚本覆盖了 -有人尝试在弹出窗口中弹出内容,它可能适合我,但我没有成功 - 唯一适合我的准工作示例似乎如下: (在选项对象内我添加此属性)。

exporting: {
                    buttons: {
                        popUpBtn: {
                            symbol: 'square',
                            _titleKey: 'FullScreenButtonTitle',
                            x: -60,
                            symbolSize:18,
                            symbolFill: '#B5C9DF',
                            hoverSymbolFill: '#779ABF',
                            onclick: function () {
                                var win=window.open('','','location=0,titlebar=0,status=0,width=780,height=350');
                                win.focus();
                                var divtag = win.document.createElement("div");
                                divtag.id = "div1";
                                win.document.body.appendChild(divtag);
                                win.document.write('<script type="text/javascript" src="script/highcharts/js/highcharts.js"></script>\
                                                                    <script type="text/javascript" src="script/highcharts/js/modules/exporting.js"></script>');
                                this.options.renderTo=divtag;
                                var chart = new Highcharts.Chart(this.options);

                                win.document.close();
                            }
                        },
                        exportButton: {
                            enabled: true
                        },
                        printButton: {
                            enabled: true
                        }

                    }
                }

然而它不起作用,因为 div 标签没有插入,我得到的就是这个

<html>
 <head>
   <script type="text/javascript" src="script/highcharts/js/highcharts.js">  </script>
    <script type="text/javascript" src="script/highcharts/js/modules/exporting.js"></script>
    </head></html>

我无法理解这个错误。 我知道这应该很简单,但我无法独自出去。

- 编辑 - -

我终于明白这可能是一种工作策略:创建一个“chartpopup.html”页面,并向其传递构建我可视化的图形副本所需的参数。

所以现在我有:

索引.html:

    chartOptions = {
            series: [
                {
                    name: 'example',
                    data: [83.6, 78.8, 98.5, 93.4, 106.0]
                }]    
          //// CUT SOME CODE

                exporting: {
                    buttons: {
                        popUpBtn: {
                            enabled:true,
                            symbol: 'square',
                            _titleKey: 'FullScreenButtonTitle',
                            x: -60,
                            symbolSize:18,
                            symbolFill: '#B5C9DF',
                            hoverSymbolFill: '#779ABF',
                            onclick: function () {
                                look this!--------> generalPurposeGlobalVar = this;
                                var win=window.open('./chartpopup.html','Full Size Chart','location=0,titlebar=0,status=0,width=780,height=650');

                            }
                        },
                        exportButton: {
                            enabled: true
                        },
                        printButton: {
                            enabled: true
                        }

                    }
                }
            };
        this.highChart=new Highcharts.Chart(this.chartOptions);

和 Chartpopup.html:

   <!DOCTYPE html>
   <html>
   <head>
       <meta charset="utf-8">
       <title>Chart full Size</title>
   <script type="text/javascript" src="script/jquery-1.7.1-min.js"></script>
   <script type="text/javascript" src="script/highcharts/js/highcharts.js"></script>
   <script type="text/javascript" src="script/highcharts/js/modules/exporting.js">              </script>

   </head>
   <body>

   <div id="container" style="min-width: 400px; height: 650; margin: 0 auto"></div>

   <script>
   var chart;

   $(document).ready(function() {

       var mychart=window.opener.generalPurposeGlobalVar;

       mychart.options.chart.renderTo= 'container';
       chart = new Highcharts.Chart(mychart.options);


   });
   </script>
   </body>
   </html>

这两个页面实际上仅适用于默认图表。如果我修改并重新渲染图表,我将无法在弹出页面上重现它!

我用来修改图表的代码基本上是这样的:

        this.chartOptions.series=[{name:field.split('_').join('\n')}];
        this.highChart.destroy();
        this.highChart=new Highcharts.Chart(this.chartOptions);
        this.highChart.xAxis[0].setCategories(_.isEmpty(mygroups) ? [] : mygroups);
        this.highChart.series[0].setData([]);
        this.highChart.setTitle({text: this.highChart.title.text},{text:(field.split('_').join(' ')),  });
        this.highChart.redraw();//
   [...]
        self.highChart.series[0].addPoint(result);//it's a point I calculated before

下面是一个使用“老派”弹出窗口的 Highcharts 示例:

索引.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>highcharts foobar</title>
</head>
<body>
    <a href="javascript:open_chart_popup();">Open Chart Popup</a>
<script>
    function open_chart_popup() {
        window.open('popup.html', 'chart popup title', 'width=1680px height=1050px');
    }
</script>
</body>
</html>

弹出窗口.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>highcharts foobar</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
    <script src="http://code.highcharts.com/highcharts.js"></script>
    <script src="http://code.highcharts.com/modules/exporting.js"></script>
</head>
<body>

<div id="container" style="min-width: 400px; height: 400px; margin: 0 auto"></div>

<script>
var chart;

$(document).ready(function() {
    chart = new Highcharts.Chart({
        chart: {
            renderTo: 'container',
            type: 'line',
            marginRight: 130,
            marginBottom: 25
        },
        title: {
            text: 'Monthly Average Temperature',
            x: -20 //center
        },
        subtitle: {
            text: 'Source: WorldClimate.com',
            x: -20
        },
        xAxis: {
            categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
        },
        yAxis: {
            title: {
                text: 'Temperature (°C)'
            },
            plotLines: [{
                value: 0,
                width: 1,
                color: '#808080'
            }]
        },
        tooltip: {
            formatter: function() {
                return '<b>'+ this.series.name +'</b><br/>'+
                this.x +': '+ this.y +'°C';
            }
        },
        legend: {
            layout: 'vertical',
            align: 'right',
            verticalAlign: 'top',
            x: -10,
            y: 100,
            borderWidth: 0
        },
        series: [{
            name: 'Tokyo',
            data: [7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6]
        }, {
            name: 'New York',
            data: [-0.2, 0.8, 5.7, 11.3, 17.0, 22.0, 24.8, 24.1, 20.1, 14.1, 8.6, 2.5]
        }, {
            name: 'Berlin',
            data: [-0.9, 0.6, 3.5, 8.4, 13.5, 17.0, 18.6, 17.9, 14.3, 9.0, 3.9, 1.0]
        }, {
            name: 'London',
            data: [3.9, 4.2, 5.7, 8.5, 11.9, 15.2, 17.0, 16.6, 14.2, 10.3, 6.6, 4.8]
        }]
    });
});
</script>
</body>
</html>

如果此解决方案不适合您,请告诉我们您使用哪些 JavaScript 库(此示例依赖于 jQuery)。正如文档所述,highcharts 需要 jQuery、Mootools 或 Prototype :http://www.highcharts.com/documentation/how-to-use

如果您能够使用 jQuery,您可以使用一些更酷的效果来替换该弹出窗口,例如:http://jqueryui.com/demos/dialog/

尽管如此,如果您需要脚本方面的帮助,您可以考虑制作一个jsfiddle,我无法重现您的错误。

EDIT :

好的,所以你已经拥有了处理这个问题的所有东西。

我看到两个选择:

  • 您发送用户输入series通过 AJAX 请求将 JSON 数据发送到您的服务器。然后您的服务器向您发送回一个视图或一堆 html/js,其中包含带有用户数据的高图。回到客户端,您可以执行任何您想要的操作(例如触发包含图表的弹出窗口)。我对主干不太满意,但我确信你可以生成一个模板并将其渲染回来(这可能会有所帮助http://japhr.blogspot.fr/2011/08/getting-started-with-backbonejs-view.html)

  • 另一种解决方案是直接将模板(包含图形)设置到视图,但默认隐藏他。然后,当series由用户正确设置,您只需显示模板(例如在弹出窗口中)。这个解决方案避免了服务器调用,所以我建议这样做。

EDIT 2 :

因此,我制作了一个 jsFiddle,展示了如何根据用户输入更新图表的基本示例:http://jsfiddle.net/MxtkM/

该示例更新图表上所有系列的最后一个值,具体方法如下:

$('#december_value').bind('keyup', function() {
    var user_input_value = parseFloat($(this).val()); // cast to float

    for (var s in chart.series) { // loop through the series
        var old_data = chart.series[s].data;
        var new_data = [];

        for (var d in old_data ) { // loop through data objects
           new_data.push(old_data[d].config); // config property contains the y value
        }

        new_data[new_data.length - 1] = user_input_value; // update the last value

        chart.series[s].setData(new_data); // use setData method to refresh the datas of the serie
    }
});

此示例通过提供新的数据数组来使用 setData 方法。 如果这不符合您的需求,还有另一种刷新图表的方法,您可以通过以下方式重新渲染所有图表var chart = new Highcharts.Chart(options);。 (这在上面的链接中进行了解释)。

这两个链接也值得一读:

  • 使用 Highcharts 通过 JSON 重新加载图表数据
  • http://www.highcharts.com/documentation/how-to-use(第 3 部分和第 4 部分)

现在您应该能够根据用户输入对图表执行任何您想要的操作。

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

新窗口中的高图表 的相关文章

随机推荐

  • 如何保存Jenkins配置?

    有没有办法在 Git 或其他任何地方保存管道配置或项目配置 以便当我的 Jenkins 机器崩溃时 我可以将保存的配置迁移到新的 Jenkins 实例中 我会 作为开始 让自己 https wiki jenkins io display J
  • 有没有一个库可以模拟 facebook 的“Link Detect”? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我正在寻找编写一个库 可以
  • 寻找有 2 个点的向量

    我正在帮助我的朋友玩 pygame 但我们被困住了 所以我们正在尝试获取射弹的方向 但我们不知道如何获取 例如 1 1 将走向东南 1 1 将走向 NE 1 1 将走向西北 和 1 1 将去 SW 我们需要某种方程来获取玩家位置和鼠标位置并
  • 从 Google Assistant 启动我的应用程序(如果有)

    要求是如果用户命令 GA 启动我的 Android 应用程序查找附近的麦当劳餐厅其中 McDonald 是应用程序名称 由于用户没有提及他 她想要在 McDonald 应用程序中进行搜索 因此应用程序无法使用定义的意图过滤器来处理明确的意图
  • NSTimer 不会失效

    我在使计时器失效时遇到问题 property nonatomic strong NSTimer timer 在成功的块内 我在主线程上分配和设置计时器 dispatch async dispatch get main queue self
  • Mongoose(或 MongoDB)中的 TransientTransactionError 是什么?

    I have server js and db js The db js文件使用 Mongoose 与我的数据库交互 我使用server js从中调用函数db js var mongoose require mongoose mongoos
  • Cassandra Datastax 驱动程序在访问器上设置分页状态

    我正在使用 Datastax 可爱的 cassandra java 驱动程序 我试图将所有查询字符串封装到内置访问器中以进行映射 但我需要能够设置查询的分页状态 我发现这可以通过普通的语句 SimpleStatement 实现 但我还没有找
  • 如何以Google方式隐藏库源代码?

    例如 我有一个library我想保护源代码不被查看 我想到的第一个方法是为私有函数创建公共包装器 如下所示 function executeMyCoolFunction param1 param2 param3 return execute
  • 如何在xslt中提取这种格式

    我有一个 xml 结构
  • Bash 故障排除:不是有效的标识符

    初学者试图让管道在 bash 中工作 如果有人能明白为什么当我运行以下命令时我会得到 bash i not a valid identifier 这真的很有帮助 另外如果还有其他错误请告诉我 for i in home regionstex
  • Postgres 9.4 Django 1.9 获取所有 json 键

    我在 django 模型中有一个 JSONField 如下所示 from django db import models from django contrib postgres fields import JSONField class
  • JBoss / HotSpot JVM 崩溃

    我们有一个基于 Jboss 构建的 Web 应用程序 已经投入生产多年 在过去的 18 个月里 它从未下降过 然而 最近两天 jvm崩溃了4次 当 JVM 崩溃时 我们会收到一份我正在努力解读的错误报告 我看过其他几个崩溃报告 在这个网站和
  • Keras 中的自定义损失函数

    我正在研究一种图像类增量分类器方法 使用 CNN 作为特征提取器和全连接块进行分类 首先 我对 VGG 训练网络进行了微调以完成新任务 一旦网络针对新任务进行了训练 我就会为每个类别存储一些示例 以避免忘记新类别何时可用 当某些类可用时 我
  • 从类路径资源文件夹获取文件列表? [复制]

    这个问题在这里已经有答案了 我正在尝试从资源文件夹设置 JFX ImageView 图像 但似乎无法获得不会引发异常的适当 URL 字符串文件路径 var x getRandomImageFromPackage pictures toStr
  • 声明通用项数组时,如何允许推断通用参数?

    我遇到的情况是 我有一系列通用项目 Item 并且在项目本身内 我希望推断和具体的通用参数 也就是说 我想要一组通用项目 但每个项目都可以有不同的通用类型 应该保留这一点 type Item
  • Python 套接字。 OSError: [Errno 9] 错误的文件描述符

    这是我的客户 CLIENT import socket conne socket socket socket AF INET socket SOCK STREAM conne setsockopt socket SOL SOCKET soc
  • 我在 addCase 中指定什么“类型”来返回列?

    我正在尝试使用 case 语句进行查询 但无法弄清楚如何让 case 返回列值而不是常量 我的查询工作得很好 除了我为结果提供的列名被 Cake 或者 PDO 引用或错误处理在我无法挖掘的层中的某处 我已经了解了bindValue 但是我一
  • 在 Spark UDF 中操作数据帧

    我有一个 UDF 可以从数据帧中过滤和选择值 但它遇到 对象不可序列化 错误 详细信息如下 假设我有一个数据框 df1 其中包含名称为 ID Y1 Y2 Y3 Y4 Y5 Y6 Y7 Y8 Y9 的列 Y10 我想根据另一个数据帧 df2
  • 如何制作圆角椭圆形按钮?

    我的目标是让我的按钮看起来像这样 减去按钮周围的黑边 阅读了很多帖子后 我看到大多数解决方案都说使用 layer cornerRadius 10 0 当我这样做时 我得到这个 它使边缘变圆 但没有给我我想要的目标 有什么建议吗 Swift
  • 新窗口中的高图表

    我使用 highcharts 在我的页面中显示图表 它工作正常 但有时图表中的数据过于 压缩 所以我应该找到一种方法以更大的尺寸查看图表 我在互联网上阅读了几篇关于这个主题的文章 一般来说 他们建议使用 highslide 但我不想这样做