谷歌的图形报表接口

先来看个效果
可以看到上面有个饼形图,这个就是使用google api生成的图片。

http://chart.apis.google.com/chart?cht=p3&chd=t:60,40&chs=250×100&chl=Hello|World
直接在浏览器中输入这个地址,你可以看到这个效果

google api

简单的说,只要一串url参数就可以绘画出图形报表了。
在网页中使用就可以引入一张图形报表(折线图、柱状图、饼图、维恩图、散点图)了。还自己可以设定图表尺寸、颜色和图例哦。

看下怎么操作
地址 http://chart.apis.google.com/chart?&& 注意哦中文参数要转成utf8格式或urlcode 格式哦^_^

您可以使用任意多个参数,如下图:

演示示例

http://chart.apis.google.com/chart?cht=lc&chs=200x125&chd=s:helloWorld&chxt=x,y&chxl=0:|Mar|Apr|May|June|July|1:||50+Kb

参数解释:

  • http://chart.apis.google.com/chart? Chart API 调用地址。
  • &参数分隔符。
  • chs=200x125图表尺寸。
  • chd=s:helloWorld图表数据值。
  • cht=lc图表类型。
  • chxt=x,y显示 x、y 轴坐标。
  • chxl=0:|Mar|Apr|May|June|July|1:||50+Kbx、y 轴坐标值。

你可以在网页中使用img元素插入图表,如:

Sample chart

注意:在HTMLimg元素中,URL 属性中&字符应书写为转义字符&

必须、可选参数

所有请求必须包含以下参数:

  • 图表尺寸
  • 图表数据
  • 图表类型

其它参数均为可选参数,各类型图表有效参数如下:

参数 柱状图 折线图

谱线图

雷达图 散点图 维恩图 饼图 仪表图 地图
数据颜色
区域、背景填充 仅背景 仅背景
数值缩放
线性过渡填充 仅背景
线性条纹填充 仅背景
图表标题
图表图例
多轴标注
网格线
形状标记
水平区间填充
垂直区间填充
折线样式
数据区块填充
柱形、间隔宽度
柱状图基准线
饼图、仪表图标注

图表尺寸

参数格式:chs=<像素宽度>x<像素高度>

例如:chs=300x200,表示一个 300 像素宽、200 像素高的图表。

单个图表最大尺寸为 300,000 平方像素,宽高最大为 1000 像素,以下尺寸均为最大可用尺寸:1000×300,300×1000,600×500,500×600,800×375 和 375×800 等。

地图最大尺寸 440 像素宽和 220 像素高。

尺寸过小时,饼图将仅显示部分图表。饼图建议尺寸:

  • 二维饼图:宽度约为高度两倍。
  • 三维饼图:宽度约为高度两倍半。

图表数据

图表数据有三种格式:

  • 文本编码 使用正数 0 至 100 之间的浮点数。配合数值缩放参数使用时,也可以使用负数。注意负数对地图图表无效。每十个数值占据 5 个像素,在仅使用整数的情况下,适用于 500 像素以内的图表。如需要更高精度,可使用一位小数数字(如 92.6)。文本编码可用于所有类型的图表,但同时也是 URL 地址最长的数据编码形式。
  • 简单编码 使用大小写字母与数字,A代表0B代表1,直至9代表61,共包含 62 个数值。每个数值占据 5 个像素,适用于 300 像素大小的折线图和柱状图,所有图表类型都可以使用简单编码数据。该编码类型数据的图表 URL 地址长度最短。
  • 扩展编码 使用一对字母数字表示一个数据(还有其它字符,下文详解),AA代表0AB代表1,直至..代表4095。包含 4096 个数值,适用于高精度或大型图表。该编码类型数据的图表 URL 地址长度是简单编码的两倍。

注意:配合数据转换程序可更加轻松的使用文本编码和扩展编码,参考 JavaScript 编码示例。其它开发人员贡献的代码可在讨论组和链接汇总中找到。

文本编码

文本编码格式为

chd=t:<数值字符串>

其中<数值字符串>0.0100.0的浮点数、-1(负一)和|(竖线)。

含义如下

  • 浮点数字0.0= 0,以此类推100.0= 100。
  • 负一-1表示空值。
  • 竖线|为数据分组符号。

示例:chd=t:10.0,58.0,95.0|30.0,8.0,63.0

注意:文本编码中,可将数值转换为最大值的百分比来提供数据。

数值缩放文本编码

文本编码与数值缩放各一个参数:

chd=t:<数值字符串>

chds=<第1组数据最小值>,<第1组数据最大值>,<第n组数据最小值>,<第n组数据最大值>

其中

  • <数值字符串>内容为任意正负浮点数字。
  • <第1组数据最小值>内容为第1组数据转换后的最小值。
  • <第1组数据最大值>内容为第1组数据转换后的最大值,省略时默认为100。
  • <第n组数据最小值>内容为第n组数据转换后的最小值。
  • <第n组数据最大值>内容为第n组数据转换后的最大值,省略时默认为100。

注意

  • 对地图图表无效。
  • 超出范围的值将被忽略。
  • 如果要设置多组数据,请用竖线|分割。

示例:chd=t:30,-60,50,120,80&chds=-80,140

简单编码

简单编码格式为

chd=s:<数值字符串>

其中<数值字符串>可包含a-zA-Z0-9_,

含义如下

  • 大写字母A= 0、B= 1,以此类推,Z= 25。
  • 小写字母a= 26、b= 27,以此类推,z= 51。
  • 数字0= 52,以此类推,9= 61.
  • 下划线_表示空值。
  • 逗号,为数据分组符号。
扩展编码

文本编码格式为

chd=e:<数值字符串>

其中<数值字符串>为成对出现的A-Za-z0-9、连字符-、小数点.、下划线_或逗号,

含义如下

  • AA= 0、AZ= 25、Aa= 26、Az= 51、A0= 52、A9= 61、A-= 62、A.= 63、BA= 64、BZ= 89、.A= 4032、.Z= 4057、.a= 4058、.z= 4083、.0= 4084、.9= 4093、.-= 4094、..= 4095。
  • 两个下划线__表示空值。
  • 逗号,为数据分组符号。
JavaScript 数值转换代码

如您所知,使用程序来自动将数值转换为 Chart API 数值比手动转换快捷得多。

下边这段 JavaScript 代码用于将数据转换为简单编码格式。第一个参数需为数据数组,负数将被转换为空值_

第二个参数为数据中最大值。在折线图和柱状图中,如果您希望图表顶端与最大值间有一定空间,可以使此参数值大于数据中最大值。

var simpleEncoding = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';

function simpleEncode(values,maxValue) {
 var chartData = ['s:'];
 for (var i = 0; i < values.length; i++) {
  var currentValue = values[i];
  if (!isNaN(currentValue) && currentValue >= 0) {
   chartData.push(simpleEncoding.charAt(Math.round((simpleEncoding.length-1) * currentValue / maxValue)));
  } else {
   chartData.push('_');
  }
 }
 return chartData.join('');
}

simpleEncode函数传递一个数值数组(values)和最大值(maxValue),示例中最大值参数大于数组值最大值,可使图表顶端与最大值间有一定空间。

var valueArray = new Array(0,1,4,4,6,11,14,17,23,28,33,36,43,59,65);
var maxValue = 70;
simpleEncode(valueArray,maxValue);
图表粒度指导

不要为图表设定过多数据点。例如,显示布兰妮·斯皮尔斯过去十年的流行程度,如果每天搜索量作为一个数据点的话,将有 3,600 个数据点,对于 URL 来说数据太多了,Chart API 也不会生成粒度如此密的图表—— 1024 像素宽的显示器上每个数据点之占据四分之一个像素。下边的示例解释这个问题。

200×100 像素图,20 个数据点(每个数据点占 10 个像素)

示例图表

40 个数据点(每个数据点占 5 个像素)

示例图表

80 个数据点(每个数据点仅占 2.5 个像素)

示例图表

图表类型

目前可用的图表类型:

  • 折线图
  • 谱线图
  • 柱状图
  • 饼图
  • 维恩图
  • 散点图
  • 雷达图
  • 地图
  • 仪表图
折线图

折线图参数为

cht=<折线图类型>

<折线图类型>可选择lclxy

  • lc类型图表,多组数据将绘制为多条数据线。
  • lxy类型图表每条数据线需要两组数据。
参数 说明 示例
cht=lc 直线图,x 轴方向均匀分布。 示例图表

cht=lc

cht=lxy 每条数据线使用两组数据,第一组指定 x 轴坐标,第二组指定 y 轴坐标。

第一组数据为空时数据线将在 x 轴均匀分布。因为示例使用文本编码,所以空值为-1。简单编码使用下划线_,扩展编码使用双下划线__表示空值。

数据点形状使用参数chm

示例图表

cht=lxy

chd=t:0,30,60,70,90,95,100|

20,30,40,50,60,70,80|

10,30,40,45,52|

100,90,40,20,10|

-1|

5,33,50,55,7

谱线图

谱线图图表类型参数为

cht=ls

谱线图可用参数与折线图相同,唯一的区别是谱线图默认不显示轴线,可用折线图多轴标注参数显示轴线。

示例图表

柱状图

柱状图参数为

cht=<柱状图类型>

<柱状图类型>可选择bhsbhgbvsbvg

  • 多组数据将绘制为层叠柱状图。
  • 设置多组数据的方法请参看数据格
参数 说明 示例
cht=bhs

cht=bvs

水平(Horizontal)或垂直(Vertical)柱状图。

第一个示例设置了一组数据。

第二个示例设置了两组数据。

多组数据将绘制为层叠柱状图,所以必须为每组数据设置颜色参数,甚至可以为每个数据值设置颜色,具体参看颜色一节。

第二个示例未使用数值缩放,所以大于 100 的部分超出范围没有显示。

第三个示例使用了数值缩放,图表显示正确。

示例图表
cht=bhs
chco=4d89f9

示例图表
cht=bvs
chco=4d89f9,c6d9fd
chd=t:10,50,60,80,40|
50,60,100,40,20

示例图表
cht=bvs
chco=4d89f9,c6d9fd
chd=t:10,50,60,80,40|
50,60,100,40,20
chds=0,1600

cht=bhg

cht=bvg

水平(Horizontal)或垂直(Vertical)独立柱状图,可设定颜色,多组数据将分别绘制。 示例图表
cht=bhg
chco=4d89f9,c6d9fd
示例图表

cht=bvg
chco=4d89f9,c6d9fd

chbh 柱状图尺寸处理方法与其它类型图表不同。

对于垂直柱状图cht=bvscht=bvg、水平柱状图cht=bhscht=bhg,图表尺寸由chs参数决定,当该参数过小时,柱状图显示将不完整。

所以您可以指定更细的柱状图图表。

chbh=

<柱宽度>,

<可选的组内间隔>

<可选的组间间隔>

注意:若第三个参数(组间间隔)未设置,则默认为第二个参数(组内间隔)一半。

示例图表

chbh未设置
cht=bhs
示例图表

chbh=10
cht=bhs

饼图

饼图参数为

cht=<饼图类型>

<饼图类型>可选择pp3

  • 仅支持一组数据,后续数据将被忽略。
  • 更多可用参数请参看可选参数。

注意:Google Chart API 根据图表尺寸参数chs中宽度或高度的最小值决定饼图半径。当设置尺寸偏小时,图表将不能完整显示。如果使用标注,请将宽度设置为高度的两倍以上。

参数 说明 示例
cht=p 平面饼图。

未设定颜色时,饼图颜色将在橘黄色和浅黄色间插值计算出。设置颜色参数请参看颜色一节。

使用chl参数设定标注,请参见饼图、仪表图标注一节。

示例图表

cht=p

chs=200x100

cht=p3 三维饼图。

使用chl参数设定标注,请参见饼图标注一节。

示例图表

cht=p3
chs=250x100