أقوم مؤخرًا بتصميم دورة تدريبية حول استخراج البيانات، ولست بحاجة لعرض نتائج تحليل البيانات للمستخدمين بشكل بديهي، وهذا يتطلب استخدام مخططات إحصاءات البيانات لتحقيق هذه الوظيفة، أحتاج إلى عدة حزم تابعة لجهات خارجية:
1.jfreechart-1.0.13.jar
2.jcommon-1.0.16.jar
3.gnujaxp.jar
دعونا نلقي نظرة على العرض النهائي:
بشكل رئيسي jfreechart-1.0.13.jar، ولكن يجب أن تكون هذه الحزم الثلاث كاملة. لقد قمت بضغط وتحميل جميع حزم jar المتعلقة بـ jfreechart مع المشروع (الكود) الخاص بالمثال في هذه المقالة. يمكن للطلاب المهتمين تنزيله.
عنوان التنزيل: http://download.csdn.net/detail/pzhtpf/4327700
بعد ذلك، نقوم بتنفيذ هذا البرنامج خطوة بخطوة.
1. في أعمال التحضير الأولية، تمت إضافة حزم الجهات الخارجية الثلاثة هذه إلى مشروع هذه المقالة. لقد كتبت مدونة من قبل حول كيفية قراءة البيانات في جداول Excel باستخدام Java (يمكن للطلاب المهتمين ذلك). ألقِ نظرة: http://blog.csdn.net/pzhtpf/article/details/7506135)، تحتاج أيضًا إلى إضافة حزم الطرف الثالث، وعملية الإضافة هي نفسها تمامًا هنا:
1. إنشاء مشروع جافا وإنشاء مجلد جديد lib في هذا المشروع؛
2. انسخ حزم الجرة الثلاث المذكورة أعلاه إلى lib
3. ثم انقر بزر الماوس الأيمن فوق مشروع Java وحدد خصائص
4. حدد Java Build Path في القائمة الموجودة على اليسار والمكتبات على اليمين.
5. انقر فوق إضافة JARs
6. ثم حدد الجرار الثلاثة في مجلد lib الخاص بهذا المشروع وانقر فوق "موافق".
بعد النجاح، سيكون هناك مجلد إضافي في المشروع: المكتبات المرجعية
2. كود جافا لتنفيذ المخطط العمودي:
import java.awt.Font; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.CategoryAxis; import org.jfree.chart.plot.CategoryPlot; org.jfree.chart.plot.PlotOrientation; import org.jfree.data.category.CategoryDataset; import org.jfree.data.category.DefaultCategoryDataset; مخطط JFreeChart = ChartFactory.createBarChart3D( "الفاكهة"، // عنوان المخطط "نوع الفاكهة"، // عرض تسمية محور الكتالوج "الكمية"، // عرض تسمية مجموعة بيانات المحور العددي، // مجموعة البيانات PlotOrientation.VERTICAL، // اتجاه الرسم البياني: أفقي، عمودي صحيح , // ما إذا كان سيتم عرض وسيلة الإيضاح (يجب أن تكون خاطئة لمخطط شريطي بسيط) أم لا، // ما إذا كان سيتم إنشاء أدوات خطأ // ما إذا كان سيتم إنشاء روابط URL أم لا؛ // ابدأ CategoryPlot من هنا مؤامرة=chart.getCategoryPlot();// احصل على كائن منطقة المخطط CategoryAxis domainAxis=plot.getDomainAxis(); // القائمة السفلية الأفقية domainAxis.setLabelFont(new Font("黑体",Font.BOLD,14)); العنوان الأفقي السفلي domainAxis.setTickLabelFont(new Font("宋体",Font.BOLD,12)); // العنوان العمودي ValueAxis rangeAxis=plot.getRangeAxis(); // احصل على rangeAxis.setLabelFont(new Font("黑体",Font.BOLD,15)); Chart.getLegend().setItemFont(new Font("黑体" , Font.BOLD, 15)); Chart.getTitle().setFont(new Font("宋体",Font.BOLD,20));// قم بتعيين خط العنوان// ينتهي هذا هنا على الرغم من أن الكود كبير بعض الشيء، إلا أنه مخصص لغرض واحد فقط، وهو حل مشكلة الأحرف الصينية المشوهةframe1 =new ChartPanel(chart,true); // يمكن أيضًا استخدام ChartFrame هنا، والذي يمكنه إنشاء إطار مستقل مباشرةً } public static CategoryDataset getDataSet() { DefaultCategoryDataset dataset = new DefaultCategoryDataset(); dataset.addValue(100, "Beijing", "Apple"); dataset.addValue(100, "Shanghai", "Apple"); dataset.addValue(100, "Guangzhou", "Apple"); ، "بكين"، "كمثرى")؛ dataset.addValue(200، "Shanghai"، "Pear")؛ "Pear"); dataset.addValue(300, "Beijing", "Grape"); dataset.addValue(300, "Shanghai", "Grape"); dataset.addValue(400, "Beijing", "Banana"); dataset.addValue(400, "Shanghai", "Banana"); dataset.addValue(400, "Guangzhou", "Banana"); dataset.addValue(500, "Beijing", "Litchi"); dataset.addValue(500, "Shanghai", "Litchi"); dataset.addValue(500, "Guangzhou", "Litchi"); إرجاع مجموعة البيانات } public ChartPanel getChartPanel(){ returnframe1 } } الاداءات هي كما يلي:
لكن بعد أن نغير البيانات في طريقة CategoryDataset getDataSet(){} الخاصة الثابتة، سيتشكل تأثير آخر، على سبيل المثال، نغيره إلى:
public static CategoryDataset getDataSet() { DefaultCategoryDataset dataset = new DefaultCategoryDataset(); dataset.addValue(100, "Apple", "Apple"); dataset.addValue(200, "Pear", "dataset.addValue(300). ، "عنب"، "عنب")؛ dataset.addValue(400، "Banana"، "Banana")؛ dataset.addValue(500, "Litchi", "Litchi");الاداءات هي كما يلي:
ثلاثة كود جافا لتنفيذ المخطط الدائري:
package com.njue.testJFreeChart; import java.awt.Font; import java.text.DecimalFormat; import java.text.NumberFormat; import javax.swing.JPanel; استيراد org.jfree.chart.JFreeChart; org.jfree.chart.labels.StandardPieSectionLabelGenerator; import org.jfree.chart.plot.PiePlot; import org.jfree.data.general.DefaultPieDataset; ؛ مخطط JFreeChart = ChartFactory.createPieChart3D("Fruit Yield",data,true,false,false); // اضبط النسبة المئوية PiePlotpieplot = (PiePlot) Chart.getPlot(); = new DecimalFormat("0.00%"); كائن DecimalFormat، يقوم بشكل أساسي بتعيين المشكلات العشرية NumberFormat nf = NumberFormat.getNumberInstance();// احصل على كائن NumberFormat StandardPieSectionLabelGenerator sp1 = new StandardPieSectionLabelGenerator("{0} {2}"، nf، df);// احصل على كائن StandardPieSectionLabelGeneratorpieplot.setLabelGenerator(sp1);// قم بتعيين النسبة المئوية لعرض المخطط الدائري // المحتوى المعروض عند عدم وجود بياناتpieplot.setNoDataMessage("لا توجد بيانات معروضة"); ); pieplot.setIgnoreNullValues(true);//تعيين عدم عرض القيم الفارغة pieplot.setIgnoreZeroValues(true);//تعيين عدم عرض القيم السلبية frame1=new ChartPanel (chart,true); setFont(new Font(" Song Dynasty",Font.BOLD,20));// قم بتعيين خط العنوان PiePlotpiePlot= (PiePlot) Chart.getPlot();// احصل على كائن منطقة المخططpiePlot.setLabelFont(new Font("宋体",Font.BOLD,10));//حل الأحرف المشوهة Chart.getLegend().setItemFont(new Font("黑体" ", Font.BOLD,10)); } Private static DefaultPieDataset getDataSet() { DefaultPieDataset dataset = new DefaultPieDataset(); dataset.setValue("apple",100); dataset.setValue("pear",200); dataset.setValue("grape",300); " "،500)؛ إرجاع مجموعة البيانات } public ChartPanel getChartPanel(){ returnframe1 } } الاداءات هي كما يلي:
4. كود جافا لتنفيذ المخطط الخطي:
package com.njue.testJFreeChart; import java.awt.Font; import java.text.SimpleDateFormat; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartPanel; استيراد.jfree.chart.axis.DateAxis org.jfree.chart.axis.ValueAxis; import org.jfree.chart.plot.XYPlot; import org.jfree.data.time.Month; import org.jfree.data.time.TimeSeries; time.TimeSeriesCollection; import org.jfree.data.xy.XYDataset; public class TimeSeriesChart { ChartPanelframe1; TimeSeriesChart(){ ) jfreechart.getPlot(); DateAxis dateaxis = (DateAxis) xyplot.getDomainAxis(); dateaxis.setDateFormatOverride(new SimpleDateFormat("MMM-yyyy"));frame1=new ChartPanel(jfreechart,true dateaxis.setLabelFont(new Font("黑体",Font.BOLD,14)); // العنوان السفلي الأفقي dateaxis.setTickLabelFont(new Font("宋体",Font.BOLD,12)); // العنوان العمودي ValueAxis rangeAxis=xyplot.getRangeAxis(); // احصل على rangeAxis.setLabelFont(new Font("黑体",Font.BOLD,15)); jfreechart.getLegend().setItemFont(new Font("黑体", Font.BOLD, 15)); jfreechart.getTitle().setFont(new Font("宋体",Font.BOLD,20));// تعيين خط العنوان} Private static XYDataset createDataset() { // مجموعة البيانات هذه كثيرة بعض الشيء، لكنها كذلك ليس من الصعب فهم TimeSeries timeseries = new TimeSeries("legal & public Index Trust", org.jfree.data.time.Month.class); timeseries.add(new Month(2, 2001), 181.80000000000001D); timeseries.add(new Month(3, 2001), 167.30000000000001D); 167.59999999999999D); timeseries.add(new Month(6, 2001), 158.80000000000001D); timeseries.add(new Month(7, 2001), 148.30000000000001D); 153.9000000000001D); timeseries.add(new Month(9, 2001), 142.69999999999999D); timeseries.add(new Month(10, 2001), 123.2D); 131.8000000000001D); timeseries.add(new Month(12, 2001), 139.59999999999999D); timeseries.add(new Month(1, 2002), 142.90000000000001D); 138.69999999999999D); timeseries.add(new Month(3, 2002), 137.30000000000001D); 139.8000000000001D); timeseries.add(new Month(6, 2002), 137D); timeseries.add(new Month(7, 2002), 132.80000000000001D); org.jfree.data.time.Month.class); timeseries1.add(new Month(2, 2001), 129.599999999999D); timeseries1.add(new Month(3, 2001), 123.2D); timeseries1.add(new Month(3, 2001), 123.2D) Month(4, 2001), 117.2D); timeseries1.add(new Month(5, 2001), 124.09999999999999D); timeseries1.add(new Month(6, 2001), 122.599999999999D); timeseries1.add(new Month(7, 2001), 119.2D); 8، 2001)، 116.5D); timeseries1.add(new Month(9, 2001), 112.7D); timeseries1.add(new Month(10, 2001), 101.5D timeseries1.add(new Month(11, 2001), 106.099999999999D); ); timeseries1.add(new Month(12, 2001)، 110.3D)؛ timeseries1.add(new Month(1, 2002), 111.7D); timeseries1.add(new Month(2, 2002), 111D); 109.5999999999999D); timeseries1.add(new Month(4, 2002), 113.2D); timeseries1.add(new Month(5, 2002), 111.59999999999999D); timeseries1.add(new Month(6, 2002), 108.8D); 7، 2002)، 101.59999999999999D); TimeSeriesCollection timeseriescollection = new TimeSeriesCollection(); timeseriescollection.addSeries(timeseries);الاداءات هي كما يلي:
دعونا نلقي نظرة على الطريقة الرئيسية:
import java.awt.GridLayout; import javax.swing.JFrame; public class mainClass { public static void main(String args[]){ JFrameframe=new JFrame("Java Data Chart"); ,2,10,10));frame.add(new BarChart().getChartPanel()); // إضافة مخطط شريطيframe.add(new BarChart1().getChartPanel()); // إضافة تأثير آخر للمخطط العموديframe.add(new PieChart().getChartPanel()); // إضافة مخطط دائريframe.add(new TimeSeriesChart().getChartPanel ()); // أضف مخططًا خطيًاframe.setBounds(50, 50, 800, 600); ملخص الخمس
ما ورد أعلاه هو مثال بسيط للتنفيذ. يمكن للطلاب الذين يريدون معرفة المزيد التحقق من المعلومات بأنفسهم. في الواقع، من السهل فهم الرموز المذكورة أعلاه، طالما أنك تجمع بين وضعك الفعلي، فيمكنك تطوير التطبيق الخاص بك يمكنك أن ترى أن هذا يتم تنفيذه على التطبيق، وفي الواقع، يتم استخدام المزيد من المخططات الإحصائية على JavaWeb، ويمكنك أيضًا التعرف عليها بنفسك.