// GraphURL2D returns a link to a bar graph displaying particular graph data. // GraphURL2D returns nil if given graph data of length 0 in either dimension. func (b *BarGraph) GraphURL2D(gd GraphData2D) *url.URL { xlength := gd.XLen() ylength := gd.YLen() if xlength <= 0 || ylength <= 0 { return nil } labels := make([]string, xlength) titles := make([]string, ylength) values := make([][]int64, ylength) var includeChdl bool for y := range values { titles[y] = gd.YLabel(y) if titles[y] != "" { includeChdl = true } values[y] = make([]int64, xlength) } for x := range labels { labels[x] = gd.XLabel(x) for y := range values { values[y][x] = gd.Value(x, y) } } max := maxInt64(values...) if max == 0 { max = 1 } for i := 0; i < b.Scale; i++ { max = (max + 9) / 10 } actualMax := max for i := 0; i < b.Scale; i++ { max *= 10 } encoded := encodeInt64(max, values...) url, _ := url.Parse("http://chart.apis.google.com/chart") urlParams := []string{ "chs", "500x250", "cht", "bvg", "chco", encodeColors(len(values), b.Palette, ","), "chd", encoded, "chxt", "x,y", "chbh", "a", "chxr", fmt.Sprintf("1,0,%d", actualMax), "chxl", fmt.Sprintf("0:|%s", strings.Join(labels, "|")), "chdl", strings.Join(titles, "|")} // If we aren't including chdl parameter, chop it off of end of parameter // list if !includeChdl { urlParams = urlParams[:len(urlParams)-2] } return http_util.AppendParams(url, urlParams...) }
// GraphURL returns a link to a pie graph displaying particular graph data. // GraphURL returns nil if given graph data of length 0. func (p *PieGraph) GraphURL(gd GraphData) *url.URL { length := gd.Len() if length <= 0 { return nil } labels := make([]string, length) values := make([]int64, length) for idx := range labels { labels[idx] = gd.Label(idx) values[idx] = gd.Value(idx) } encoded := encodeInt64(maxInt64(values), values) url, _ := url.Parse("http://chart.apis.google.com/chart") return http_util.AppendParams( url, "chs", "500x250", "cht", "p3", "chco", encodeColors(len(values), p.Palette, "|"), "chd", encoded, "chdl", strings.Join(labels, "|")) }