分享

jfreechart简单介绍3

 桑枯海 2013-04-25

摘要:前两节介绍了jfreechart的条形图、饼图,本节主要介绍jfreechart的曲线图。

本节主要是用jfreechart包中自带的gui相关的类,实现曲线图GUI的简单效果。

preparation

class

ApplicationFrame类:

RefineryUtilities类:

ChartPanel类:

method

setContentPane()

由于网络原因,用到的类和方法的详细介绍,在后面补充上。

start

曲线图
  1 package line;
2
3 import org.jfree.chart.ChartFactory;
4 import org.jfree.chart.ChartPanel;
5 import org.jfree.chart.title.TextTitle;
6 import org.jfree.data.time.TimeSeries;
7 import org.jfree.data.time.Month;
8 import org.jfree.data.time.TimeSeriesCollection;
9 import org.jfree.chart.plot.XYPlot;
10 import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
11 import java.awt.Color;
12 import org.jfree.ui.RectangleInsets;
13 import java.awt.Font;
14 import org.jfree.chart.renderer.xy.XYItemRenderer;
15 import org.jfree.chart.JFreeChart;
16 import org.jfree.chart.labels.*;
17 import org.jfree.ui.*;
18 import java.awt.*;
19 import java.text.*;
20 import javax.swing.JPanel;
21 import org.jfree.chart.axis.DateAxis;
22 import org.jfree.chart.axis.ValueAxis;
23 import org.jfree.chart.axis.NumberAxis;
24
25 public class LineChart extends ApplicationFrame {
26
27 private static final long serialVersionUID = 1L;
28
29 // 测试的main方法,显示是以JPanel窗体的形式显示的
30 public static void main(String[] args) {
31 LineChart LineChart= new LineChart("曲线图");
32 LineChart.pack();
33 RefineryUtilities.centerFrameOnScreen(LineChart);
34 LineChart.setVisible(true);
35 }
36
37 public LineChart(String s) {
38 super(s);
39 setContentPane(createDemoLine());
40 }
41
42 // 生成显示图表的面板
43 public static JPanel createDemoLine() {
44 JFreeChart jfreechart = createChart(createDataset());
45 return new ChartPanel(jfreechart);
46 }
47
48 // 生成图表主对象JFreeChart
49 public static JFreeChart createChart(TimeSeriesCollection linedataset) {
50 JFreeChart chart = ChartFactory.createTimeSeriesChart("访问量统计时间线", "月份",
51 "访问量", linedataset, true, true, true);
52
53 // 设置消除字体的锯齿渲染(解决中文问题)
54 chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,
55 RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
56
57 // 设置主标题
58 chart.setTitle(new TextTitle("blog访问量统计", new Font("楷书", Font.ITALIC,
59 20)));
60 chart.setAntiAlias(true);
61 // 设置子标题
62 TextTitle subtitle = new TextTitle("2010/2011年度访问量对比", new Font("宋体",
63 Font.BOLD, 12));
64 chart.addSubtitle(subtitle);
65
66 XYPlot plot = (XYPlot) chart.getPlot();
67
68 XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer) plot
69 .getRenderer();
70
71 // 设置网格背景颜色
72 plot.setBackgroundPaint(Color.white);
73 // 设置网格竖线颜色
74 plot.setDomainGridlinePaint(Color.pink);
75 // 设置网格横线颜色
76 plot.setRangeGridlinePaint(Color.pink);
77 // 设置曲线与xy轴的距离
78 plot.setAxisOffset(new RectangleInsets(0D, 0D, 0D, 10D));
79 // 设置曲线是否显示数据点
80 xylineandshaperenderer.setBaseShapesVisible(true);
81 // 设置曲线显示各项数据点的值
82 XYItemRenderer xyitem = plot.getRenderer();
83 xyitem.setBaseItemLabelsVisible(true);
84 xyitem.setBasePositiveItemLabelPosition(new ItemLabelPosition(
85 ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_LEFT));
86 xyitem.setBaseItemLabelGenerator(new StandardXYItemLabelGenerator());
87 xyitem.setBaseItemLabelFont(new Font("Dialog", 1, 14));
88 plot.setRenderer(xyitem);
89
90 // 设置X轴日期显示的格式
91 SimpleDateFormat format = new SimpleDateFormat("yyyy/MM");
92 DateAxis axis = (DateAxis) plot.getDomainAxis();
93 axis.setDateFormatOverride(format);// 设置x轴数据单位以×年×月方式显示
94
95 ValueAxis valueAxis = plot.getDomainAxis();
96 // 设置x轴上面的字体
97 valueAxis.setTickLabelFont(new Font("隶书", Font.ITALIC, 12));
98 // 设置X轴的标题文字
99 valueAxis.setLabelFont(new Font("隶书", Font.ITALIC, 12));
100 NumberAxis numberAxis = (NumberAxis) plot.getRangeAxis();
101 // 设置y轴上的字体
102 numberAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 13));
103 // 设置y轴上的标题字体
104 numberAxis.setLabelFont(new Font("宋体", Font.PLAIN, 13));
105 // 设置底部的字体
106 chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12));
107
108 return chart;
109 }
110
111 // 生成数据
112 public static TimeSeriesCollection createDataset() {
113 // 访问量统计时间线
114 TimeSeries timeSeries1 = new TimeSeries("2010年度", Month.class);
115 TimeSeries timeSeries2 = new TimeSeries("2011年度", Month.class);
116
117 // 时间曲线数据集合
118 TimeSeriesCollection lineDataset = new TimeSeriesCollection();
119
120 // 构造数据集合
121 timeSeries1.add(new Month(1, 2011), 7200);
122 timeSeries1.add(new Month(2, 2011), 7000);
123 timeSeries1.add(new Month(3, 2011), 4200);
124 timeSeries1.add(new Month(4, 2011), 8200);
125 timeSeries1.add(new Month(5, 2011), 7300);
126 timeSeries1.add(new Month(6, 2011), 8200);
127 timeSeries1.add(new Month(7, 2011), 9200);
128 timeSeries1.add(new Month(8, 2011), 7300);
129 timeSeries1.add(new Month(9, 2011), 9400);
130 timeSeries1.add(new Month(10, 2011), 7500);
131 timeSeries1.add(new Month(11, 2011), 6600);
132 timeSeries1.add(new Month(12, 2011), 3500);
133 timeSeries2.add(new Month(1, 2011), 10200);
134 timeSeries2.add(new Month(2, 2011), 9000);
135 timeSeries2.add(new Month(3, 2011), 6200);
136 timeSeries2.add(new Month(4, 2011), 8200);
137 timeSeries2.add(new Month(5, 2011), 8200);
138 timeSeries2.add(new Month(6, 2011), 11200);
139 timeSeries2.add(new Month(7, 2011), 13200);
140 timeSeries2.add(new Month(8, 2011), 8300);
141 timeSeries2.add(new Month(9, 2011), 10400);
142 timeSeries2.add(new Month(10, 2011), 12500);
143 timeSeries2.add(new Month(11, 2011), 10600);
144 timeSeries2.add(new Month(12, 2011), 10500);
145
146 lineDataset.addSeries(timeSeries1);
147 lineDataset.addSeries(timeSeries2);
148
149 return lineDataset;
150 }
151
152 }

 

result

运行截图如下:

image

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多