<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: chart code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Thu, 24 Jul 2008 22:02:54 GMT</pubDate>
    <description>DZone Snippets: chart code</description>
    <item>
      <title>Generate a graph using Gruff</title>
      <link>http://snippets.dzone.com/posts/show/5168</link>
      <description>This Ruby code produced a graph using gruff.  The output shows a &lt;a href="http://twitxr.com/image/6822/"&gt;line graph&lt;/a&gt; [twitxr.com] for the different fruits. Source code origin: &lt;a href="http://nubyonrails.com/pages/gruff"&gt;Gruff Update With Bar Graphs | Ruby on Rails for Newbies&lt;/a&gt; [rubyonrails.com]&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;require 'gruff'&lt;br /&gt;&lt;br /&gt;g = Gruff::Line.new&lt;br /&gt;g.title = "My Graph" &lt;br /&gt;&lt;br /&gt;g.data("Apples", [1, 2, 3, 4, 4, 3])&lt;br /&gt;g.data("Oranges", [4, 8, 7, 9, 8, 9])&lt;br /&gt;g.data("Watermelon", [2, 3, 1, 5, 6, 8])&lt;br /&gt;g.data("Peaches", [9, 9, 10, 8, 7, 9])&lt;br /&gt;&lt;br /&gt;g.labels = {0 =&gt; '2003', 2 =&gt; '2004', 4 =&gt; '2005'}&lt;br /&gt;&lt;br /&gt;g.write('my_fruity_graph.png')&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Note: I executed the code within an irb session on my Gentoo box. With Gentoo, &lt;a href="http://gentoo-portage.com/dev-ruby/gruff"&gt;Gruff was installed&lt;/a&gt; [gentoo-portage.com] using the command emerge -va gruff. I tried installing it on Ubuntu but ran into some difficulty, even with help from the article &lt;a href="http://snippets.dzone.com/posts/show/4140"&gt;install rmagick ubuntu&lt;/a&gt; [dzone.com].&lt;br /&gt;&lt;br /&gt;*udpate 21:48 24-Feb*&lt;br /&gt;&lt;br /&gt;The following code does exactly as the same code above, however it uses XML to separate the data from the process, making it easier and more efficient to build graphs.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#!/usr/bin/ruby&lt;br /&gt;# file: xml2gruff.rb&lt;br /&gt;&lt;br /&gt;require 'rexml/document'&lt;br /&gt;require 'gruff'&lt;br /&gt;include REXML&lt;br /&gt;&lt;br /&gt;class Xml2Gruff&lt;br /&gt;  &lt;br /&gt;  def initialize(filename)&lt;br /&gt;    file = File.new(filename, 'r')&lt;br /&gt;    doc = Document.new(file)&lt;br /&gt;    # get the title&lt;br /&gt;    @title = doc.root.elements['summary/title'].text&lt;br /&gt;    &lt;br /&gt;    @record = Hash.new&lt;br /&gt;    # get each record&lt;br /&gt;    doc.root.elements.each('records/item') {|item|&lt;br /&gt;      avalues = Array.new&lt;br /&gt;      item.elements.each('values/value') { |value| avalues &lt;&lt; value.text.to_i }&lt;br /&gt;      @record[item.elements['label'].text] = avalues&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    # get the summary labels&lt;br /&gt;    @labels = Hash.new  &lt;br /&gt;    doc.root.elements.each('summary/scale/label') {|l| @labels[l.elements['value'].text.to_i] = l.elements['title'].text} &lt;br /&gt;    &lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def save_line_graph(filename)&lt;br /&gt;&lt;br /&gt;    g = Gruff::Line.new&lt;br /&gt;    g.title = @title &lt;br /&gt;    @record.each {|label, data| g.data(label, data) }&lt;br /&gt;    g.labels = @labels&lt;br /&gt;    g.write(filename)&lt;br /&gt;&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;if __FILE__ == $0&lt;br /&gt; x2g = Xml2Gruff.new('my_fruit.xml')&lt;br /&gt; x2g.save_line_graph('my_fruit2.png')&lt;br /&gt;end&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;file: my_fruit.xml&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;graph&gt;&lt;br /&gt;  &lt;summary&gt;&lt;br /&gt;    &lt;title&gt;My Graph&lt;/title&gt;&lt;br /&gt;    &lt;scale&gt;&lt;br /&gt;      &lt;label&gt;&lt;title&gt;2003&lt;/title&gt;&lt;value&gt;0&lt;/value&gt;&lt;/label&gt;&lt;br /&gt;      &lt;label&gt;&lt;title&gt;2004&lt;/title&gt;&lt;value&gt;2&lt;/value&gt;&lt;/label&gt;&lt;br /&gt;      &lt;label&gt;&lt;title&gt;2005&lt;/title&gt;&lt;value&gt;4&lt;/value&gt;&lt;/label&gt;&lt;br /&gt;    &lt;/scale&gt;&lt;br /&gt;  &lt;/summary&gt;&lt;br /&gt;  &lt;records&gt;&lt;br /&gt;    &lt;item&gt;&lt;br /&gt;      &lt;label&gt;Apples&lt;/label&gt;&lt;br /&gt;      &lt;values&gt;&lt;value&gt;1&lt;/value&gt;&lt;value&gt;2&lt;/value&gt;&lt;value&gt;3&lt;/value&gt;&lt;value&gt;4&lt;/value&gt;&lt;value&gt;4&lt;/value&gt;&lt;value&gt;3&lt;/value&gt;&lt;/values&gt;&lt;br /&gt;    &lt;/item&gt;&lt;br /&gt;    &lt;item&gt;&lt;br /&gt;      &lt;label&gt;Oranges&lt;/label&gt;&lt;br /&gt;      &lt;values&gt;&lt;value&gt;4&lt;/value&gt;&lt;value&gt;8&lt;/value&gt;&lt;value&gt;7&lt;/value&gt;&lt;value&gt;9&lt;/value&gt;&lt;value&gt;8&lt;/value&gt;&lt;value&gt;9&lt;/value&gt;&lt;/values&gt;&lt;br /&gt;    &lt;/item&gt;&lt;br /&gt;    &lt;item&gt;&lt;br /&gt;      &lt;label&gt;Watermelon&lt;/label&gt;&lt;br /&gt;      &lt;values&gt;&lt;value&gt;2&lt;/value&gt;&lt;value&gt;3&lt;/value&gt;&lt;value&gt;1&lt;/value&gt;&lt;value&gt;5&lt;/value&gt;&lt;value&gt;6&lt;/value&gt;&lt;value&gt;8&lt;/value&gt;&lt;/values&gt;&lt;br /&gt;    &lt;/item&gt;&lt;br /&gt;    &lt;item&gt;&lt;br /&gt;      &lt;label&gt;Peaches&lt;/label&gt;&lt;br /&gt;      &lt;values&gt;&lt;value&gt;9&lt;/value&gt;&lt;value&gt;9&lt;/value&gt;&lt;value&gt;10&lt;/value&gt;&lt;value&gt;8&lt;/value&gt;&lt;value&gt;7&lt;/value&gt;&lt;value&gt;9&lt;/value&gt;&lt;/values&gt;&lt;br /&gt;    &lt;/item&gt;&lt;br /&gt;  &lt;/records&gt;&lt;br /&gt;&lt;/graph&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Reference: &lt;a href="http://gruff.rubyforge.org/"&gt;gruff's gruff-0.2.9 Documentation&lt;/a&gt; [rubyforge.org]&lt;br /&gt;&lt;a href="http://www.google.com/url?sa=t&amp;ct=res&amp;cd=4&amp;url=http%3A%2F%2Ftopfunky.com%2Fclients%2Fblog%2F2006%2Fcanada_on_rails_gruff.pdf&amp;ei=2urBR-elJYe6-ALryoX2DA&amp;usg=AFQjCNEc0leNwpB7ai1MeHjDO3eD1T_kiQ&amp;sig2=SgqtwiMT6yb1-zOUqOl8pw"&gt;gruff graphs for ruby by geoffrey grosenbach&lt;/a&gt; [topfunky.com]</description>
      <pubDate>Sun, 24 Feb 2008 18:52:14 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5168</guid>
      <author>jrobertson (James Robertson)</author>
    </item>
    <item>
      <title>Unicode chart</title>
      <link>http://snippets.dzone.com/posts/show/4260</link>
      <description>This PHP-enhanced HTML page will display the first 4,096 (unless you change it) Unicode characters in a neat table.  Your browser's ability to render the characters properly may vary.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;HTML&gt;&lt;br /&gt;&lt;HEAD&gt;&lt;br /&gt;&lt;TITLE&gt;Unicode Chart&lt;/TITLE&gt;&lt;br /&gt;&lt;LINK REL="Stylesheet" TYPE="text/css" HREF="styles.css"&gt;&lt;br /&gt;&lt;STYLE TYPE="text/css"&gt;&lt;br /&gt;TH {text-align: center; }&lt;br /&gt;TD {text-align: center; }&lt;br /&gt;&lt;/STYLE&gt;&lt;br /&gt;&lt;/HEAD&gt;&lt;br /&gt;&lt;BODY&gt;&lt;br /&gt;&lt;TABLE ALIGN=CENTER BORDER=1&gt;&lt;br /&gt;&lt;TR&gt;&lt;TH&gt; &lt;/TH&gt;&lt;TH&gt;0&lt;/TH&gt;&lt;TH&gt;1&lt;/TH&gt;&lt;TH&gt;2&lt;/TH&gt;&lt;TH&gt;3&lt;/TH&gt;&lt;TH&gt;4&lt;/TH&gt;&lt;TH&gt;5&lt;/TH&gt;&lt;TH&gt;6&lt;/TH&gt;&lt;TH&gt;7&lt;/TH&gt;&lt;TH&gt;8&lt;/TH&gt;&lt;TH&gt;9&lt;/TH&gt;&lt;TH&gt;A&lt;/TH&gt;&lt;TH&gt;B&lt;/TH&gt;&lt;TH&gt;C&lt;/TH&gt;&lt;TH&gt;D&lt;/TH&gt;&lt;TH&gt;E&lt;/TH&gt;&lt;TH&gt;F&lt;/TH&gt;&lt;/TR&gt;&lt;br /&gt;&lt;?PHP&lt;br /&gt; for ($i=0; $i&lt;256; $i++) { //DON'T try to generate the whole chart&lt;br /&gt;  printf('&lt;TR&gt;&lt;TD&gt;%04X&lt;/TD&gt;', $i);&lt;br /&gt;  for ($j=0; $j&lt;16; $j++) {&lt;br /&gt;   printf('&lt;TD&gt;&amp;#x%X%X;&lt;/TD&gt;', $i, $j);&lt;br /&gt;  }&lt;br /&gt;  echo "&lt;/TR&gt;\n";&lt;br /&gt; }&lt;br /&gt;?&gt;&lt;br /&gt;&lt;/TABLE&gt;&lt;br /&gt;&lt;/BODY&gt;&lt;br /&gt;&lt;/HTML&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Thu, 05 Jul 2007 04:12:52 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4260</guid>
      <author>Minimiscience (Guildorn Tanaleth)</author>
    </item>
    <item>
      <title>Java - JFreeChart Example</title>
      <link>http://snippets.dzone.com/posts/show/2945</link>
      <description>&lt;code&gt;&lt;br /&gt;import java.awt.Font;&lt;br /&gt;&lt;br /&gt;import javax.swing.JFrame;&lt;br /&gt;import javax.swing.JPanel;&lt;br /&gt;&lt;br /&gt;import org.jfree.chart.ChartFactory;&lt;br /&gt;import org.jfree.chart.ChartPanel;&lt;br /&gt;import org.jfree.chart.JFreeChart;&lt;br /&gt;import org.jfree.chart.plot.PiePlot;&lt;br /&gt;import org.jfree.data.general.DefaultPieDataset;&lt;br /&gt;&lt;br /&gt;public class jfcExample extends JFrame&lt;br /&gt;{&lt;br /&gt;	private static final long serialVersionUID = 1L;&lt;br /&gt;	&lt;br /&gt;	private DefaultPieDataset dataset;&lt;br /&gt;	private JFreeChart jfc;&lt;br /&gt;&lt;br /&gt;	public jfcExample()&lt;br /&gt;	{&lt;br /&gt;		dataset = new DefaultPieDataset();&lt;br /&gt;	}&lt;br /&gt;	&lt;br /&gt;	public void setValue(String title, Double numDouble)&lt;br /&gt;	{&lt;br /&gt;		dataset.setValue(title, numDouble);&lt;br /&gt;	}&lt;br /&gt;	&lt;br /&gt;	public void setChar(String title)&lt;br /&gt;	{&lt;br /&gt;		jfc = ChartFactory.createPieChart(title, dataset, true, true, false);&lt;br /&gt;		&lt;br /&gt;		PiePlot pp = (PiePlot) jfc.getPlot();&lt;br /&gt;		pp.setSectionOutlinesVisible(false);&lt;br /&gt;		pp.setLabelFont(new Font("SansSerif", Font.PLAIN, 12));&lt;br /&gt;		pp.setNoDataMessage("Nessun Dato Inserito");&lt;br /&gt;		pp.setCircular(false);&lt;br /&gt;		pp.setLabelGap(0.02);&lt;br /&gt;	}&lt;br /&gt;	&lt;br /&gt;	private JPanel createPanel()&lt;br /&gt;	{&lt;br /&gt;		return new ChartPanel(jfc);&lt;br /&gt;	}&lt;br /&gt;	&lt;br /&gt;	public void Show()&lt;br /&gt;	{&lt;br /&gt;		setContentPane(createPanel());&lt;br /&gt;		setVisible(true);&lt;br /&gt;	}&lt;br /&gt;	&lt;br /&gt;	public static void main(String[] args)&lt;br /&gt;	{&lt;br /&gt;		jfcExample j = new jfcExample();&lt;br /&gt;		j.setTitle("Example Chart...");&lt;br /&gt;		j.setSize(640, 430);&lt;br /&gt;		&lt;br /&gt;		j.setValue("UNO", new Double(20.0));&lt;br /&gt;		j.setValue("DUE", new Double(10.0));&lt;br /&gt;		j.setValue("TRE", new Double(20.0));&lt;br /&gt;		j.setValue("QUATTRO", new Double(30.0));&lt;br /&gt;		j.setValue("CINQUE", new Double(20.0));&lt;br /&gt;		&lt;br /&gt;		j.setChar("Example Chart...");&lt;br /&gt;		&lt;br /&gt;		j.Show();&lt;br /&gt;	}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Wed, 01 Nov 2006 19:03:27 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/2945</guid>
      <author>whitetiger ()</author>
    </item>
    <item>
      <title>PHP last.fm chart creator</title>
      <link>http://snippets.dzone.com/posts/show/2724</link>
      <description>This code displays the Top 50 artists XML feed from last.fm in a nice presentable way on your website. Can easily be modified to work with any other feed from last.fm, find the full guide at http://www.strydominc.za.net/index.php?p=projectdetail&amp;d=phplastfmchart&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;?php&lt;br /&gt;/**********************************************************************************************&lt;br /&gt;www.strydominc.za.net&lt;br /&gt;Created by Jurgen Strydom, 19-08-2006, jurgen.strydom@gmail.com&lt;br /&gt;Read the readme.txt&lt;br /&gt;Version 1.01, 05-09-2006&lt;br /&gt;**********************************************************************************************/&lt;br /&gt;?&gt;&lt;br /&gt;&lt;link href="lastfmbar.css" rel="stylesheet" type="text/css"&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;?php&lt;br /&gt;//User settings -&gt; needs your attention&lt;br /&gt;$user = "Alkine"; //Your username&lt;br /&gt;$width = 700; //width of the list&lt;br /&gt;&lt;br /&gt;//Code you should not worry about&lt;br /&gt;$file = "http://ws.audioscrobbler.com/1.0/user/$user/topartists.xml";&lt;br /&gt;$xml = simplexml_load_file("$file");&lt;br /&gt;$big = $xml-&gt;artist[0]-&gt;playcount;&lt;br /&gt;$total = count($xml-&gt;artist);&lt;br /&gt;$factor =  $width /$big;&lt;br /&gt;?&gt;&lt;br /&gt;&lt;table width="&lt;?php echo $width ?&gt;" border="0" cellpadding="0" cellspacing="0"&gt;  &lt;br /&gt; &lt;?php&lt;br /&gt; for ($k=0 ; $k&lt;=$total - 1; $k++) {&lt;br /&gt; 	$barlen = round(($xml-&gt;artist[$k]-&gt;playcount * $factor), 0);&lt;br /&gt; ?&gt;&lt;br /&gt;  &lt;tr&gt;&lt;br /&gt;    &lt;td width="&lt;?php echo $width ?&gt;" height="10" valign="center"&gt;&lt;table width="100%" border="0" cellpadding="0" cellspacing="0"&gt;&lt;br /&gt;      &lt;!--DWLayoutTable--&gt;&lt;br /&gt;      &lt;tr&gt;&lt;br /&gt;        &lt;td width="&lt;?php echo $barlen ?&gt;" height="10" valign="center" class="lastfmbar"&gt;&lt;?php &lt;br /&gt;		if ($barlen &gt;= (($width + 100) /2)) {&lt;br /&gt;			echo "&lt;div align=\"right\"&gt;", $xml-&gt;artist[$k]-&gt;playcount, " - &lt;b&gt;", $xml-&gt;artist[$k]-&gt;name ,"&lt;/b&gt;&lt;/div&gt;";&lt;br /&gt;		}&lt;br /&gt;		if (($barlen &lt; (($width + 100) /2)) &amp;&amp; ($barlen &gt;= ($width / 3))) {&lt;br /&gt;			echo "&lt;div align=\"right\"&gt;", $xml-&gt;artist[$k]-&gt;playcount ," -&lt;/div&gt;";&lt;br /&gt;		}&lt;br /&gt;		if ($barlen &lt; ($width / 3)) {&lt;br /&gt;			echo "&amp;nbsp;";&lt;br /&gt;		}		&lt;br /&gt;		?&gt;&lt;/td&gt;&lt;br /&gt;        &lt;td width="&lt;?php echo $width - $barlen ?&gt;" valign="center"&gt;&lt;?php &lt;br /&gt;		if ($barlen &gt;= (($width + 100) /2)) {&lt;br /&gt;			echo "&amp;nbsp;";&lt;br /&gt;		}&lt;br /&gt;		if (($barlen &lt; (($width + 100) /2)) &amp;&amp; ($barlen &gt;= ($width / 3))) {&lt;br /&gt;			echo "&lt;div align=\"left\"&gt;&lt;b&gt;&amp;nbsp;", $xml-&gt;artist[$k]-&gt;name ,"&lt;/b&gt;&lt;/div&gt;";&lt;br /&gt;		}&lt;br /&gt;		if ($barlen &lt; ($width / 3)) {&lt;br /&gt;			echo "&lt;div align=\"left\"&gt;", $xml-&gt;artist[$k]-&gt;playcount, " - &lt;b&gt;", $xml-&gt;artist[$k]-&gt;name ,"&lt;/b&gt;&lt;/div&gt;";&lt;br /&gt;		}		&lt;br /&gt;		?&gt;&lt;/td&gt;&lt;br /&gt;      &lt;/tr&gt;&lt;br /&gt;    &lt;/table&gt;&lt;/td&gt;&lt;br /&gt;  &lt;/tr&gt;&lt;br /&gt;  &lt;?php&lt;br /&gt;  }&lt;br /&gt;  ?&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;?php&lt;br /&gt;/**********************************************************************************************&lt;br /&gt;Changelog:&lt;br /&gt;&lt;br /&gt;Version 1.01&lt;br /&gt;Fixed a bug that caused the bar sizes to display incorrectly.&lt;br /&gt;&lt;br /&gt;Version 1&lt;br /&gt;First release.&lt;br /&gt;**********************************************************************************************/&lt;br /&gt;?&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Wed, 27 Sep 2006 22:52:34 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/2724</guid>
      <author>Alkine (Jurgen Strydom)</author>
    </item>
  </channel>
</rss>
