package com.web.warning.util;
import java.awt.Color;
import java.awt.Font;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.NumberTickUnit;
import org.jfree.chart.block.BlockBorder;
import org.jfree.chart.block.BlockContainer;
import org.jfree.chart.block.BorderArrangement;
import org.jfree.chart.block.LabelBlock;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYBarRenderer;
import org.jfree.chart.title.LegendTitle;
import org.jfree.data.time.Day;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.xy.IntervalXYDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.HorizontalAlignment;
import org.jfree.ui.RectangleEdge;
import org.uintec.util.DateUtil;
import com.web.finplan.util.CaiwuCommon;
public class XYBarChartDemo2 extends ApplicationFrame
{
private static final long serialVersionUID = 1L;
private static final Color WHITE_BACKGROUND = new Color(255,255,255);
private static final Color BLACK_BACKGROUND = new Color(173,173,173);
private static final Font FONT10 = new Font("宋体",10,10);
private static final Font FONT20 = new Font("宋体",20,20);
private static final Font FONT15 = new Font("宋体",15,15);
public XYBarChartDemo2(String paramString)
{
super(paramString);
}
/**
* 获取数据源
* @param nameList
* @param numberList
* @return
*/
private static IntervalXYDataset createDataset(List<String> nameList,List<Object> numberList)
{
int[] date = getDay3();
if(nameList!=null && numberList!=null && nameList.size()==numberList.size())
{
TimeSeriesCollection localTimeSeriesCollection = new TimeSeriesCollection();
for(int i=0;i<nameList.size();i++)
{
TimeSeries localTimeSeries = new TimeSeries(nameList.get(i));
localTimeSeries.add(new Day(date[0]+i, date[1], date[2]), CaiwuCommon.isNullDouble(numberList.get(i)));
localTimeSeriesCollection.addSeries(localTimeSeries);
}
return localTimeSeriesCollection;
}
return null;
}
/**
* 开始
* @param paramIntervalXYDataset
* @return
*/
private static JFreeChart createChart(IntervalXYDataset paramIntervalXYDataset,List<Color> colorList)
{
double highValue = Double.MIN_VALUE;// 设置数据当中的最大值
double minValue = Double.MAX_VALUE;// 设置数据当中的最小值
TimeSeriesCollection localTimeSeriesCollection = (TimeSeriesCollection) paramIntervalXYDataset;
for(int i=0;i<localTimeSeriesCollection.getSeriesCount();i++)////循环序列数
{
int seriesCount = localTimeSeriesCollection.getItemCount(i);
for(int j=0;j<seriesCount;j++)//循环柱子数量
{
if(highValue<localTimeSeriesCollection.getYValue(i, j))
highValue = localTimeSeriesCollection.getYValue(i, j);
if(minValue>localTimeSeriesCollection.getYValue(i, j))
minValue = localTimeSeriesCollection.getYValue(i, j);
}
}
JFreeChart jFreeChart = ChartFactory.createXYBarChart("即时涨跌幅", "", true, "", paramIntervalXYDataset, PlotOrientation.VERTICAL, true, true, false);//申明jfreechart对象
jFreeChart.getTitle().setPaint(BLACK_BACKGROUND);
jFreeChart.getTitle().setFont(FONT20);//头部标题字体,解决中文问题
LegendTitle legendtitle = new LegendTitle(jFreeChart.getPlot());
BlockContainer blockcontainer = new BlockContainer(new BorderArrangement());
blockcontainer.setBorder(new BlockBorder(1.0D, 1.0D, 1.0D, 1.0D));
LabelBlock labelblock = new LabelBlock("即时涨跌幅:", new Font("宋体", 1, 12));
labelblock.setPadding(5D, 5D, 5D, 5D);
blockcontainer.add(labelblock, RectangleEdge.TOP);
LabelBlock labelblock1 = new LabelBlock(DateUtil.date2String(new Date(), "yyyy-MM-dd"));
labelblock1.setPadding(8D, 20D, 2D, 5D);
blockcontainer.add(labelblock1, RectangleEdge.BOTTOM);
BlockContainer blockcontainer1 = legendtitle.getItemContainer();
blockcontainer1.setPadding(2D, 10D, 5D, 2D);
blockcontainer.add(blockcontainer1);
legendtitle.setWrapper(blockcontainer);
legendtitle.setPosition(RectangleEdge.RIGHT);
legendtitle.setHorizontalAlignment(HorizontalAlignment.LEFT);
jFreeChart.addSubtitle(legendtitle);
jFreeChart.getLegend().setVisible(false);//不显示系统生成的解释性语句
// jFreeChart.getLegend().setItemFont(FONT15);//底部标题字体,解决中文问题
// jFreeChart.getLegend().setPadding(50D, 15D, 50D, 15D);//设置解释性标题框的据窗体的高,据左,据上下,据右
// jFreeChart.getLegend().setPosition(RectangleEdge.RIGHT);//让 解释性标题 显示到窗体右边
XYPlot xyPlot = jFreeChart.getXYPlot();//创建画图布
xyPlot.setBackgroundPaint(WHITE_BACKGROUND);//设置面板背景色
xyPlot.setDomainGridlinesVisible(true);//设置Y轴线是否可以显示
xyPlot.setRangeGridlinesVisible(true);//设置X轴线是否可以显示
xyPlot.setRangeGridlinePaint(BLACK_BACKGROUND); //设置Y轴线的颜色
xyPlot.setDomainGridlinePaint(BLACK_BACKGROUND);//设置x轴线的颜色
//设置X轴
DateAxis x = (DateAxis)xyPlot.getDomainAxis();
x.setAutoRange(true);//X轴是否自动
x.setTickLabelFont(FONT10);
x.setTickLabelPaint(Color.red);
x.setTickLabelsVisible(false);//由于此图不需要X轴。所以设置为false
NumberAxis y = (NumberAxis)xyPlot.getRangeAxis();
y.setAutoRange(true);//X轴是否自动
y.setTickLabelFont(FONT10);
y.setTickLabelPaint(BLACK_BACKGROUND);
y.setRange(minValue-5,highValue+5);//设置Y轴范围
y.setTickUnit(new NumberTickUnit(5D, NumberFormat.getInstance()));//设置Y轴刻线密度
XYBarRenderer render = (XYBarRenderer)xyPlot.getRenderer();//用来设置每个柱子的属性
for(int i=0;i<colorList.size();i++)//设置颜色
{
render.setSeriesPaint(i,colorList.get(i));
}
render.setMargin(0.5);//柱子距离
ChartFrame frame = new ChartFrame("即时涨跌幅", jFreeChart);
// frame.setPreferredSize(new Dimension(400,500));
frame.pack();
frame.setVisible(true);
return jFreeChart;
}
/**
* 获取时间年月日
* @return
*/
public static int[] getDay3()
{
int[] date = new int[3];
Calendar canle = Calendar.getInstance();
int day = canle.get(Calendar.DATE);
int month = canle.get(Calendar.MONTH);
int year = canle.get(Calendar.YEAR)+1;
date[0] = day;
date[1] = month;
date[2] = year;
return date;
}
public static void main(String[] paramArrayOfString)
{
List<String> nameList = new ArrayList<String>();
nameList.add("股票");
nameList.add("基金");
nameList.add("债券");
nameList.add("黄金");
List<Object> numberList = new ArrayList<Object>();
numberList.add(10);
numberList.add(20);
numberList.add(-10);
numberList.add(-15);
List<Color> colorList = new ArrayList<Color>();
colorList.add(new Color(79,129,189));
colorList.add(new Color(192,80,77));
colorList.add(new Color(155,187,89));
colorList.add(new Color(128,100,162));
createChart(createDataset(nameList,numberList),colorList);
}
}
分享到:
相关推荐
综上所述,自定义JFreeChart柱状图涉及了数据准备、渲染器配置、外观调整、标签和提示信息等多个方面。通过深入理解这些知识点,开发者可以创建出满足各种需求的个性化柱状图。提供的文件如"JFreeChart中柱状图的...
它支持多种图表类型,如柱状图(Bar Chart)、饼状图(Pie Chart)和折线图(Line Chart),并且可以定制图表的各个方面,如颜色、标签、标题等。 1. **柱状图(Bar Chart)**: 柱状图是一种常用来比较不同类别...
根据提供的信息,我们可以总结出以下关于...综上所述,虽然 JFreeChart 可能没有直接提供柱状图排序的功能,但通过自定义数据处理和图表创建过程,完全可以实现这一需求。这种灵活性也是 JFreeChart 的一大优势所在。
**JFreeChart——柱状图与饼图详解** 在Java编程中,JFreeChart库是一个强大的图表绘制工具,它能够帮助开发者创建出多种类型的图表,包括柱状图、饼图等,广泛应用于数据分析和可视化展示。这篇博文中,我们将深入...
**JFreeChart 柱状图** JFreeChart 是一个流行的开源 Java 图形库,它提供了丰富的图表类型,包括柱状图、饼图、线图、散点图等,广泛应用于数据分析、报告生成以及可视化应用中。这个压缩包提供的源代码示例,展示...
"彩色柱状图示例", // 图表标题 "类别", // 类别轴标签 "值", // 值轴标签 dataset, // 数据集 PlotOrientation.VERTICAL, // 布局方向 true, // 显示图例 true, // 显示工具提示 false // 显示URL文本 ); ...
在这个主题中,我们将深入探讨"JFreeChart柱状图的类的封装",了解如何利用这个库来创建柱状图以及相关的类和工具。 首先,JFreeChart的核心类之一是`CategoryPlot`,它是柱状图的基础。`CategoryPlot`负责管理类别...
在Java编程环境中,JFreeChart库是一个非常强大的工具,它允许开发者轻松地创建各种图表,如柱状图、饼图、时序图和折线图等。这些图表在数据分析、报表展示以及各种可视化应用中非常常见。下面我们将详细介绍如何...
JFreeChart 是一个开源的Java库,用于生成高质量的2D图表,如折线图、饼图、柱状图和堆栈柱状图等。它广泛应用于数据分析、报告和应用程序中,提供丰富的自定义选项来满足各种视觉需求。在本项目中,你将找到能够...
### JFreeChart绘制统计分析柱状图详解 #### 一、引言 在现代数据分析领域,图表作为一种直观的视觉表达工具,在展现数据特征与趋势方面起着至关重要的作用。其中,柱状图作为最常见的图表类型之一,被广泛应用于...
标题明确指出本篇教程的目标是使用JFreeChart库生成一种特定类型的图表——3D变色单组柱状图。这里的关键信息包括: - **jfreechart**:一个Java图形绘制类库。 - **单组**:意味着图表只有一组数据系列。 - **3D**...
JFreeChart是一款强大的Java图表库,它允许开发者创建多种类型的2D和3D图表,包括折线图、柱状图、饼状图、散点图等,并且支持自定义样式和颜色,使得数据可视化变得更加直观和生动。在这个特定的场景中,我们将关注...
“利用JFreeChart实现Java中饼状图、柱状图等图表并在Jsp中显示”这个标题表明我们将探讨如何使用JFreeChart库来创建各种类型的图表,如饼状图和柱状图,并且这些图表能够在JavaServer Pages (JSP) 中展示。...
JFreeChart是一款强大的Java图表库,它允许开发者创建多种类型的高质量图表,如饼图、柱状图、线形图、散点图等。这个库在IT行业中被广泛应用于数据分析、报表生成以及各种可视化应用中。在给定的压缩包文件中,...
"3D柱状图示例", // 图表标题 "类别", // X轴标签 "值", // Y轴标签 dataset // 数据集 ); ChartFrame frame = new ChartFrame("我的图表", chart); frame.pack(); frame.setVisible(true); ``` 类似的...
这个教程可能是为了帮助用户理解如何利用JFreeChart来生成柱状图、饼状图等常见类型的图表。下面我们将深入探讨JFreeChart的基本使用、柱状图和饼状图的创建方法,以及如何结合源码进行学习。 首先,JFreeChart库...
JFreeChart支持多种图表类型,如折线图(曲线图)、饼图、柱状图、散点图、甘特图等,同时提供了自定义样式和颜色配置的灵活性。 ### 2. 曲线图 曲线图(Line Chart)是表示数据趋势的理想选择。使用JFreeChart...
《使用JFreeChart生成折线图、饼图、柱状图和堆栈柱状图》 JFreeChart是一款强大的开源Java图表库,它允许开发者在应用程序、报告或网页中生成各种高质量的图表,包括折线图、饼图、柱状图和堆栈柱状图等。这篇文档...
《使用JFreeChart生成曲线、柱状图、饼状图、分布图展示到JSP》 JFreeChart是一个强大的Java库,它允许开发者创建各种类型的图表,包括曲线图、柱状图、饼状图和分布图等。在当前JS图表库盛行的时代,JFreeChart...