{"id":1069,"date":"2008-10-16T18:38:40","date_gmt":"2008-10-16T16:38:40","guid":{"rendered":"http:\/\/olbertz.de\/blog\/?p=1069"},"modified":"2008-10-17T07:27:32","modified_gmt":"2008-10-17T05:27:32","slug":"erste-schritte-mit-der-google-chart-api","status":"publish","type":"post","link":"https:\/\/olbertz.de\/blog\/2008\/10\/16\/erste-schritte-mit-der-google-chart-api\/","title":{"rendered":"Erste Schritte mit der Google Chart API"},"content":{"rendered":"<p>In den letzten paar Tagen habe ich mich f&#252;r <a href=\"http:\/\/ormigo.com\/\">Ormigo<\/a> ein wenig mit der <a href=\"http:\/\/code.google.com\/apis\/chart\/\">Google Chart API<\/a> auseinander gesetzt und wollte mal den einen, oder anderen Kniff aufzeigen, den ich so nicht in der Dokumentation gefunden hatte.<\/p>\n<p>Mein erster Versuch sah so aus:<br \/>\n<img decoding=\"async\" src=\"http:\/\/chart.apis.google.com\/chart?cht=lc&#038;chs=650x100&#038;chco=4d89f9&#038;chd=t:29,19,120,113,3,22,1,1,87,6,2,48,78,12,100,100,80,150,29,30,45,100,100,100,128,200\" \/><br \/>\n<code><br \/>\ncht=lc&<br \/>\nchs=650x100&<br \/>\nchco=4d89f9&<br \/>\nchd=t:29,19,120,113,3,22,1,1,87,6,2,48,78,12,100,100,80,150,29,30,45,100,100,100,128,200<br \/>\n<\/code><br \/>\nAm Ende der Grafik sieht man, dass das einfach nur ein glatter Strich ist, die Werte aber mit <em>&#8230;100, 128, 200<\/em> aufh&#246;ren.<\/p>\n<p>Zuerst dachte ich, dass die Anzahl der Werte evtl. &#252;berschritten wurde, oder die URL zu lang war. Des R&#228;tsels L&#246;sung war dann aber viel einfacher: man sollte immer eine Skala angeben und somit Google den kleinsten und den gr&#246;&#223;ten Wert mitgeben, damit die Grafik richtig dargestellt werden kann:<br \/>\n<img decoding=\"async\" src=\"http:\/\/chart.apis.google.com\/chart?cht=lc&#038;chs=650x100&#038;chco=4d89f9&#038;chd=t:29,19,120,113,3,22,1,1,87,6,2,48,78,12,100,100,80,150,29,30,45,100,100,100,128,200&#038;chds=0,200\" \/><br \/>\n<code><br \/>\ncht=lc&<br \/>\nchs=650x100&<br \/>\nchco=4d89f9&<br \/>\nchd=t:29,19,120,113,3,22,1,1,87,6,2,48,78,12,100,100,80,150,29,30,45,100,100,100,128,200&<br \/>\n<strong>chds=0,200<\/strong><br \/>\n<\/code><\/p>\n<p>Als n&#228;chstes wollte ich ganz gerne einen Bereich markieren, um dem Betrachter anzuzeigen, ob die Werte unter- oder oberhalb eines bestimmten Bereiches liegen. Auch hierf&#252;r bietet die Chart API etwas an. Dummerweise muss man die Werte auf einen Bereich zwischen 0.0 und 1.0 skalieren. Das funktionierte ebenfalls ganz gut in meiner Testumgebung, bis ich es dann auf unserer Staging-Plattform ausprobiert hatte und es da dann pl&#246;tzlich nicht mehr funktionierte: der Bereich wurde einfach nicht angezeigt.<\/p>\n<p>Hier lag das Problem an der Anzahl der Nachkommastellen! Unglaublich, aber wahr. Jetzt runde ich sie auf 3 Nachkommastellen und alles ist gut. Zus&#228;tzlich gebe ich an, dass die Y-Achse angezeigt werden soll:<br \/>\n<img decoding=\"async\" src=\"http:\/\/chart.apis.google.com\/chart?cht=lc&#038;chs=650x100&#038;chco=4d89f9&#038;chd=t:29,19,120,113,3,22,1,1,87,6,2,48,78,12,100,100,80,150,29,30,45,100,100,100,128,200&#038;chds=0,200&#038;chm=r,dddddd,0,0.3,0.7&#038;chxt=y\" \/><br \/>\n<code><br \/>\ncht=lc&<br \/>\nchs=650x100&<br \/>\nchco=4d89f9&<br \/>\nchd=t:29,19,120,113,3,22,1,1,87,6,2,48,78,12,100,100,80,150,29,30,45,100,100,100,128,200&<br \/>\nchds=0,200&<br \/>\n<strong>chm=r,aaaaaa,0,0.3,0.7<\/strong>&<br \/>\n<strong>chxt=y<\/strong><br \/>\n<\/code><\/p>\n<p>Hier taucht dann gleich das n&#228;chste &#8222;Problem&#8220; auf, da die Werte auf der Y-Achse nun wiederum gar nichts mit den Werten im Chart zu tun haben. F&#252;r mein Beispiel reichte die Angabe des Minimal- und Maximalwertes, was man relativ einfach angeben kann. Man muss nur genau mit den Pipe-Symbolen bei der Angabe der Werte aufpassen, sonst wird wieder nichts angezeigt:<br \/>\n<img decoding=\"async\" src=\"http:\/\/chart.apis.google.com\/chart?cht=lc&#038;chs=650x100&#038;chco=4d89f9&#038;chd=t:29,19,120,113,3,22,1,1,87,6,2,48,78,12,100,100,80,150,29,30,45,100,100,100,128,200&#038;chds=0,200&#038;chm=r,dddddd,0,0.3,0.7&#038;chxt=y&#038;chxl=0:|0|200\" \/><br \/>\n<code><br \/>\ncht=lc&<br \/>\nchs=650x100&<br \/>\nchco=4d89f9&<br \/>\nchd=t:29,19,120,113,3,22,1,1,87,6,2,48,78,12,100,100,80,150,29,30,45,100,100,100,128,200&<br \/>\nchds=0,200&<br \/>\nchm=r,dddddd,0,0.3,0.7&<br \/>\nchxt=y&<br \/>\n<strong>chxl=0:|0|200<\/strong><br \/>\n<\/code><\/p>\n<p>Zum Schlu&#223; noch eine &#220;berschrift und den Bereich unter dem Graphen ausf&#252;llen:<br \/>\n<img decoding=\"async\" src=\"http:\/\/chart.apis.google.com\/chart?cht=lc&#038;chs=650x150&#038;chco=4d89f9&#038;chd=t:29,19,120,113,3,22,1,1,87,6,2,48,78,12,100,100,80,150,29,30,45,100,100,100,128,200&#038;chds=0,200&#038;chm=r,dddddd,0,0.3,0.7|B,76A4FB,0,0,0&#038;chxt=y&#038;chxl=0:|0|200&#038;chtt=Google+Chart+API\" \/><br \/>\n<code><br \/>\ncht=lc&<br \/>\n<strong>chs=650x150<\/strong>&<br \/>\nchco=4d89f9&<br \/>\nchd=t:29,19,120,113,3,22,1,1,87,6,2,48,78,12,100,100,80,150,29,30,45,100,100,100,128,200&<br \/>\nchds=0,200&<br \/>\nchm=r,dddddd,0,0.3,0.7<strong>|B,76A4FB,0,0,0<\/strong>&<br \/>\nchxt=y&<br \/>\nchxl=0:|0|200&<br \/>\n<strong>chtt=Google+Chart+API<\/strong><br \/>\n<\/code><\/p>\n<p>Durch die Vielzahl der Parameter muss man auch aufpassen, ob man einen bereits verwendet hat und eine neue Einstellung vielleicht deshalb nicht greift, weil er von einem sp&#228;teren &#220;berschrieben wird. So ist es mir mit dem Parameter <em>chm<\/em> passiert, welcher sowohl f&#252;r das F&#252;llen der Fl&#228;che unter dem Graphen wie auch dem Einf&#228;rben f&#252;r Bereiche zust&#228;ndig ist. Die Google Chart API unterst&#252;tzt nicht die mehrfache Verwendung des selben Parameternamens (ich bin mir auch unsicher, ob das W3C konform ist, grunds&#228;tzlich kann eine Webapplikation aber mit so etwas umgehen).<\/p>\n<p>Insgesamt aber schon einmal eine sehr sch&#246;ne M&#246;glichkeit, Zusammenh&#228;nge in relativ kurzer Zeit visuell umzusetzen. Was ich aber nicht geschafft habe: die gleichen Daten mit einem Bar-Chart umzusetzen. Die Breite eines Balkens ist immer gleich gro&#223; und somit &#8222;sprengt&#8220; es den von mir gesetzten Rahmen:<br \/>\n<img decoding=\"async\" src=\"http:\/\/chart.apis.google.com\/chart?cht=bvs&#038;chs=650x150&#038;chco=4d89f9&#038;chd=t:29,19,120,113,3,22,1,1,87,6,2,48,78,12,100,100,80,150,29,30,45,100,100,100,128,200&#038;chds=0,200&#038;chm=r,dddddd,0,0.3,0.7&#038;chxt=y&#038;chxl=0:|0|200&#038;chtt=Google+Chart+API\" \/><br \/>\n<code><br \/>\n<strong>cht=bvs<\/strong>&<br \/>\n<strong>chs=650x100<\/strong>&<br \/>\nchco=4d89f9&<br \/>\nchd=t:29,19,120,113,3,22,1,1,87,6,2,48,78,12,100,100,80,150,29,30,45,100,100,100,128,200&<br \/>\nchds=0,200&<br \/>\nchm=r,dddddd,0,0.3,0.7&<br \/>\nchxt=y&<br \/>\nchxl=0:|0|200&<br \/>\nchtt=Google+Chart+API<br \/>\n<\/code><\/p>\n<p><strong>Nachtrag:<\/strong> Mit Hilfe aus den Kommentaren: mit dem Parameter <em>chbh<\/em> kann man auch die Breite der Balken angeben:<br \/>\n<img decoding=\"async\" src=\"http:\/\/chart.apis.google.com\/chart?cht=bvs&#038;chs=650x150&#038;chco=4d89f9&#038;chd=t:29,19,120,113,3,22,1,1,87,6,2,48,78,12,100,100,80,150,29,30,45,100,100,100,128,200&#038;chds=0,200&#038;chm=r,dddddd,0,0.3,0.7&#038;chxt=y&#038;chxl=0:|0|200&#038;chtt=Google+Chart+API&#038;chbh=20\" \/><br \/>\n<code><br \/>\ncht=bvs&<br \/>\nchs=650x150&<br \/>\nchco=4d89f9&<br \/>\nchd=t:29,19,120,113,3,22,1,1,87,6,2,48,78,12,100,100,80,150,29,30,45,100,100,100,128,200&<br \/>\nchds=0,200&<br \/>\nchm=r,dddddd,0,0.3,0.7&<br \/>\nchxt=y&<br \/>\nchxl=0:|0|200&<br \/>\nchtt=Google+Chart+API&<br \/>\n<strong>chbh=20<\/strong><br \/>\n<\/code><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In den letzten paar Tagen habe ich mich f&#252;r Ormigo ein wenig mit der Google Chart API auseinander gesetzt und wollte mal den einen, oder anderen Kniff aufzeigen, den ich so nicht in der Dokumentation gefunden hatte. Mein erster Versuch &hellip; <a href=\"https:\/\/olbertz.de\/blog\/2008\/10\/16\/erste-schritte-mit-der-google-chart-api\/\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-1069","post","type-post","status-publish","format-standard","hentry","category-augenblicke"],"_links":{"self":[{"href":"https:\/\/olbertz.de\/blog\/wp-json\/wp\/v2\/posts\/1069","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/olbertz.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/olbertz.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/olbertz.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/olbertz.de\/blog\/wp-json\/wp\/v2\/comments?post=1069"}],"version-history":[{"count":0,"href":"https:\/\/olbertz.de\/blog\/wp-json\/wp\/v2\/posts\/1069\/revisions"}],"wp:attachment":[{"href":"https:\/\/olbertz.de\/blog\/wp-json\/wp\/v2\/media?parent=1069"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/olbertz.de\/blog\/wp-json\/wp\/v2\/categories?post=1069"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/olbertz.de\/blog\/wp-json\/wp\/v2\/tags?post=1069"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}