• 0
vector_ever

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

سؤال

84 إجابة على هذا السؤال .

  • 0

السلام عليكم

كنا في الدرس السابق قد ناقشنا آخر فصل من فصول الرسوم البيانية التي تعتمد مبدأ الـ Category Dataset وسنبدأ في شروحات تبعاً لمفهوم جديد يعتمد على الـ XY Dataset

لكن قبل أن ندخل في هذا المجال أود ان أشرح مفهوم جديد ومن الممكن تطبيقه على الـ Category Dataset او الـ XY Dataset

كما كنا نشاهد اننا كنا نعرض الرسومات البيانية كل على حدا يعني مثلا لو أحببت مثلاً أعمل رسم بياني لتوزع الزراعة في الوطن العربي ونوع أخر لتوزع الصناعة في الوطن العربي وثالث لتوزع الطاقة وأخر لتوزع المياه وهكذا هلم جراً عند اذ سنحتاج لكتابة كل مخطط في كلاس لوحده ويعرض أيضا لوحده كل رسم بياني في نافذة لوحدها....لكن أليست هذه الرسوم على علاقة ببعضها البعض حيث تتحدث عن الاقتصاد في الوطن العربي فانا أحب أن اعرضها كلها مع بعض في نافذة واحدة ....فهل هذا ممكن؟؟ !!

نعم ممكن وهذا ما سنناقشه في هذا الدرس سيكون الشكل الناتج هكذا

post-152477-009806400 1328897246_thumb.j

ونستطيع وضع أي نوع من أنواع الرسومات البيانية مع بعض في نافذة واحدة سواء كانت مخططات أعمدة او خطية أو دائرية او حلقية ...الخ

حسنا دعونا ندخل بشيء من التفصيل الآن

قمت بكتابة مثال عن التعليم الجامعي والتعليم العالي في الوطن العربي من حيث توزع الشهادات والبحث العلمي والبطالة بين المتخرجين واللغات التي يجيدونها زسأقوم بتمثلهم كلهم باستخدام الرسم الدائري الـ Pie Chart

اذاُ لدينا 4 رسومات دائرية نأتي لكل واحدة منها على فرادى ونشرح المهم والجديد

1- الشهادات الجامعية الموجودة في وطننا العربي يعني بعد انتهاء الدراسة الجامعية هناك من يكمل ويحصل على الماجستير وهناك من يتابع ويحصل على الدكتوراة والآخر يصير برفسور (هذا ان كان عنا حقا رتب علمية من رتبة برفسور)


// create a dataset...
DefaultPieDataset dataset1 = new DefaultPieDataset();
dataset1.setValue("B.Sc.", 92.1);
dataset1.setValue("M.Sc.", 6.0);
dataset1.setValue("PHD", 1.7);
dataset1.setValue("Prof.", 0.2);

// create a chart...
JFreeChart chart1 = ChartFactory.createPieChart3D( //can without 3D
"Certificates of the graduating students in the Arab World", // the main Lable for this chart
dataset1,
true, // legend?
true, // tooltips?
false // URLs?
);

2- اللغات الأجنبية التي يجيدها الطلاب في الجامعات او بعد تخرجهم وعملت مقارنة للغات التالية: روسي انكليزي فرنسي اسباني وألماني (من الممكن الطالب أن يجيد لغة أو أكثر)

                // create a dataset...
DefaultPieDataset dataset2 = new DefaultPieDataset();
dataset2.setValue("English", 70.1);
dataset2.setValue("French", 43.5);
dataset2.setValue("Spanish", 13.5);
dataset2.setValue("German", 4.5);
dataset2.setValue("Russian", 2.5);

// create a chart...
JFreeChart chart2 = ChartFactory.createPieChart3D( //can without 3D
"Foreign languages which used by Arab studens", // the main Lable for this chart
dataset2,
true, // legend?
true, // tooltips?
false // URLs?
);

3- البحث العلمي على مستوى العالم وعملت مقارنة بين انجازات البحث العلمي بين كل من الولايات المتحدة وجنوب شرق أسيا وأوروبا وامريكا اللاتينية والوطن العربي طبعاً لا مبالغة في النتائج وستجدون مقدار البحث العلمي العربي كم هو كبير جدا جدا للآسف


// create a dataset...
DefaultPieDataset dataset3 = new DefaultPieDataset();
dataset3.setValue("USA", 78.1);
dataset3.setValue("EU", 48.5);
dataset3.setValue("Asia", 39.9);
dataset3.setValue("South America", 7.5);
dataset3.setValue("Arabic countries", 0.4);

// create a chart...
JFreeChart chart3 = ChartFactory.createPieChart3D( //can without 3D
"Scientific Research in the world", // the main Lable for this chart
dataset3,
true, // legend?
true, // tooltips?
false // URLs?
);

4- نسب البطالة بين خريجي الجامعات على المستوى العالمي وتمت المقارنة أيضا بين كل من الولايات المتحدة وجنوب شرق أسيا وأوروبا وامريكا اللاتينية والوطن العربي واخيراً وجدنا كعرب ما نتفوق به على أقراننا في باقي دول العالم :)


// create a dataset...
DefaultPieDataset dataset4 = new DefaultPieDataset();
dataset4.setValue("USA", 7.1);
dataset4.setValue("EU", 9.5);
dataset4.setValue("Asia", 11.9);
dataset4.setValue("South America", 37.5);
dataset4.setValue("Arabic countries", 70.4);

// create a chart...
JFreeChart chart4 = ChartFactory.createPieChart3D( //can without 3D
"Unemployment among graduates", // the main Lable for this chart
dataset4,
true, // legend?
true, // tooltips?
false // URLs?
);

طيب الكلام لحد الآن جميل وسلس يلزمنا الآن القيام بجمع هذه المخططات الأربعة في شكل واحد حيث لدينا chart1 و chart2 و chart3 و chart4 وكل منهم يمثل شكل مختلف عن الآخر كما رأينا والحل يكون باستخدام الكود البسيط التالي

		// add the chart to a panel...
JPanel chartPanel = new JPanel(new GridLayout(2, 2));
chartPanel.add(new ChartPanel(chart1));
chartPanel.add(new ChartPanel(chart2));
chartPanel.add(new ChartPanel(chart3));
chartPanel.add(new ChartPanel(chart4));

chartPanel.setPreferredSize(new Dimension(800, 600));
setContentPane(chartPanel);

الآن نآتي الى الكود النهائي والشكل الناتج عنه


import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import javax.swing.JPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PiePlot;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;

public class MultiPieChart extends ApplicationFrame {
public MultiPieChart(String title) {
super(title);

// create a dataset...
DefaultPieDataset dataset1 = new DefaultPieDataset();
dataset1.setValue("B.Sc.", 92.1);
dataset1.setValue("M.Sc.", 6.0);
dataset1.setValue("PHD", 1.7);
dataset1.setValue("Prof.", 0.2);

DefaultPieDataset dataset2 = new DefaultPieDataset();
dataset2.setValue("English", 70.1);
dataset2.setValue("French", 43.5);
dataset2.setValue("Spanish", 13.5);
dataset2.setValue("German", 4.5);
dataset2.setValue("Russian", 2.5);

DefaultPieDataset dataset3 = new DefaultPieDataset();
dataset3.setValue("USA", 78.1);
dataset3.setValue("EU", 48.5);
dataset3.setValue("Asia", 39.9);
dataset3.setValue("South America", 7.5);
dataset3.setValue("Arabic countries", 0.4);

DefaultPieDataset dataset4 = new DefaultPieDataset();
dataset4.setValue("USA", 7.1);
dataset4.setValue("EU", 9.5);
dataset4.setValue("Asia", 11.9);
dataset4.setValue("South America", 37.5);
dataset4.setValue("Arabic countries", 70.4);

// create a chart...
JFreeChart chart1 = ChartFactory.createPieChart3D( //can without 3D
"Certificates of the graduating students in the Arab World", // the main Lable for this chart
dataset1,
true, // legend?
true, // tooltips?
false // URLs?
);

JFreeChart chart2 = ChartFactory.createPieChart3D( //can without 3D
"Foreign languages which used by Arab studens", // the main Lable for this chart
dataset2,
true, // legend?
true, // tooltips?
false // URLs?
);

JFreeChart chart3 = ChartFactory.createPieChart3D( //can without 3D
"Scientific Research in the world", // the main Lable for this chart
dataset3,
true, // legend?
true, // tooltips?
false // URLs?
);

JFreeChart chart4 = ChartFactory.createPieChart3D( //can without 3D
"Unemployment among graduates", // the main Lable for this chart
dataset4,
true, // legend?
true, // tooltips?
false // URLs?
);


// add the chart to a panel...
JPanel chartPanel = new JPanel(new GridLayout(2, 2));
chartPanel.add(new ChartPanel(chart1));
chartPanel.add(new ChartPanel(chart2));
chartPanel.add(new ChartPanel(chart3));
chartPanel.add(new ChartPanel(chart4));

chartPanel.setPreferredSize(new Dimension(800, 600));
setContentPane(chartPanel);

}


/**
* Starting point for the demonstration application.
*
* @param args ignored.
*/
public static void main(String[] args) {
MultiPieChart demo = new MultiPieChart("MultiPieChart Demo");
demo.pack();
RefineryUtilities.centerFrameOnScreen(demo);
demo.setVisible(true);
}

}

post-152477-055393700 1328900694_thumb.j

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

عوداً على بدء اود ان اناقش بعض المفاهيم التي مرت معنا في الدرس السابق حيث قمنا برسم عدة مخططات دائرية عن مستوى وقدرات ومستقبل الطلاب العرب

لكن هذه المرة سأقوم بعمل شكل يجمع عدة مخططات من انواع مختلفة في نافذة واحدة كي لا يكون أي لبس بالنسبة للدرس السابق ولكي لا يظنن أحد انه فقط يصح الرسم لعدة مخططات في نافذة واحدة فقط لنوع موحد من المخططات

على كل حال ساناقش اليوم مثال قمت بكتابته يتحدث عن اللغات الاجنبية التي يستطيع الطلاب العرب في الجامعات التحدث بها وقد كنا قد استخدمنا هذا المثال في الدرس السابق لكننا اليوم سنعيد استخدامه ونمثله في 4 رسومات بيانية مختلفة

أولاً: create a chart

الكود التالي سيتم استخدامه نفس لكل من المخططات الدائرية والمخططات الحلقية

		// create a dataset...
DefaultPieDataset dataset1 = new DefaultPieDataset();
dataset1.setValue("English", 70.1);
dataset1.setValue("French", 43.5);
dataset1.setValue("Spanish", 13.5);
dataset1.setValue("German", 4.5);
dataset1.setValue("Russian", 2.5);

أما بالنسبة لمخططات الأعمدة فسنستخدم الكود التالي والذي هو نفسه سيتم استخدامه لتمثيل بيانات الـ StackedBar Chart


// create a dataset...
DefaultCategoryDataset dataset2 = new DefaultCategoryDataset();
dataset2.addValue(70.1, "English.","");
dataset2.addValue(43.5, "French.", "" );
dataset2.addValue(13.5, "Spanish", "");
dataset2.addValue(4.5, "German", "");
dataset2.addValue(2.5, "Russian", "");

ثانياً: create a chart

بالنسبة للمخططات الدائرية:


// create a chart...
JFreeChart chart1 = ChartFactory.createPieChart(
"Pie Chart", // the main Lable for this chart
dataset1,
true, // legend?
true, // tooltips?
false // URLs?
);

للمخططات الحلقية:


// create a chart...
JFreeChart chart2 = ChartFactory. createRingChart(
"Ring Chart", // chart title
dataset1, // data
true, // include legend
true, // tooltips
false // urls
);

أما لمخططات الأعمدة:


// create a chart...
JFreeChart chart3 = ChartFactory.createBarChart(
"Bar Chart", // chart title
"", // domain axis label
"", // range axis label
dataset2, // data
PlotOrientation.VERTICAL, // orientation
true, // include legend
true, // tooltips?
false // URLs?
);

وبالنهاية لمخططات الـ StackedBar

		// create a chart...
JFreeChart chart4 = ChartFactory.createStackedBarChart(
"StackedBar Chart", // chart title
"", // domain axis label
"", // range axis label
dataset2, // data
PlotOrientation.VERTICAL, // orientation
true, // include legend
true, // tooltips?
false // URLs?
);

ثالثاُ: add the chart to a panel ثماماً كما في الدرس السابق


// add the chart to a panel...
JPanel chartPanel = new JPanel(new GridLayout(2, 2));
chartPanel.add(new ChartPanel(chart1));
chartPanel.add(new ChartPanel(chart2));
chartPanel.add(new ChartPanel(chart3));
chartPanel.add(new ChartPanel(chart4));

chartPanel.setPreferredSize(new Dimension(800, 600));
setContentPane(chartPanel);

رابعاً: Extras and the modifications هنا لن نقوم بأي اضافات لكني سأقوم باضافة جديدة لم نستخدمها من قبل بالنسبة للمخططات الدائرية

حيث يتمثل الأمر في اقتطاع جزء من الرسم الدائري وسحبه للخارج كي يكون الرسم اكثر وضوحاً (تماماً كسحب قطعة من الكعكة) والشكل التالي يبين المقصد

post-152477-093558400 1329271520_thumb.j

العملية تتم وفق الامر التالي:

plot.setExplodePercent(Section number, offset distance);

حيث أن الـ Section number هو رقم الجزء الممثل بيانياً والذي يراد سحبه للخارج ووتبدأ الأجزاء من الرقم 0 فمثلا اللغة الانكليزية رقم الجزء الخاص بها هو 0 اما الفرنسية فهو 1 أما الألمانية فهو 3 وهكذا

أما بالنسبة للـ offset distance فهو يعبر عن مقدار الازاحة او مقدار البعد الذي نريده لسحب أحد الأجزاء بعيداً عن باقي الأقسام (لاحظ أنه اذا تجاوز هذا الرقم مقدار معين يكون الرسم بشكل عام أصغر)

		// Extras and the modifications
PiePlot plot = (PiePlot) chart1.getPlot();

//Exploded Sections
plot.setExplodePercent(1, 0.25);

طبعاهنا بالتطبيق على القسم الخاص باللغة الفرنسية

يرجى الأخذ بعين الاعتبار أنه هذه الاضافة لا تصلح مع المخططات الدائرية ثلاثية الابعاد فقط مع المخططات الدائرية العادية المسطحة ذات البعدين

أما الكود النهائي مع الرسم فهو كالتالي:


import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import javax.swing.JPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;

public class MultipleChart extends ApplicationFrame {
public MultipleChart(String title) {
super(title);

// create a dataset...
DefaultPieDataset dataset1 = new DefaultPieDataset();
dataset1.setValue("English", 70.1);
dataset1.setValue("French", 43.5);
dataset1.setValue("Spanish", 13.5);
dataset1.setValue("German", 4.5);
dataset1.setValue("Russian", 2.5);

DefaultCategoryDataset dataset2 = new DefaultCategoryDataset();
dataset2.addValue(70.1, "English.","");
dataset2.addValue(43.5, "French.", "" );
dataset2.addValue(13.5, "Spanish", "");
dataset2.addValue(4.5, "German", "");
dataset2.addValue(2.5, "Russian", "");

// create a chart...
JFreeChart chart1 = ChartFactory.createPieChart(
"Pie Chart", // the main Lable for this chart
dataset1,
true, // legend?
true, // tooltips?
false // URLs?
);


// create the chart...
JFreeChart chart2 = ChartFactory. createRingChart(
"Ring Chart", // chart title
dataset1, // data
true, // include legend
true, // tooltips
false // urls
);

JFreeChart chart3 = ChartFactory.createBarChart(
"Bar Chart", // chart title
"", // domain axis label
"", // range axis label
dataset2, // data
PlotOrientation.VERTICAL, // orientation
true, // include legend
true, // tooltips?
false // URLs?
);


JFreeChart chart4 = ChartFactory.createStackedBarChart(
"StackedBar Chart", // chart title
"", // domain axis label
"", // range axis label
dataset2, // data
PlotOrientation.VERTICAL, // orientation
true, // include legend
true, // tooltips?
false // URLs?
);

// add the chart to a panel...
JPanel chartPanel = new JPanel(new GridLayout(2, 2));
chartPanel.add(new ChartPanel(chart1));
chartPanel.add(new ChartPanel(chart2));
chartPanel.add(new ChartPanel(chart3));
chartPanel.add(new ChartPanel(chart4));

chartPanel.setPreferredSize(new Dimension(800, 600));
setContentPane(chartPanel);


// Extras and the modifications
PiePlot plot = (PiePlot) chart1.getPlot();

//Exploded Sections
plot.setExplodePercent(1, 0.25);
}

/**
* Starting point for the demonstration application.
*
* @param args ignored.
*/
public static void main(String[] args) {
MultipleChart demo = new MultipleChart("Foreign languages which used by Arab studens");
demo.pack();
RefineryUtilities.centerFrameOnScreen(demo);
demo.setVisible(true);
}

}

post-152477-083437300 1329279497_thumb.j

تم تعديل بواسطه vector_ever
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

لك جزيل الشكر على هذا الموضوع الرائع والمفيد .

اود ان اطرح سؤال حول StackedAreaChart .

كيف يمكن الحصول على مفتاح المبيان فوق المبيان يعني مثلا Row1 تكو ن مكتوبة في المجال الأحمر و Row2 تكو ن مكتوبة في المجال الأزرق .......

وشكراً

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

لك جزيل الشكر على هذا الموضوع الرائع والمفيد .

اود ان اطرح سؤال حول StackedAreaChart .

كيف يمكن الحصول على مفتاح المبيان فوق المبيان يعني مثلا Row1 تكو ن مكتوبة في المجال الأحمر و Row2 تكو ن مكتوبة في المجال الأزرق .......

وشكراً

أهلا أخي وحياك الله وهذا واجب علي تجاه هذا المنتدى واعضاءه الكرام

بالنسبة لسؤالك أخي الكريم فهل فصلت أكثر ما هو المطلوب لأني صراحة لا اعرف عن أي مفتاح تتحدث والشرح لا يحتوي أي مفاتيح و ما هو المبيان أيضاً فاعذرني لا اعرف مالذي تعنيه هذه الكلمة

تحياتي

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أهلا أخي وحياك الله وهذا واجب علي تجاه هذا المنتدى واعضاءه الكرام

بالنسبة لسؤالك أخي الكريم فهل فصلت أكثر ما هو المطلوب لأني صراحة لا اعرف عن أي مفتاح تتحدث والشرح لا يحتوي أي مفاتيح و ما هو المبيان أيضاً فاعذرني لا اعرف مالذي تعنيه هذه الكلمة

تحياتي

حياك الله اخي الكريم.

ساحاول ان اوضح : المفتاح يعني the legend الموجودة في الاسفل و المبيان هو المخطط البياني chart و انا اتحدث عن النوع StakedAreaChart .

و ما اريد الحصول عليه هو مثل الصورة المرفقة ( اضفت النص على الصورة ببرنامج تعديل الصور و لكن كيف يمكن ان اقوم بذلك م بجاڢا java )

تحياتي post-257798-056250800 1329843097_thumb.p

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

حياك الله اخي الكريم.

ساحاول ان اوضح : المفتاح يعني the legend الموجودة في الاسفل و المبيان هو المخطط البياني chart و انا اتحدث عن النوع StakedAreaChart .

و ما اريد الحصول عليه هو مثل الصورة المرفقة ( اضفت النص على الصورة ببرنامج تعديل الصور و لكن كيف يمكن ان اقوم بذلك م بجاڢا java )

تحياتي post-257798-056250800 1329843097_thumb.p

والله يا عزيزي للآسف طلبك غير ممكن تحقيقه عن طريق امكانيات هذه المكتبة لكن يكفي ان تؤشر على كل قسم فسيظهر لك أن هذا القسم هو الـ Row1 مثلا وقيمته الفلانية كذا

وحتى انه موضح في الشريط في أسفل الشكل انه اللون الأحمر يمثل الـ Row1 واللون الاخضر يمثل كذا والأزرق كذا

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

والله يا عزيزي للآسف طلبك غير ممكن تحقيقه عن طريق امكانيات هذه المكتبة لكن يكفي ان تؤشر على كل قسم فسيظهر لك أن هذا القسم هو الـ Row1 مثلا وقيمته الفلانية كذا

وحتى انه موضح في الشريط في أسفل الشكل انه اللون الأحمر يمثل الـ Row1 واللون الاخضر يمثل كذا والأزرق كذا

السلام عليكم اخي .

انا فكرت في حالة اذا كان لدينا معطياة كثيرة و هنا سيكون افضل ان وضعنا الاسماء على المخطط البياني ... بحثت و لم اجد و انت اخي الكريم اكدت لي انه غير ممكن ...

على العموم لك جزيل الشكر و جزاك الله خيرا.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

و كذلك فكرت في وضع الاسم داخل JLabel ثم اضعها على المخطط البياني جربت و لم انجح ذا كانت لديك فكرة فافدنا و جزاك الله خيرا

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

والله لا اعتقد انه هذا ممكن في هذه الرسوم وحتى اخي طلبك غير منطقي لا افهم لماذا تصر على وضع التسميات فوق الرسم

طيب كيف ستكون شكل التسميات فيما لو مانت احدى القيم صغيرة جدا جدا بحيث لا تتسع لان نكتب داخلها الاسم الدال عليها مثلا Row2 أين ستظر ان تكتب الاسم وقتها ثم انظر للرسم الذي قمت بارفاقله حيث نرى ان Row3 تغرد وحيدة على اليسار بينما اخوتها Row1 والـ Row2 تم كتابتهم في منتصف الشكل

فهذا يدل على عدم المنطقية والعشوائية فهل ااصور مثلا رسم في 10 اقسام لمثلها فكيف سيكون شكل الرسم بعد كتابة اسما الاقسام عليه !!!!

اخي الرسوم هنا تعتمد مبدأ الديناميكية يعني مهما تغيرت القيم فلن نقلق من ناحية اين ستتوضع الاسماء الدالة عليها بينما الظاهر انت تفترض بعقلك انه لديك شكل محدد لن يتغير وتريد وضع القيم على الشكل لكن ماذا لو تغيرت القيم او اضفنا او حذنا اقسام جديدة عندئذ كل مرة سنظهر للتعديل في مواقع الاسماء الدالة على الاقسام وكل اسم على حدة ويجب ان نقلق اين سبتم وضع كل اسم على الشكل وهذا الامر مستحيل طبعا قبل رسم الشكل لاننا لا نعرف كيف سيكون شكل هذا المخطط البياني قبل رسمه فكيف ستعرف اين ستضع الاسماء ومواقعها ؟؟ أم انك ستشتغل البرنامج وتحصل على الشكل ثم تقرر اين ستضع الاسماء؟ في هذه الحالة سيكون هذا عبء اضافي ولا طائل منه الا العذاب

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

عندي سؤالين

1- عملت JFram لجمع بعض البيانات ثم إرسالها لفئة الرسم البياني وعند ظهور الرسم البياني في نافذة منفصلة وإغلاقه يتم إغلاق الـ JFram الرئيسي وأنا لاأريده يغلق , فماهو الحل ؟

2- في المخطط LineChart هناك خط بياني واحد فهل يمكن وضع أكثر من خط وكل خط يمثل قيم معينة ؟ مثلًا خط لمستوى الطلاب في مادة القرآن الكريم وبنفس المخطط خط آخر لمستوى الطلاب في مادة الحديث الشريف وهكذا ...

تم تعديل بواسطه هدف الشمالي
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

عندي سؤالين

1- عملت JFram لجمع بعض البيانات ثم إرسالها لفئة الرسم البياني وعند ظهور الرسم البياني في نافذة منفصلة وإغلاقه يتم إغلاق الـ JFram الرئيسي وأنا لاأريده يغلق , فماهو الحل ؟

2- في المخطط LineChart هناك خط بياني واحد فهل يمكن وضع أكثر من خط وكل خط يمثل قيم معينة ؟ مثلًا خط لمستوى الطلاب في مادة القرآن الكريم وبنفس المخطط خط آخر لمستوى الطلاب في مادة الحديث الشريف وهكذا ...

بالنسبة لسؤالك الأول فاعتقد انه يجب عليكان تحذف الأمر

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

من فئة الرسم البياني والاكتفاء بهذا الأمر فقط في الـ JFram الرئيسي

أما بالنسبة للسؤال الثاني فهناك دروس قادمة بالمستقبل عن هذا المجال ان شاء الله

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

بالنسبة لسؤالك الأول فاعتقد انه يجب عليكان تحذف الأمر

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

من فئة الرسم البياني والاكتفاء بهذا الأمر فقط في الـ JFram الرئيسي

هذا الأمر غير موجود في فئة الرسم البياني

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

هذا الأمر غير موجود في فئة الرسم البياني

حسناً أين الشيفرة البرمجية الخاصة ببرنامجك لأرى ما المشكلة

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

حسناً أين الشيفرة البرمجية الخاصة ببرنامجك لأرى ما المشكلة

الـ JFrame عملته ببرنامج NetBeans IDE وهو مرفق وعند الضغط على الزر نعمل كائن من فئة AreaChart التي وضعتها أنت بدون تعديل

NewJFrame.java

تم تعديل بواسطه هدف الشمالي
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أولاً في الكود انت قمت بعمل تشغيل للـ AreaChart وليس للـ LineChart

ثانياُ ما هو نوع الحدث الذي أعطيته للزر Button المسؤول عن فتح الرسم

لانه صراحة مهما عملت فان افريم الرئيسي سيتم اغلاقه بمجرد اغلاق الرسم البياني وهذا اعتقد بسبب نوع الحدث المسؤول عن ذلك

انا ليس لدي خبرة في واجهات المستخدم المرئية عن طريق النت بينز عادة اقوم بكتابتها يدوياً

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

فعلًا صدقت أنا استدعي الـAreaChart

وبالنسبة للحدث فهو ActionPerformed

تم تعديل بواسطه هدف الشمالي
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

فعلًا ضدقت أنا استدعي الـAreaChart

وبالنسبة للحدث فهو ActionPerformed

كما قلت لك اني لا ابرمج GUI بواسطة قوائم وعناصر النت بينز انما أقوم بكتابتها برمجياً ولا أواجه اي مشكلة في ذلك

اذا أحببت أستطيع ان اكتب لك كود عن فريم فيه زر يفتح الرسم

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم يا أخوان من جديد

سنبدأ اليوم في دفعة جديدة من الدروس وهذه المرة ساتحدث عن الـ XY Dataset ومن اسمها فهي واضح أن نعتمد التمثيل البياني لقيم x وقيم y اتمثيل الرسوم البيانية

هذا ما يطلق عليه رياضياً (value(x,y وبشكل عام مجموعة البيانات (Dataset) الممثلة لهذا النوع تتألف من واحد أو أكثر من الـ data series والتي بدورها ترث من الواجهة SeriesDataset

ان المعيار الأساسي لمجموعة البيانات هذه يتم استخدامه من خلال ما يسمى بالـ XYPlot ويتم تطبيقه وتنفيذه في نوعين هما :

• XYSeriesCollection

• TimeSeriesCollection

هناك الكثير والكثير من الرسوم البيانية التي يحققها هذا النوع من التمثيل البياني وكما راينا اما عن طريق الاحدائيات او ما يتعلق بالوقت وتمثيله

سأقوم بذكر أهم الرسوم التي سنتحدث عنها بالشرح وطبعا هناك غيرها سيتم الشرح عنها وحتى من لديه اهتمام بنوع معين من الرسوم لم يتم شرحه اتمنى ان يتم ذكره كي استطيع شرحه

1- XY Bar Chart أو مخططات الأعمدة لكن من مفهوم أخر يتعلق بالاحداثيات لقيم x وقيم y

post-152477-005449700 1330294900_thumb.j

2- XY Line Chart

post-152477-029121800 1330295361_thumb.j

3- XY Area Chart

post-152477-026946200 1330295383_thumb.j

4- Gantt Chart

post-152477-029128800 1330295550_thumb.j

5- Time Series

post-152477-081491200 1330295850_thumb.j

6- Dynamic Chart

post-152477-072270300 1330296658_thumb.j

7- Polar Chart

post-152477-014082900 1330295422_thumb.j

أن شاء الله ساحاول اضافة رسوم أخرى في حال وجدت ما هو مناسب وضروري

بالتوفيق

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

شكرا جزيلا على هذا البرنامج الرائع

و لكن عندي مشكلة انو المكتبة (org.jfree) غير موجودة عندي في برنامج ال netbeans

كيف ممكن احصل عليها ؟

و جزاء الله كل خير

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

شكرا جزيلا على هذا البرنامج الرائع

و لكن عندي مشكلة انو المكتبة (org.jfree) غير موجودة عندي في برنامج ال netbeans

كيف ممكن احصل عليها ؟

و جزاء الله كل خير

عزيزي يجب عليك أن تضيف المكتبة بشكل يدوي الى الـ netbeans

وهذه المسألة سبق وتم مناقشتها في هذا الموضوع اضافة مكتبة

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

سأبدأ اليوم بأول درس من دروس المخططات التي تعتنمد مبدأ XY Dataset وسيكون درسنا الأول عن الرسومات البيانية الخطية XY Line Chart

فلنبدأ على بركة الله

وتوخياً للتسهيل سأعتمد في شرحي نفس الخطوات السابقة وسأكتب الأكواد بحيث تكون على نفس النمط للتسهيل والترغيب في تعلم المزيد

1- create a dataset


// create a dataset...
XYSeries series = new XYSeries("Average Weight");
series.add(0.0, 0.0);
series.add(20.0, 20.0);
series.add(40.0, 25.0);
series.add(55.0, 50.0);
series.add(70.0, 65.0);
XYSeriesCollection xyDataset = new XYSeriesCollection(series );

لاحظ هنا أننا اعتمدنا ما يسمى بالـ Series أي السلاسل أي سيتم تمثيل قيم الرسم وفق سلاسل متتابعة للأحداثيات (value(x,y حيث يتم تمثيل كل نقطة على المبدأ التالي (series.add(X, Y

نلاحظ هنا أننا نستطيع تمثيل النقطة (series.add(0.0, 0.0 أي الرسم من نقطة بداية الاحداصيات وهذا ما كان متعذرا في النوع السابق من الرسومات الخطية ولكن طبعا يجب ان نفرق بين استخدامات كل نوع

السطر الاخير من الكود

XYSeriesCollection xyDataset = new XYSeriesCollection(series);

مهمته جمع كل النقاط السابقة وتصمينها للكائن xyDataset الذي سيكون التعامل بالرسم معاه ويتم تمثيله في الخطوة التالية

2- create a chart لا جديد في هذه الخطوة فقط للتذكير

		// create a chart...
JFreeChart chart = ChartFactory.createXYLineChart(
"xyLine Chart Demo", // chart title
"Age", // domain axis label
"Weight", // range axis label
xyDataset, // data
PlotOrientation.VERTICAL, // orientation
true, // include legend
true, // tooltips?
false // URLs?
);

أيضا لا جديد في باقي الخطوات فلنعرض الكود كاملا ونرى الرسم الناتج


import java.awt.Dimension;

import org.jfree.chart.*;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.xy.*;
import org.jfree.data.*;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;


public class xyLine extends ApplicationFrame {

public xyLine(String title) {
super(title);

// create a dataset...
XYSeries series = new XYSeries("Average Weight");
series.add(0.0, 0.0);
series.add(20.0, 20.0);
series.add(40.0, 25.0);
series.add(55.0, 50.0);
series.add(70.0, 65.0);

XYSeriesCollection xyDataset = new XYSeriesCollection(series);


// create a chart...
JFreeChart chart = ChartFactory.createXYLineChart(
"xyLine Chart Demo", // chart title
"Age", // domain axis label
"Weight", // range axis label
xyDataset, // data
PlotOrientation.VERTICAL, // orientation
true, // include legend
true, // tooltips?
false // URLs?
);

// add the chart to a panel...
ChartPanel chartPanel = new ChartPanel(chart, false);
chartPanel.setPreferredSize(new Dimension(500, 270));
setContentPane(chartPanel);

}
/**
* Starting point for the demonstration application.
*
* @param args ignored.
*/
public static void main(String[] args) {
xyLine demo = new xyLine("xyLine Chart Demo");
demo.pack();
RefineryUtilities.centerFrameOnScreen(demo);
demo.setVisible(true);
}

}

post-152477-091393700 1331979752_thumb.j

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

في الدرس السابق تعرفنا على الـ XY Line Chart حيث يكون لدينا عدة نقاط (value(x,y يتم تمثيلهم في رسم خطي

لكن هل من الممكن أن يتم تمثيل أكثر من رسم خطي في شكل واحد ؟؟؟

بمعنى انه مثلا سأعمل مقارنة بين ثلاثة انواع من البيانات ورسم كل نوع رسم خطي مجتمعة مع بعضها البعض

طبعاً هذا ممكن وهذا ما أطلقت عليه اسم الـ MultixyLine

فلنبدأ على بركة الله

1- create a dataset


// create a dataset...
XYSeries series1 = new XYSeries("First");
series1.add(20.0, 20.0);
series1.add(40.0, 25.0);
series1.add(55.0, 50.0);
series1.add(70.0, 65.0);

XYSeries series2 = new XYSeries("Second");
series2.add(10.0, 18.0);
series2.add(30.0, 35.0);
series2.add(40.0, 56.0);
series2.add(66.0, 75.0);

XYSeries series3 = new XYSeries("Third");
series3.add(4.0, 22.0);
series3.add(35.0, 40.0);
series3.add(50.0, 66.0);
series3.add(60.0, 85.0);

XYSeriesCollection xyDataset = new XYSeriesCollection();
xyDataset.addSeries(series1);
xyDataset.addSeries(series2);
xyDataset.addSeries(series3);

قمنا بتمثيل ثلاثة سلاسل XYSeries كل واحدة فيها نقاط الاحداثيات المختلفة ليتم رسمها وهي على التوالي First, Second and Third

عن طريق الصنف XYSeriesCollection نقوم بعمل كائن نسميه xyDataset هذا الكائن سيتضمن بيانات النقاط الاحداثية للرسوم الخطية الثلاثة

2- create a chart

		// create a chart...
JFreeChart chart = ChartFactory.createXYLineChart(
"xyLine Chart Demo", // chart title
"X", // domain axis label
"Y", // range axis label
xyDataset, // data
PlotOrientation.VERTICAL, // orientation
true, // include legend
true, // tooltips?
false // URLs?
);

3- add the chart to a panel


// add the chart to a panel...
ChartPanel chartPanel = new ChartPanel(chart, false);
chartPanel.setPreferredSize(new Dimension(500, 270));
setContentPane(chartPanel);

4- Extras and the modifications وهنا سنقوم بعض الشروحات

أولاً: تحديد لون الخلفية الخارجية

			//1- set colors for External background  
chart.setBackgroundPaint(Color.lightGray);

ثانياً: تحديد لون الخلفية الداخلية

			//2- set colors for Internal background
XYPlot plot = chart.getXYPlot();
plot.setBackgroundPaint(Color.white);

ثالثاً. تثبيت وتحديد لون الخطوط داخل الخلفية الداخلية حيث يتم الرسم

	       //3- set colors for grid lines
plot.setRangeGridlinePaint(Color.black); // Horizontal grid lines
plot.setDomainGridlinePaint(Color.black); // Vertical grid lines

رابعاً: تغيير ألوان الخطوط التي سيتم رسمها

			//4 - set colors for renderer
XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer();
renderer.setSeriesPaint(0, Color.green);// color of first Line
renderer.setSeriesPaint(1, Color.red);// color of second Line
renderer.setSeriesPaint(2, Color.blue); // color of third Line
plot.setRenderer(renderer);

خامساً: لتحديد هل هناك نقاط سيتم رسمها داخل الخط لتحدد كل نقطة (value(x,y

وهل سيتم النقاط مع الخط البياني أم فقط الخط البياني أم فقط النقاط

	        //5- Shapes 6 Lines Visibility 
renderer.setSeriesLinesVisible(1, true); // to remove the Line just if (false)
renderer.setSeriesShapesVisible(0, false); // to remove the shapes if (false)
renderer.setSeriesShapesVisible(1, false);
renderer.setSeriesShapesVisible(2, false);

لنقم بشيء من التفصيل عن هذه الخاصية

        renderer.setSeriesLinesVisible(1, true); // to remove the Line just if (false)

في حال كانت القيمة تساوي true عندئذ فهذا معناه أظهر كل الخطوط لكل الفئات أي للؤرسوم الخطية الثلاثة(وهذا هو الامر الافتراضي فيما لو تجاهلنا كتابة هذا الأمر)

لكن لو كانت القيمة false عندئذ سيتم اخفاء الخط الممثل بالقيم المرافقة لـ false وهنا كانت القيمة 1 أي ان الخط الثاني لن يظهر في الرسم على اعتبار أننا نبدأ من القيمة 0

	        renderer.setSeriesShapesVisible(0, false); // to remove the shapes if (false)

اذا كانت القيمة false فعنذ سيتم رسم الخط البياني فقط وبدون أي نقاط لتحديد مكان النقاط وفق قيمة (value(x,y

لكن اذا كانت القيمة true عند اذ سيتم رسم هذه النقاط

لنأخذ المثال التالي ونرى النتيجة :

	        renderer.setSeriesLinesVisible(1, true); // to remove the Line just if (false)
renderer.setSeriesShapesVisible(0, false); // to remove the shapes if (false)
renderer.setSeriesShapesVisible(1, true);
renderer.setSeriesShapesVisible(2, false);

لاحظ فقط الخط البياني الثاني سيتم تمثيل نقاط معه أما الاول الوثالث فسيتم رسم الخط البياني لكليهما دون النقاط

post-152477-065654500 1332004368_thumb.j

الكود النهائي



import java.awt.Color;
import java.awt.Dimension;

import org.jfree.chart.*;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.xy.*;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;


public class MultixyLine extends ApplicationFrame {

public MultixyLine(String title) {
super(title);

// create a dataset...
XYSeries series1 = new XYSeries("First");
series1.add(20.0, 20.0);
series1.add(40.0, 25.0);
series1.add(55.0, 50.0);
series1.add(70.0, 65.0);

XYSeries series2 = new XYSeries("Second");
series2.add(10.0, 18.0);
series2.add(30.0, 35.0);
series2.add(40.0, 56.0);
series2.add(66.0, 75.0);

XYSeries series3 = new XYSeries("Third");
series3.add(4.0, 22.0);
series3.add(35.0, 40.0);
series3.add(50.0, 66.0);
series3.add(60.0, 85.0);

XYSeriesCollection xyDataset = new XYSeriesCollection();
xyDataset.addSeries(series1);
xyDataset.addSeries(series2);
xyDataset.addSeries(series3);

// create a chart...
JFreeChart chart = ChartFactory.createXYLineChart(
"xyLine Chart Demo", // chart title
"X", // domain axis label
"Y", // range axis label
xyDataset, // data
PlotOrientation.VERTICAL, // orientation
true, // include legend
true, // tooltips?
false // URLs?
);

// add the chart to a panel...
ChartPanel chartPanel = new ChartPanel(chart, false);
chartPanel.setPreferredSize(new Dimension(500, 270));
setContentPane(chartPanel);


// Extras and the modifications...

//1- set colors for External background
chart.setBackgroundPaint(Color.lightGray);

//2- set colors for Internal background
XYPlot plot = chart.getXYPlot();
plot.setBackgroundPaint(Color.white);

//3- set colors for grid lines
plot.setRangeGridlinePaint(Color.black); // Horizontal grid lines
plot.setDomainGridlinePaint(Color.black); // Vertical grid lines

//4 - set colors for renderer
XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer();
renderer.setSeriesPaint(0, Color.green);// color of first Line
renderer.setSeriesPaint(1, Color.red);// color of second Line
renderer.setSeriesPaint(2, Color.blue); // color of third Line
plot.setRenderer(renderer);

//5- Shapes 6 Lines Visibility
renderer.setSeriesLinesVisible(1, true); // to remove the Line just if (false)
renderer.setSeriesShapesVisible(0, false); // to remove the shapes if (false)
renderer.setSeriesShapesVisible(1, true);
renderer.setSeriesShapesVisible(2, false);

//6- Change the auto tick unit selection to integer units only...
NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());


}
/**
* Starting point for the demonstration application.
*
* @param args ignored.
*/
public static void main(String[] args) {
MultixyLine demo = new MultixyLine("xyLine Chart Demo");
demo.pack();
RefineryUtilities.centerFrameOnScreen(demo);
demo.setVisible(true);
}

}

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

سأكمل اليوم دروس المخططات التي تعتمد مبدأ XY Dataset وسيكون درسنا اليوم عن الرسومات البيانية الخطية XY Area Chart

وسأطبق نفس المثال الذي قمنا بتطبيقه في درس الرسوم الخطية XY Line Chart بنفس الارقام والعبارات لكن هذه المرة على الـ XY Area Chart

وفي نهاية الدرس أرجو ان تشغل البرنامج وتقارن بين نتيجة الرسمين وانظر كيف انهما طبق الاصل لكن باختلاف بسيط

فلنبدأ على بركة الله

1- create a dataset


// create a dataset...
XYSeries series = new XYSeries("Average Weight");
series.add(0.0, 0.0);
series.add(20.0, 20.0);
series.add(40.0, 25.0);
series.add(55.0, 50.0);
series.add(70.0, 65.0);
XYDataset xyDataset = new XYSeriesCollection(series);

جرى شرحها في الدروس السابقة لكن ما يهمني هنا الخطوة التالية

2- create a chart

           // create a chart...
JFreeChart chart = ChartFactory.createXYAreaChart(
"xyArea Chart Demo", // chart title
"Age", // domain axis label
"Weight", // range axis label
xyDataset, // data
PlotOrientation.VERTICAL, // orientation
true, // include legend
true, // tooltips?
false // URLs?
);

لاحظ أنه هنا الأمر برسم مخططات المساحة التي تعتمد مبدأ الـ XY وفق الأمر createXYAreaChart

لا جديد في باقي الخطوات فهي تكرير لكل ما سبق اترككم مع الكود والنتيجة


import java.awt.Dimension;
import org.jfree.chart.*;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.xy.*;
import org.jfree.data.*;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;


public class xyAreaChart extends ApplicationFrame {

public xyAreaChart(String title) {
super(title);

// create a dataset...
XYSeries series = new XYSeries("Average Weight");
series.add(0.0, 0.0);
series.add(20.0, 20.0);
series.add(40.0, 25.0);
series.add(55.0, 50.0);
series.add(70.0, 65.0);

XYDataset xyDataset = new XYSeriesCollection(series);

// create a chart...
JFreeChart chart = ChartFactory.createXYAreaChart(
"xyLine Chart Demo", // chart title
"Age", // domain axis label
"Weight", // range axis label
xyDataset, // data
PlotOrientation.VERTICAL, // orientation
true, // include legend
true, // tooltips?
false // URLs?
);

// add the chart to a panel...
ChartPanel chartPanel = new ChartPanel(chart, false);
chartPanel.setPreferredSize(new Dimension(500, 270));
setContentPane(chartPanel);

}
/**
* Starting point for the demonstration application.
*
* @param args ignored.
*/
public static void main(String[] args) {
xyAreaChart demo = new xyAreaChart("xyArea Chart Demo");
demo.pack();
RefineryUtilities.centerFrameOnScreen(demo);
demo.setVisible(true);
}
}

post-152477-073389800 1333391004_thumb.j

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

مشكور اخي الكريم ؛ بارك الله فيك

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .