<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://wiki.twig.es/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://wiki.twig.es/index.php?action=history&amp;feed=atom&amp;title=Drawing_a_Graph_1</id>
		<title>Drawing a Graph 1 - Revision history</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.twig.es/index.php?action=history&amp;feed=atom&amp;title=Drawing_a_Graph_1"/>
		<link rel="alternate" type="text/html" href="https://wiki.twig.es/index.php?title=Drawing_a_Graph_1&amp;action=history"/>
		<updated>2026-05-06T18:32:29Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.23.0</generator>

	<entry>
		<id>https://wiki.twig.es/index.php?title=Drawing_a_Graph_1&amp;diff=2157&amp;oldid=prev</id>
		<title>George2: Created page with &quot;&lt;source lang=&quot;java&quot;&gt; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Dimension; import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.Grap...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.twig.es/index.php?title=Drawing_a_Graph_1&amp;diff=2157&amp;oldid=prev"/>
				<updated>2015-07-02T15:53:08Z</updated>
		
		<summary type="html">&lt;p&gt;Created page with &amp;quot;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Dimension; import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.Grap...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.BasicStroke;&lt;br /&gt;
import java.awt.Color;&lt;br /&gt;
import java.awt.Dimension;&lt;br /&gt;
import java.awt.FontMetrics;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.Graphics2D;&lt;br /&gt;
import java.awt.Point;&lt;br /&gt;
import java.awt.RenderingHints;&lt;br /&gt;
import java.awt.Stroke;&lt;br /&gt;
import java.util.ArrayList;&lt;br /&gt;
import java.util.List;&lt;br /&gt;
import java.util.Random;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
import javax.swing.SwingUtilities;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * To change this template, choose Tools | Templates&lt;br /&gt;
 * and open the template in the editor.&lt;br /&gt;
 */&lt;br /&gt;
/**&lt;br /&gt;
 *&lt;br /&gt;
 * @author Rodrigo&lt;br /&gt;
 */&lt;br /&gt;
public class GraphPanel extends JPanel {&lt;br /&gt;
&lt;br /&gt;
    private int width = 800;&lt;br /&gt;
    private int heigth = 400;&lt;br /&gt;
    private int padding = 25;&lt;br /&gt;
    private int labelPadding = 25;&lt;br /&gt;
    private Color lineColor = new Color(44, 102, 230, 180);&lt;br /&gt;
    private Color pointColor = new Color(100, 100, 100, 180);&lt;br /&gt;
    private Color gridColor = new Color(200, 200, 200, 200);&lt;br /&gt;
    private static final Stroke GRAPH_STROKE = new BasicStroke(2f);&lt;br /&gt;
    private int pointWidth = 4;&lt;br /&gt;
    private int numberYDivisions = 10;&lt;br /&gt;
    private List&amp;lt;Double&amp;gt; scores;&lt;br /&gt;
&lt;br /&gt;
    public GraphPanel(List&amp;lt;Double&amp;gt; scores) {&lt;br /&gt;
        this.scores = scores;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    protected void paintComponent(Graphics g) {&lt;br /&gt;
        super.paintComponent(g);&lt;br /&gt;
        Graphics2D g2 = (Graphics2D) g;&lt;br /&gt;
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);&lt;br /&gt;
&lt;br /&gt;
        double xScale = ((double) getWidth() - (2 * padding) - labelPadding) / (scores.size() - 1);&lt;br /&gt;
        double yScale = ((double) getHeight() - 2 * padding - labelPadding) / (getMaxScore() - getMinScore());&lt;br /&gt;
&lt;br /&gt;
        List&amp;lt;Point&amp;gt; graphPoints = new ArrayList&amp;lt;&amp;gt;();&lt;br /&gt;
        for (int i = 0; i &amp;lt; scores.size(); i++) {&lt;br /&gt;
            int x1 = (int) (i * xScale + padding + labelPadding);&lt;br /&gt;
            int y1 = (int) ((getMaxScore() - scores.get(i)) * yScale + padding);&lt;br /&gt;
            graphPoints.add(new Point(x1, y1));&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // draw white background&lt;br /&gt;
        g2.setColor(Color.WHITE);&lt;br /&gt;
        g2.fillRect(padding + labelPadding, padding, getWidth() - (2 * padding) - labelPadding, getHeight() - 2 * padding - labelPadding);&lt;br /&gt;
        g2.setColor(Color.BLACK);&lt;br /&gt;
&lt;br /&gt;
        // create hatch marks and grid lines for y axis.&lt;br /&gt;
        for (int i = 0; i &amp;lt; numberYDivisions + 1; i++) {&lt;br /&gt;
            int x0 = padding + labelPadding;&lt;br /&gt;
            int x1 = pointWidth + padding + labelPadding;&lt;br /&gt;
            int y0 = getHeight() - ((i * (getHeight() - padding * 2 - labelPadding)) / numberYDivisions + padding + labelPadding);&lt;br /&gt;
            int y1 = y0;&lt;br /&gt;
            if (scores.size() &amp;gt; 0) {&lt;br /&gt;
                g2.setColor(gridColor);&lt;br /&gt;
                g2.drawLine(padding + labelPadding + 1 + pointWidth, y0, getWidth() - padding, y1);&lt;br /&gt;
                g2.setColor(Color.BLACK);&lt;br /&gt;
                String yLabel = ((int) ((getMinScore() + (getMaxScore() - getMinScore()) * ((i * 1.0) / numberYDivisions)) * 100)) / 100.0 + &amp;quot;&amp;quot;;&lt;br /&gt;
                FontMetrics metrics = g2.getFontMetrics();&lt;br /&gt;
                int labelWidth = metrics.stringWidth(yLabel);&lt;br /&gt;
                g2.drawString(yLabel, x0 - labelWidth - 5, y0 + (metrics.getHeight() / 2) - 3);&lt;br /&gt;
            }&lt;br /&gt;
            g2.drawLine(x0, y0, x1, y1);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // and for x axis&lt;br /&gt;
        for (int i = 0; i &amp;lt; scores.size(); i++) {&lt;br /&gt;
            if (scores.size() &amp;gt; 1) {&lt;br /&gt;
                int x0 = i * (getWidth() - padding * 2 - labelPadding) / (scores.size() - 1) + padding + labelPadding;&lt;br /&gt;
                int x1 = x0;&lt;br /&gt;
                int y0 = getHeight() - padding - labelPadding;&lt;br /&gt;
                int y1 = y0 - pointWidth;&lt;br /&gt;
                if ((i % ((int) ((scores.size() / 20.0)) + 1)) == 0) {&lt;br /&gt;
                    g2.setColor(gridColor);&lt;br /&gt;
                    g2.drawLine(x0, getHeight() - padding - labelPadding - 1 - pointWidth, x1, padding);&lt;br /&gt;
                    g2.setColor(Color.BLACK);&lt;br /&gt;
                    String xLabel = i + &amp;quot;&amp;quot;;&lt;br /&gt;
                    FontMetrics metrics = g2.getFontMetrics();&lt;br /&gt;
                    int labelWidth = metrics.stringWidth(xLabel);&lt;br /&gt;
                    g2.drawString(xLabel, x0 - labelWidth / 2, y0 + metrics.getHeight() + 3);&lt;br /&gt;
                }&lt;br /&gt;
                g2.drawLine(x0, y0, x1, y1);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // create x and y axes &lt;br /&gt;
        g2.drawLine(padding + labelPadding, getHeight() - padding - labelPadding, padding + labelPadding, padding);&lt;br /&gt;
        g2.drawLine(padding + labelPadding, getHeight() - padding - labelPadding, getWidth() - padding, getHeight() - padding - labelPadding);&lt;br /&gt;
&lt;br /&gt;
        Stroke oldStroke = g2.getStroke();&lt;br /&gt;
        g2.setColor(lineColor);&lt;br /&gt;
        g2.setStroke(GRAPH_STROKE);&lt;br /&gt;
        for (int i = 0; i &amp;lt; graphPoints.size() - 1; i++) {&lt;br /&gt;
            int x1 = graphPoints.get(i).x;&lt;br /&gt;
            int y1 = graphPoints.get(i).y;&lt;br /&gt;
            int x2 = graphPoints.get(i + 1).x;&lt;br /&gt;
            int y2 = graphPoints.get(i + 1).y;&lt;br /&gt;
            g2.drawLine(x1, y1, x2, y2);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        g2.setStroke(oldStroke);&lt;br /&gt;
        g2.setColor(pointColor);&lt;br /&gt;
        for (int i = 0; i &amp;lt; graphPoints.size(); i++) {&lt;br /&gt;
            int x = graphPoints.get(i).x - pointWidth / 2;&lt;br /&gt;
            int y = graphPoints.get(i).y - pointWidth / 2;&lt;br /&gt;
            int ovalW = pointWidth;&lt;br /&gt;
            int ovalH = pointWidth;&lt;br /&gt;
            g2.fillOval(x, y, ovalW, ovalH);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
//    @Override&lt;br /&gt;
//    public Dimension getPreferredSize() {&lt;br /&gt;
//        return new Dimension(width, heigth);&lt;br /&gt;
//    }&lt;br /&gt;
&lt;br /&gt;
    private double getMinScore() {&lt;br /&gt;
        double minScore = Double.MAX_VALUE;&lt;br /&gt;
        for (Double score : scores) {&lt;br /&gt;
            minScore = Math.min(minScore, score);&lt;br /&gt;
        }&lt;br /&gt;
        return minScore;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    private double getMaxScore() {&lt;br /&gt;
        double maxScore = Double.MIN_VALUE;&lt;br /&gt;
        for (Double score : scores) {&lt;br /&gt;
            maxScore = Math.max(maxScore, score);&lt;br /&gt;
        }&lt;br /&gt;
        return maxScore;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public void setScores(List&amp;lt;Double&amp;gt; scores) {&lt;br /&gt;
        this.scores = scores;&lt;br /&gt;
        invalidate();&lt;br /&gt;
        this.repaint();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public List&amp;lt;Double&amp;gt; getScores() {&lt;br /&gt;
        return scores;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    private static void createAndShowGui() {&lt;br /&gt;
        List&amp;lt;Double&amp;gt; scores = new ArrayList&amp;lt;&amp;gt;();&lt;br /&gt;
        Random random = new Random();&lt;br /&gt;
        int maxDataPoints = 40;&lt;br /&gt;
        int maxScore = 10;&lt;br /&gt;
        for (int i = 0; i &amp;lt; maxDataPoints; i++) {&lt;br /&gt;
            scores.add((double) random.nextDouble() * maxScore);&lt;br /&gt;
//            scores.add((double) i);&lt;br /&gt;
        }&lt;br /&gt;
        GraphPanel mainPanel = new GraphPanel(scores);&lt;br /&gt;
        mainPanel.setPreferredSize(new Dimension(800, 600));&lt;br /&gt;
        JFrame frame = new JFrame(&amp;quot;DrawGraph&amp;quot;);&lt;br /&gt;
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
        frame.getContentPane().add(mainPanel);&lt;br /&gt;
        frame.pack();&lt;br /&gt;
        frame.setLocationRelativeTo(null);&lt;br /&gt;
        frame.setVisible(true);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public static void main(String[] args) {&lt;br /&gt;
      SwingUtilities.invokeLater(new Runnable() {&lt;br /&gt;
         public void run() {&lt;br /&gt;
            createAndShowGui();&lt;br /&gt;
         }&lt;br /&gt;
      });&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>George2</name></author>	</entry>

	</feed>