您的位置:首页 > 其它

使用JFreeChart-创建折线图的小结(之CreateLineChart)

2013-04-23 00:00 405 查看
主要在创建折线图的时候一些总结:

首先对于折线图的创建有两种方法:

createLineChart

createXYLineChart

我们先介绍使用createLineChart来创建折线图

首先使用的dataset数据源的类是:DefaultCategoryDataset()

DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(212, "Classes", "JDK 1.0");
dataset.addValue(504, "Classes", "JDK 1.1");
dataset.addValue(1520, "Classes", "JDK 1.2");
dataset.addValue(1842, "Classes", "JDK 1.3");
dataset.addValue(2991, "Classes", "JDK 1.4");
dataset.addValue(3500, "Classes", "JDK 1.5");


使用的JFreeChart对象是ChartFactory.createLineChart()

JFreeChart chart = ChartFactory.createLineChart(
"Java Standard Class Library",   // chart title
null,                       // domain axis label
"Class Count",                   // range axis label
dataset,                         // data
PlotOrientation.VERTICAL,        // orientation
false,                           // include legend
true,                            // include tooltips
false                            // urls?
);


对于折线图的图表的定制

折线图拥有坐标轴的,所以也拥有了Axis类(子类)的方法。

首先对于折线图所使用的图表类:categoryPlot

CategoryPlot plot = (CategoryPlot) chart.getPlot();
plot.setBackgroundPaint(Color.lightGray);
plot.setRangeGridlinesVisible(false);
对于
categoryPlot的方法的扩展:

void setDataset(CategoryDataset dataset) 数据区的2维数据表
void setColumnRenderingOrder(SortOrder order) 数据分类的排序方式
void setAxisOffset(Spacer offset) 坐标轴到数据区的间距
void setOrientation(PlotOrientation orientation) 数据区的方向(PlotOrientation.HORIZONTAL或PlotOrientation.VERTICAL)
void setDomainAxis(CategoryAxis axis) 数据区的分类轴
void setDomainAxisLocation(AxisLocation location) 分类轴的位置(参数常量在org.jfree.chart.axis.AxisLocation类中定义)
void setDomainGridlinesVisible(boolean visible) 分类轴网格是否可见
void setDomainGridlinePaint(Paint paint) 分类轴网格线条颜色
void setDomainGridlineStroke(Stroke stroke) 分类轴网格线条笔触
void setRangeAxis(ValueAxis axis) 数据区的数据轴
void setRangeAxisLocation(AxisLocation location) 数据轴的位置(参数常量在org.jfree.chart.axis.AxisLocation类中定义)
void setRangeGridlinesVisible(boolean visible) 数据轴网格是否可见
void setRangeGridlinePaint(Paint paint) 数据轴网格线条颜色
void setRangeGridlineStroke(Stroke stroke) 数据轴网格线条笔触
void setRenderer(CategoryItemRenderer renderer) 数据区的表示者(详见Renderer组)
void addAnnotation(CategoryAnnotation annotation) 给数据区加一个注释
void addRangeMarker(Marker marker,Layer layer) 给数据区加一个数值范围区域

同样的,他也是plot的子类,也继承了plot的所有方法,之前已经写了plot的方法,就不贴出来了。

然后是对于坐标轴的操作

对于坐标轴,由于是要区分x轴和Y周(在不同的图表的叫法可能有所不同)。

对于x轴使用的类:CategoryAxis

CategoryAxis domainAxis = (CategoryAxis)plot.getDomainAxis();


对于Y的使用类:NumberAxis

NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
扩展:对于
CategoryAxis类的方法:

void setCategoryMargin(double margin) 分类轴边距
void setLowerMargin(double margin) 分类轴下(左)边距
void setUpperMargin(double margin) 分类轴上(右)边距
void setVerticalCategoryLabels(boolean flag) 分类轴标题是否旋转到垂直
void setMaxCategoryLabelWidthRatio(float ratio) 分类轴分类标签的最大宽度
扩展:对于
NumberAxis类的方法:

void setAutoRangeIncludesZero(boolean flag) 是否强制在自动选择的数据范围中包含0
void setAutoRangeStickyZero(boolean flag) 是否强制在整个数据轴中包含0,即使0不在数据范围中
void setNumberFormatOverride(NumberFormat formatter) 数据轴数据标签的显示格式
void setTickUnit(NumberTickUnit unit) 数据轴的数据标签(需要将AutoTickUnitSelection设false)

同样的,由于是Axis的子类,所有继承了Axis类的所有方法,对于NumberAxis是继承ValueAxis类,而ValueAxis是继承Axis类。

扩展:对于ValueAxis类

void setAutoRange(boolean auto)自动设置数据轴数据范围
void setAutoRangeMinimumSize(double size)自动设置数据轴数据范围时数据范围的最小跨度
void setAutoTickUnitSelection(boolean flag)数据轴的数据标签是否自动确定(默认为true)
void setFixedAutoRange(double length)数据轴固定数据范围(设置100的话就是显示MAXVALUE到MAXVALUE-100那段数据范围)
void setInverted(boolean flag)数据轴是否反向(默认为false)
void setLowerMargin(double margin)数据轴下(左)边距
void setUpperMargin(double margin)数据轴上(右)边距
void setLowerBound(double min)数据轴上的显示最小值
void setUpperBound(double max)数据轴上的显示最大值
void setPositiveArrowVisible(boolean visible)是否显示正向箭头(3D轴无效)
void setNegativeArrowVisible(boolean visible)是否显示反向箭头(3D轴无效)
void setVerticalTickLabels(boolean flag)数据轴数据标签是否旋转到垂直
void setStandardTickUnits(TickUnitSource source)数据轴的数据标签(可以只显示整数标签,需要将AutoTickUnitSelection设false)

扩展:对于Axis类

void setVisible(boolean flag) 坐标轴是否可见
void setAxisLinePaint(Paint paint) 坐标轴线条颜色(3D轴无效)
void setAxisLineStroke(Stroke stroke) 坐标轴线条笔触(3D轴无效)
void setAxisLineVisible(boolean visible) 坐标轴线条是否可见(3D轴无效)
void setFixedDimension(double dimension) (用于复合表中对多坐标轴的设置)
void setLabel(String label) 坐标轴标题
void setLabelFont(Font font) 坐标轴标题字体
void setLabelPaint(Paint paint) 坐标轴标题颜色
void setLabelAngle(double angle)` 坐标轴标题旋转角度(纵坐标可以旋转)
void setTickLabelFont(Font font) 坐标轴标尺值字体
void setTickLabelPaint(Paint paint) 坐标轴标尺值颜色
void setTickLabelsVisible(boolean flag) 坐标轴标尺值是否显示
void setTickMarkPaint(Paint paint) 坐标轴标尺颜色
void setTickMarkStroke(Stroke stroke) 坐标轴标尺笔触
void setTickMarksVisible(boolean flag) 坐标轴标尺是否显示


接着对于图片整体的渲染,使用到的类是:LineAndShapeRenderer

LineAndShapeRenderer renderer
= (LineAndShapeRenderer) plot.getRenderer();


对于各个节点的渲染,使用到的类是:AbstractCategoryItemRenderer

AbstractCategoryItemRenderer renderer = (AbstractCategoryItemRenderer)plot.getRenderer();

扩展:LineAndShapeRenderer类的方法

void setDrawLines(boolean draw) 是否折线的数据点之间用线连
void setDrawShapes(boolean draw) 是否折线的数据点根据分类使用不同的形状
void setShapesFilled(boolean filled) 所有分类是否填充数据点图形
void setSeriesShapesFilled(int series,boolean filled) 指定分类是否填充数据点图形
void setUseFillPaintForShapeOutline(boolean use) 指定是否填充数据点的Paint也被用于画数据点形状的边框

扩展:AbstractCategoryItemRenderer类的方法

void setLabelGenerator(CategoryLabelGenerator generator)数据标签的格式
void setToolTipGenerator(CategoryToolTipGenerator generator)MAP中鼠标移上的显示格式
void setItemURLGenerator(CategoryURLGenerator generator)MAP中钻取链接格式
void setSeriesLabelGenerator(int series,CategoryLabelGenerator generator)指定分类的数据标签的格式
void setSeriesToolTipGenerator(int series,CategoryToolTipGenerator generator)指定分类的MAP中鼠标移上的显示格式
void setSeriesItemURLGenerator(int series,CategoryURLGenerator generator)指定分类的MAP中钻取链接格式

由于AbstractCategoryItemRenderer继承了AbstractRenderer类

扩展:AbstractRenderer类的方法

void setItemLabelAnchorOffset(double offset)数据标签的与数据点的偏移
void setItemLabelsVisible(boolean visible)数据标签是否可见
void setItemLabelFont(Font font)数据标签的字体
void setItemLabelPaint(Paint paint)数据标签的字体颜色
void setItemLabelPosition(ItemLabelPosition position)数据标签位置
void setPositiveItemLabelPosition(ItemLabelPosition position)正数标签位置
void setNegativeItemLabelPosition(ItemLabelPosition position)负数标签位置
void setOutLinePaint(Paint paint)图形边框的线条颜色
void setOutLineStroke(Stroke stroke)图形边框的线条笔触
void setPaint(Paint paint)所有分类图形的颜色
void setShape(Shape shape)所有分类图形的形状(如折线图的点)
void setStroke(Stroke stroke)所有分类图形的笔触(如折线图的线)
void setSeriesItemLabelsVisible(int series,boolean visible)指定分类的数据标签是否可见
void setSeriesItemLabelFont(int series,Font font)指定分类的数据标签的字体
void setSeriesItemLabelPaint(int series,Paint paint)指定分类的数据标签的字体颜色
void setSeriesItemLabelPosition(int series,ItemLabelPosition position)数据标签位置
void setSeriesPositiveItemLabelPosition(int series,ItemLabelPosition position)正数标签位置
void setSeriesNegativeItemLabelPosition(int series,ItemLabelPosition position)负数标签位置
void setSeriesOutLinePaint(int series,Paint paint)指定分类的图形边框的线条颜色
void setSeriesOutLineStroke(int series,Stroke stroke)指定分类的图形边框的线条笔触
void setSeriesPaint(int series,Paint paint)指定分类图形的颜色
void setSeriesShape(int series,Shape shape)指定分类图形的形状(如折线图的点)
void setSeriesStroke(int series,Stroke stroke)指定分类图形的笔触(如折线图的线)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  JFreeChart