jfreechart画折线图的方法

2025-05-29 0 95

jfreechart 是开放源代码站点sourceforge.net 上的一个 java 项目,它主要用来各种各样的图表,这些图表包括:饼图、柱状图 ( 普通柱状图以及堆栈柱状图 )、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。

应用jfreechart来画图需要两个jar包:jfreechart.jar和jcommon.jar,下载地址。

下面是一个画折线图的例子:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187
package yuth.jfree.demo;

/**

* 使用 categorydataset 数据集创建折线图

* 当数据多时,在jpanel中无法完全看到横坐标的值,显示为省略号。

* 解决方法:

* 方法1、将报表保存为图片时,设置图片的宽度足够大(2000或3000),图片可以显示横坐标值。

* 这种方法治标不治本,所以有了第2种方法

* 方法2、设置x轴上的lable让其45度倾斜。

*/

import java.awt.basicstroke;

import java.awt.color;

import java.awt.dimension;

import java.awt.font;

import java.awt.geom.ellipse2d;

import java.io.file;

import java.io.ioexception;

import java.net.url;

import java.text.decimalformat;

import java.util.random;

import javax.swing.imageicon;

import javax.swing.jpanel;

import org.jfree.chart.chartfactory;

import org.jfree.chart.chartpanel;

import org.jfree.chart.chartutilities;

import org.jfree.chart.jfreechart;

import org.jfree.chart.axis.categoryaxis;

import org.jfree.chart.axis.categorylabelpositions;

import org.jfree.chart.axis.numberaxis;

import org.jfree.chart.labels.standardcategoryitemlabelgenerator;

import org.jfree.chart.plot.categoryplot;

import org.jfree.chart.plot.plotorientation;

import org.jfree.chart.renderer.category.lineandshaperenderer;

import org.jfree.chart.title.texttitle;

import org.jfree.data.category.categorydataset;

import org.jfree.data.category.defaultcategorydataset;

import org.jfree.ui.applicationframe;

import org.jfree.ui.horizontalalignment;

import org.jfree.ui.rectangleedge;

import org.jfree.ui.rectangleinsets;

import org.jfree.ui.refineryutilities;

public class linechartdemo1 extends applicationframe {

private static final long serialversionuid = -6354350604313079793l;

/* synthetic */static class class$demo$linechartdemo1;

public linechartdemo1(string string) {

super(string);

jpanel jpanel = createdemopanel();

jpanel.setpreferredsize(new dimension(500, 270));

setcontentpane(jpanel);

}

/**

* 如何区分不同的图例:根据defaultcategorydataset.addvalue()的第二个参数是否相同来区分。

* 同一个图例的数据的添加顺序影响最终的显示;不同图例的数据的添加顺序不影响最终的显示。

* @return

*/

private static categorydataset createdataset() {

defaultcategorydataset defaultcategorydataset = new defaultcategorydataset();

//defaultcategorydataset.addvalue()的参数解析:(数值,图例名,横坐标值)

/*

//添加数据方法1

//图例1

defaultcategorydataset.addvalue(212.0, "first", "1001.0");

defaultcategorydataset.addvalue(504.0, "first", "1001.1");

defaultcategorydataset.addvalue(1520.0, "first", "1001.2");

//图例2

defaultcategorydataset.addvalue(712.0, "second", "1001.0");

defaultcategorydataset.addvalue(1204.0, "second", "1001.1");

defaultcategorydataset.addvalue(1820.0, "second", "1001.2");

/*/

//*

//添加数据方法2

//实验随机数来生成测试结果

random random = new random(12345);

//图例1,40个数据

for(int i=0;i<40;i++){

defaultcategorydataset.addvalue(random.nextint(100000),

"first",string.valueof(1000+i) );

}

//图例2,40个数据

for (int i = 0; i < 40; i++) {

defaultcategorydataset.addvalue(random.nextint(100000),

"second", string.valueof(1000 + i));

}

//*/

return defaultcategorydataset;

}

private static jfreechart createchart(categorydataset categorydataset) {

jfreechart jfreechart = chartfactory.createlinechart(

"jfreechart test",// 图表标题

"x", // 主轴标签(x轴)

"y",// 范围轴标签(y轴)

categorydataset, // 数据集

plotorientation.vertical,// 方向

false, // 是否包含图例

true, // 提示信息是否显示

false);// 是否使用urls

// 改变图表的背景颜色

jfreechart.setbackgroundpaint(color.white);

categoryplot categoryplot = (categoryplot) jfreechart.getplot();

categoryplot.setbackgroundpaint(color.lightgray);

categoryplot.setrangegridlinepaint(color.white);

categoryplot.setrangegridlinesvisible(false);

//修改范围轴。 我们将默认刻度值 (允许显示小数) 改成只显示整数的刻度值。

numberaxis numberaxis = (numberaxis) categoryplot.getrangeaxis();

numberaxis.setstandardtickunits(numberaxis.createintegertickunits());

// 设置x轴上的lable让其45度倾斜

categoryaxis domainaxis = categoryplot.getdomainaxis();

domainaxis.setcategorylabelpositions(categorylabelpositions.up_45); // 设置x轴上的lable让其45度倾斜

domainaxis.setlowermargin(0.0); // 设置距离图片左端距离

domainaxis.setuppermargin(0.0); // 设置距离图片右端距离

lineandshaperenderer lineandshaperenderer = (lineandshaperenderer) categoryplot

.getrenderer();

lineandshaperenderer.setshapesvisible(true);

lineandshaperenderer.setdrawoutlines(true);

lineandshaperenderer.setusefillpaint(true);

lineandshaperenderer.setbasefillpaint(color.white);

lineandshaperenderer.setseriesstroke(0, new basicstroke(3.0f));

lineandshaperenderer.setseriesoutlinestroke(0, new basicstroke(2.0f));

lineandshaperenderer.setseriesshape(0, new ellipse2d.double(-5.0, -5.0,

10.0, 10.0));

lineandshaperenderer.setitemmargin(0.4); //设置x轴每个值的间距(不起作用??)

// 显示数据值

decimalformat decimalformat1 = new decimalformat("##.##");// 数据点显示数据值的格式

lineandshaperenderer.setbaseitemlabelgenerator(new standardcategoryitemlabelgenerator(

"{2}", decimalformat1));// 设置数据项标签的生成器

lineandshaperenderer.setbaseitemlabelsvisible(true);// 基本项标签显示

lineandshaperenderer.setbaseshapesfilled(true);// 在数据点显示实心的小图标

return jfreechart;

}

public static jpanel createdemopanel() {

jfreechart jfreechart = createchart(createdataset());

try {

chartutilities.savechartasjpeg(

new file("d:/linechartdemo1.png"), //文件保存物理路径包括路径和文件名

// 1.0f, //图片质量 ,0.0f~1.0f

jfreechart, //图表对象

1024, //图像宽度 ,这个将决定图表的横坐标值是否能完全显示还是显示省略号

768);

} catch (ioexception e) {

// todo auto-generated catch block

e.printstacktrace();

} //图像高度

return new chartpanel(jfreechart);

}

public static void main(string[] strings) {

linechartdemo1 linechartdemo1 = new linechartdemo1(

"jfreechart - line chart demo 1");

linechartdemo1.pack();

refineryutilities.centerframeonscreen(linechartdemo1);

linechartdemo1.setvisible(true);

}

/* synthetic */

static class class$(string string) {

class var_class;

try {

var_class = class.forname(string);

} catch (classnotfoundexception classnotfoundexception) {

throw new noclassdeffounderror(classnotfoundexception.getmessage());

}

return var_class;

}

}

运行结果:

jfreechart画折线图的方法

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持快网idc。

原文链接:https://blog.csdn.net/yuhentian/article/details/20213191

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 jfreechart画折线图的方法 https://www.kuaiidc.com/111377.html

相关文章

发表评论
暂无评论