®
世界顶尖人才,点播 ®

Toptal, LLC版权所有

\n\n\n\n\n\n\n\n\n\n\n\n\n

现在我们已经包含了所有的依赖项,是时候创建容器了

下载图表,并以以下HTML代码将其嵌入我们的页面:

\n\n
drill-down chart will load here
\n
\n\n

现在,我们可以使用jQuery的 $ 选择器中的代码:

\n\n
$(\"#drill-down-chart\")\n
\n\n

Note: 如果页面上有多个图表, 每个图表都需要一个单独的容器 id.

\n\n

\"可视化数据使其更易于阅读.\"

\n\n

步骤2:获取和构建数据

\n

FusionCharts接受JSON和XML格式的数据, 但我选择使用JSON,因为它已经成为跨web应用程序数据交换的标准格式.\n基本图表的JSON数据数组包含每个数据图的对象, 在每个数据图对象中,我们定义其各自的标签和值. 这个结构看起来像:

\n\n
\"data\": [{\n  \"label\": \"Q1\",\n  \"value\": \"850000\",\n}, {\n  \"label\": \"Q2\",\n  \"value\": \"2070000\",\n},...\n//更多的数据对象]\n
\n\n

当我们绘制下钻图时,它的JSON变得更加复杂. 父图和子图之间的链接还需要一个 key-value 在数据数组的每个对象内配对. 新密钥(不出所料,称为 link)将包含子图表的id,当单击其父数据图时,您将获得该子图表.\n用于定义子图表的格式 id is newchart-dataFormat-childId. 因为我们使用的是JSON,所以我们知道链接的内容是什么样子的 newchart-json-childId. 以下是我们在图表中对它的定义:

\n\n
\"data\": [{\n  \"label\": \"Q1\",\n  \"value\": \"850000\",\n  \"link\": \"newchart-json-q1\"\n}, {\n  \"label\": \"Q2\",\n  \"value\": \"2070000\",\n  \"link\": \"newchart-json-q2\"\n}, ...\n//更多的数据对象]\n
\n\n

步骤3:插入图表数据

\n

准备好数据后,就可以在页面上插入图表了 insertFusionCharts jQuery插件提供的方法:

\n\n
$(\"#drill-down-chart\").insertFusionCharts ({\n  类型:“column2d”,\n  id: \"mychart\",\n  width: '100%',\n  height: '450',\n  dataFormat: json,\n  dataSource: {\n    \"chart\": {\n      \"caption\": \"Quarterly Revenue for 2015\",\n      \"paletteColors\": \"#9EA5FC\",\n      \"xAxisName\": \"Quarter (Click to drill down)\",\n      \"yAxisName\": \"Revenue (In USD)\",\n      //更多的图表配置选项\n    },\n\n    \"data\": [\n      //请参见步骤2\n    ],\n\n    \"linkedData\": [\n      //在步骤4中解释\n    ]\n  }\n})\n
\n\n

让我们分解一下上面的代码片段:

\n\n\n\n
\nRelated: 聘请前3%的自由大数据架构师.\n
\n\n

步骤4:为子图表创建关联数据数组

\n

现在我们已经定义了父图表, 现在是时候为每个数据图创建一个子图了, 这个过程与创建父图表非常相似. \nThe linkedData array, 在' insertFusionCharts '方法中创建, 将为每个子图表定义一个单独的对象吗. 下面是第一个子图的数据:

\n\n
\"linkeddata\": [{\n      \"id\": \"q1\",\n      \"linkedchart\": {\n        \"chart\": {\n          \"caption\": \"Monthly Revenue\",\n          \"subcaption\": \"First Quarter\",\n          \"paletteColors\": \"#EEDA54, #A2A5FC, #41CBE3\",\n          \"labelFontSize\": \"16\",\n          //更多配置选项\n        },\n        \"data\": [{\n          \"label\": \"Jan\",\n          \"value\": \"255000\"\n        }, {\n          \"label\": \"Feb\",\n          \"value\": \"467500\"\n        }, //more data]\n      }\n    }, //更多子图表的内容\n
\n\n

id 是我们在步骤2中定义的单个子图的id. linkedChart is similar to dataSource 因为它包含了图表的实际内容.\n图表对象中还有许多其他属性, 我将在后面的部分详细介绍, “利用图表属性改进设计”.

\n\n

步骤5:自定义下钻配置

\n\n

不同的图表类型

\n

到目前为止,我们的示例代码使父图表和子图表共享相同的图表类型. 如果您想向下钻取到不同的图表类型(从列到饼), for example), 您可以通过绑定 fusionchartsrendered event.

\n\n
$ (' # drill-down-chart ').Bind ('fusionchartsrendered', function(event, args) {\n  FusionCharts.items['mychart'].configureLink({\n    type: \"doughnut2d\",\n    overlayButton: {\n      message: 'BACK', //设置按钮显示diff消息 \n      背景:“# FCFDFD ',\n      borderColor:“# cccccc”\n    }\n  });\n});\n
\n

在上面的代码中 fusionchartsrendered 事件将调用 configureLink 方法,该方法定义所有子图表以及任何覆盖按钮选项的类型. 您还可以为每个子图表指定单独的图表类型. \n有很多选项可用 configureLink 方法,所以你可能会发现从FusionCharts查看它的API参考文档是有用的.

\n\n

渲染图表在不同的div

\n

您可以做的另一件很酷的事情是将子图表呈现在不同的容器中,而不是与其父容器相同的容器中. 为此,定义一个单独的HTML

容器,并将其id传递给 renderAt 属性如下所示:

\n\n
$(" #海图筒”).Bind ('fusionchartsrendered', function(event, args) {\n  FusionCharts.items['mychart'].configureLink({\n    type: \"doughnut2d\",\n    renderAt:\"chart-container2\",\n    overlayButton: {\n      message: 'BACK', //设置按钮显示diff消息\n      背景:“# FCFDFD ',\n      borderColor:“# cccccc”\n    }\n  });\n});\n
\n

的值 renderAt 属性指定对象的id

其中子图表将呈现(chart-container2).

\n\n

利用图表属性改进设计

\n

遵循本教程,您将获得一个功能图表, 但如果你不这么做,就会有些难看. 为了获得更吸引人的表示,您需要使用装饰性的“图表属性”.属性中定义了图表属性 chart 对象,用于自定义呈现选项. 在查看这些关键的可配置属性时,你可能会发现参考FusionCharts的解释性图表是很有用的:

\n\n
    \n
  • \npaletteColors 定义数据图的颜色. 如果这里用一种颜色,所有的列都是这种颜色. 如果你给出多种颜色, 第一列将取第一个值, 第二列将取第二个值, and so on.
  • \n
  • \nplotSpacePercent 控制列之间的空间. 默认值为20(该值为int型), 但单位是百分比),允许范围是0-80. 值为0将使列聚集在一起并相互粘在一起.
  • \n
  • \nbaseFont 定义图表的字体族. You can use any font you like; I used Google’s Open Sans in my chart. 只要在HTML页面中包含外部字体文件,就可以在图表中使用它.
  • \n
  • \nplotToolText 让您自定义工具提示. 通过使用诸如 $label and * $dataValue,可以显示特定数据图上的特定信息
    , then style that
    using inline CSS. 下面是我在我们的例子中所做的:
  • \n
\n\n
\"plotToolText\": \"
$label: $dataValue
\"\n
\n\n
    \n
  • \ntheme 允许您在不同的文件中定义图表属性,并在这里应用它们,而不是将图表对象与众多图表属性混淆在一起. 您可以找到本教程的主题文件- toptal.js-在项目的GitHub repo的JS文件夹内.
  • \n
\n\n

这就是我要讲的, 但是一张图表有一百多个属性, 所以如果你想进一步探索, 请访问FusionCharts 图表属性页 并搜索您的特定图表类型.

\n\n

更多FusionCharts和jQuery资源

\n

尽管我已经介绍了使用jQuery制作下钻图表的最重要的元素, 当你试图自己做这件事的时候,很有可能你会需要一些帮助. 在那一刻,这里有一些额外的资源:

\n\n
    \n
  • \njQuery图表插件: 想要灵感,请访问官方网站 jQuery图表插件页面 看一些实际的例子.
  • \n
  • \nDocumentation: 如果您无法解决某些问题,文档是您应该首先查看的地方. 这里有方便的链接 jQuery plugin and the drill-down chart (也称为链接图表).
  • \n
  • \nDemos: 每个图表库都提供实时示例来展示其功能, FusionCharts也不例外. Head over to its demo gallery 800多个实时示例,如果您需要一些想法,请提供完整的源代码. 很有可能你想做的东西已经可用了. No need to start from scratch; just fork the fiddle and proceed from there!
  • \n
  • \nMore extensions: 如果你不使用JavaScript或jQuery, 然后你可以探索FusionCharts提供的更多插件和包装器 this page. 他们为各种库和框架(比如Angular)提供了专用插件, React, Java, ASP.NET etc.
  • \n
\n\n

PS: 我会在下面的评论区留言, 所以,如果你对我的文章有任何问题,请随意发表. 我很乐意帮忙!

\n\n\n","as":"div","isContentFit":true,"sharingWidget":{"url":"http://o12.healthydairyland.com/jquery/drill-down-fusioncharts-in-jquery","title":"Making Drill-down Charts in jQuery with FusionCharts","text":null,"providers":["linkedin","twitter","facebook"],"gaCategory":null,"domain":{"name":"developers","title":"Engineering","vertical":{"name":"developers","title":"Developers","publicUrl":"http://o12.healthydairyland.com/developers"},"publicUrl":"http://o12.healthydairyland.com/developers/blog"},"hashtags":"jQuery,DataVisualization,FusionCharts"}}