الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف ارسم محور احداثيات

بدأه vector_ever في 25 يناير 2011 · 2 رد · 650 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

كيف اقوم برسم محور احدائيات وترقيم محور الـ x فيه كما بالشكل التالي

post-152477-032694700 1295973694_thumb.j

وشكرا

المرفقات
cordinate axis.jpg

إذا نظــرتَ نيـوب اللـّيـثِ بـارزةً         فـلا تظــنَنَ أَنَّ اللـّيـــثَ يبْتسـِـــمُ


 


 


رسم المخططات البيانية بواسطة الجافا


 


كتاب تحليل وتصميم نظم المعلومات


#2

باستخدام الـ Java2D

يمنكك فعل ذلك وتقسيم المحور كما تريد

Software Developer
Mahmoudkelany.com


 

#3

وعليكم السلام ورحمه الله وبركاته

انظر هذا المثال

package arabteam;

import java.awt.*;
import java.awt.font.*;
import java.awt.geom.*;
import javax.swing.*;

public class LineChart extends JPanel {
    double[] data = { 13.2, 9.2, 4, 16.7, 4.3, 9.5, 12, 5.4 };
    final int PAD  = 25;
    final int TICK  = 2;
    final int STICK = 3;

    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D)g;
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                            RenderingHints.VALUE_ANTIALIAS_ON);
        drawAxes(g2);
        // plot data
        Point2D.Double lastP = null;
        /*for(int j = 0; j < data.length; j++) {
            g2.setPaint(Color.red);
            Point2D.Double p = modelToView(j, data[j]);
            g2.fill(new Ellipse2D.Double(p.x-2, p.y-2, 4, 4));
            if(lastP != null) {
                g2.setPaint(Color.blue);
                g2.draw(new Line2D.Double(lastP, p));
            }
            lastP = p;
        }*/ //draw
    }

    private Point2D.Double modelToView(double x, double y) {
        double w = getWidth();
        double h = getHeight();
        double tx = PAD;
        double ty = h-PAD;
        AffineTransform at = AffineTransform.getTranslateInstance(tx, ty);
        double xScale = (w - 2*PAD)/(data.length-1);
        int max = (int)Math.ceil(getMaxValue());
        double yScale = (h - 2*PAD)/max;
        at.scale(xScale, -yScale);
        Point2D.Double dst = new Point2D.Double();
        at.transform(new Point2D.Double(x, y), dst);
        return dst;
    }

    private void drawAxes(Graphics2D g2) {
        double w = getWidth();
        double h = getHeight();
        double xInc = (w - 2*PAD)/(data.length-1);
        int max = (int)Math.ceil(getMaxValue());
        double yInc = (h - 2*PAD)/max;
        // grid lines
        g2.setPaint(new Color(220,230,240));
        // vertical
        for(int j = 0; j <= data.length; j++) {
            double x = PAD + j*xInc;
            g2.draw(new Line2D.Double(x, PAD, x, h-PAD));
        }
        // horizontal
        for(int j = 0; j <= max; j++) {
            double y = PAD + j*yInc;
            g2.draw(new Line2D.Double(PAD, y, w-PAD, y));
        }
        // axes
        g2.setPaint(new Color(51,51,51));

        // ordinate
        g2.draw(new Line2D.Double(PAD, PAD, PAD, h-PAD));
        // tick marks
        for(int j = 0; j <= max; j++) {
            double y = PAD + j*yInc;
            g2.draw(new Line2D.Double(PAD, y, PAD-TICK, y));
        }
        // labels
        Font font = g2.getFont().deriveFont(14f);
        g2.setFont(font);
        FontRenderContext frc = g2.getFontRenderContext();
        LineMetrics lm = font.getLineMetrics("0", frc);
        for(int j = 0; j <= max; j++) {
            String s = String.valueOf(max-j);
            float y = (float)(PAD + j*yInc + lm.getDescent());
            float width = (float)font.getStringBounds(s, frc).getWidth();
            float x = (float)(PAD - TICK - STICK - width);
            g2.drawString(s, x, y);
        }

        // abcissa
        g2.draw(new Line2D.Double(PAD, h-PAD, w-PAD, h-PAD)); //X
        // tick marks
        for(int j = 0; j <= data.length; j++) {
            double x = PAD + j*xInc;
            g2.draw(new Line2D.Double(x, h-PAD, x, h-PAD+TICK));
        }
        // labels
        for(int j = 0; j <= data.length; j++) {
            String s = String.valueOf(j);
            float width = (float)font.getStringBounds(s, frc).getWidth();
            float x = (float)(PAD + j*xInc - width/2);
            float y = (float)(h-PAD + TICK + STICK + lm.getAscent());
            g2.drawString(s, x, y);
        }
    }

    private double getMaxValue() {
        double max = -Double.MAX_VALUE;
        for(int j = 0; j < data.length; j++) {
            if(data[j] > max)
                max = data[j];
        }
        return max;
    }

    public static void main(String[] args) {
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.getContentPane().add(new LineChart());
        f.setSize(400,400);
        f.setLocation(200,200);
        f.setVisible(true);
    }
}

ايضا يمكنك استخدام swingX لرسم الاحداثيات x,y

عن طريق استخدام الكلاس JXGraph

كما بالصوره

75835546.jpg

تم تعديل هذه المشاركة بواسطة Ahmed-Ghanem في 25 يناير 2011 في 20:17

1
2coscqr.jpg

مواضيع مشابهة