怎么从数据库中调出数据并生成动态图表?

怎么从数据库中调出数据并生成动态图表?,第1张

JSP页面中嵌入动态图表的两种方法 :在JSP页面中插入Applet小程序 通过JavaBean动态生成图像。

JSP是一种广泛应用的网页设计技术 ,它是一种HTML和Java脚本混合的编程技术 ,它结合了HTML的静态特性和Java语言的动态能力 ,因此用它进行动态网页设计非常方便。在进行图像处理时 ,一般处理静态图片非常容易 ,但是 ,在实际应用中常常需要动态地在网页中生成二维的图形.

基于JFreeChart开发的一个时序图的绘制。代码如下:

实例中createDataset()方法用于创建数据集合对象。时序图的数据集合与其他数据集合不同,它需要添加一个时间段内的所有数据,通常采用TimeSeries类进行添加。该实例中通过Math类的random()方法进行随机生成。

import java.awt.*

import java.awt.event.ActionEvent

import

java.awt.event.ActionListener

import java.io.BufferedInputStream

import

java.io.DataInputStream

import java.io.FileOutputStream

import

java.io.IOException

import java.net.URL

import

java.net.URLConnection

import java.text.DateFormat

import

java.text.ParseException

import java.text.SimpleDateFormat

import

java.util.Calendar

import java.util.Date

import java.util.Random

import javax.swing.JApplet

import javax.swing.Timer

import org.jfree.chart.*

import

org.jfree.chart.annotations.CategoryTextAnnotation

import

org.jfree.chart.axis.CategoryAnchor

import

org.jfree.chart.axis.CategoryAxis

import

org.jfree.chart.axis.CategoryLabelPositions

import

org.jfree.chart.axis.DateAxis

import

org.jfree.chart.axis.DateTickUnit

import

org.jfree.chart.axis.DateTickUnitType

import

org.jfree.chart.axis.ValueAxis

import

org.jfree.chart.labels.StandardCategoryItemLabelGenerator

import

org.jfree.chart.plot.CategoryPlot

import

org.jfree.chart.plot.PlotOrientation

import

org.jfree.chart.plot.XYPlot

import

org.jfree.chart.renderer.category.BarRenderer

import

org.jfree.chart.title.TextTitle

import

org.jfree.data.category.CategoryDataset

import

org.jfree.data.category.IntervalCategoryDataset

import org.jfree.chart.axis.NumberAxis

import

org.jfree.data.category.DefaultCategoryDataset

import

org.jfree.data.gantt.Task

import org.jfree.data.gantt.TaskSeries

import

org.jfree.data.gantt.TaskSeriesCollection

import

org.jfree.data.time.Day

import org.jfree.data.time.Second

import

org.jfree.data.time.TimeSeries

import

org.jfree.data.time.TimeSeriesCollection

import

org.jfree.data.xy.XYDataset

public class shixutu extends JApplet {

//PLOT_FONT是一静态的字体常量对象,使用此对象可以避免反复用到的字体对象被多次创建

private static final Font PLOT_FONT = new Font("黑体", Font.ITALIC ,

18)

JFreeChart chart

//创建数据动态更新的监听

class DataGenerator extends Timer

implements ActionListener {

private static final long serialVersionUID =

3977867288743720504L

String

equID

//设备ID号

int

totalTask

//任务数

String[][]

strTask

//任务情况

public void

actionPerformed(ActionEvent actionevent) {

addTotalObservation()

} DataGenerator()

{

super(1000,

null)

addActionListener(this)

System.out.println("super")

}

}

//将更新的数据添加到chart中

private void addTotalObservation()

{

System.out.println("addTotalObservation")

//设置新的数据集

chart.getXYPlot().setDataset(createDataset())

//通知Jfreechart

数据发生了改变,重新绘制柱状图

if

(chart != null)

{

chart.fireChartChanged()

}

}

private static void

processChart(JFreeChart chart)

{

//设置标题字体

chart.getTitle().setFont(new Font("隶书", Font.BOLD,

26))

//设置背景色

chart.setBackgroundPaint(new

Color(252,175,134))

XYPlot plot = chart.getXYPlot()

//获取图表的绘制属性

plot.setDomainGridlinesVisible(false)

//设置网格不显示

//获取时间轴对象

DateAxis dateAxis = (DateAxis)

plot.getDomainAxis()

dateAxis.setLabelFont(PLOT_FONT)

//设置时间轴字体

//设置时间轴标尺值字体

dateAxis.setTickLabelFont(new

Font("宋体",Font.PLAIN,12))

dateAxis.setLowerMargin(0.0)

//设置时间轴上显示的最小值

//获取数据轴对象

ValueAxis valueAxis =

plot.getRangeAxis()

valueAxis.setLabelFont(PLOT_FONT)

//设置数据字体

DateFormat format = new SimpleDateFormat("mm分ss秒")

//创建日期格式对象

//创建DateTickUnit对象

DateTickUnit dtu = new

DateTickUnit(DateTickUnitType.SECOND,30,format)

dateAxis.setTickUnit(dtu)

//设置日期轴的日期标签 } //将结果输出在文件中

private static

void writeChartAsImage(JFreeChart chart)

{

FileOutputStream fos_jpg =

null

try

{

fos_jpg = new

FileOutputStream("D:\\test\\shixutu.jpg")

ChartUtilities.writeChartAsJPEG(fos_jpg, 1, chart, 400, 300,

null)

} catch (Exception e)

{

e.printStackTrace()

} finally

{

try

{

fos_jpg.close()

} catch (Exception e)

{

}

}

}

//创建数据集合对象

public static XYDataset createDataset()

{

//实例化TimeSeries对象

TimeSeries timeseries = new

TimeSeries("Data")

Second second = new Second()

//实例化Day

double d =

50D

//添加一年365天的数据

for (int i = 0i <500i++)

{

d = d + (Math.random() - 0.5) * 10

//创建随机数据

timeseries.second(day, d)

//向数据集合中添加数据

second = (Second)

second.next()

}

TimeSeriesCollection timeSeriesCollection =

new

TimeSeriesCollection(timeseries)

//返回数据集合对象

return timeSeriesCollection } //Applet程序初始化

public void init()

{

// 1.

得到数据

XYDataset dataset =

createDataset()

// 2.

构造chart

chart =

ChartFactory.createTimeSeriesChart(

"时序图示范", //

图表标题

"时间", //

目录轴的显示标签--横轴

"数值", //

数值轴的显示标签--纵轴

dataset, //

数据集

false,

false, //

是否生成工具

false //

是否生成URL链接

)

// 3.

处理chart中文显示问题

processChart(chart)

// 4.

chart输出图片

//writeChartAsImage(chart)

// 5. chart

以swing形式输出

//6.使用applet输出

ChartPanel chartPanel = new

ChartPanel(chart)

chartPanel.setPreferredSize(new

java.awt.Dimension(800,500))

getContentPane().add(chartPanel) (new

DataGenerator()).start()

}

public void

paint(Graphics g)

{

if

(chart != null)

{

chart.draw((Graphics2D) g,

getBounds())

}

}

public void destroy() {

}

}

1、确认需求

在数据可视化设计前,分析人员要先完成业务需求的分析,将分析需求拆分成不同层级、不同主题的任务,捕捉其中业务的数据指标、标签,划分出不同优先级,为下一步取数做准备。

数据可视化-派可数据商业智能BI

在确认需求的过程中,分析人员需要特别关注业务和数据的对应关系,按照数据词典将数据仓库中的指标、标签进行确认,对数据质量进行调研,最大程度提高数据可视化的准确性。

数据可视化是为了解决问题而制作出来的,所以实际制作分析的过程中必须紧贴企业业务流程,了解业务指标、属于什么专业方向的内容,最大程度地提升数据分析的准确性,提高图表展现信息的质量。

2、准备数据

数据可视化,千万不能忘了数据。不管前期规划再好,业务指标和需求之间的关系再贴合,没有数据你什么也分析不了。

数据可视化-派可数据商业智能BI

分析人员在进行可视化分析前,应该提前准备好任务所需的数据,做好分析前的准备工作。在这个阶段,分析人员可以联合技术人员,将后续数据可视化需要的指标、标签、维度等数据从数据仓库中调取出来,准备进行数据分析。

在准备数据的过程中,分析人员可以对业务数据进一步确认,和一线业务人员进行沟通协作,确认数据和业务之间相互贴合,数据也和业务变化一致。然后可以思考数据之间的关联,将关键数据整理进行标记。如果没有需要的数据就要及时寻找,看看对方是否能够临时填报、补录数据,增加数据的源头。

3、选择图表

图表的选择直接关系到可视化的呈现效果,一个合适的图表能够把数据之间的联系转化为直观的信息,相反错误的图表可能会将需求对象引向错误的方向。

数据可视化-派可数据商业智能BI

数据可视化分析人员必须了解所有主流的图表类型,知道每个图表适合做哪些分析,能够展现哪种类型的信息,举个例子,折线图、柱形图等能够轻易的展现事物的发展趋势,但如果你把某段时间销售数量变化趋势呈现在饼图上,那这个图表就没有任何意义了。

4、页面布局

分析人员将一张完整的页面分割成不同板块、层次,保证数据能够完全展现,同时设计人员还要注意划分信息的重要程度,在整体视觉设计中,把核心的数据指标放在最重要的位置,占据较大的面积,其余的指标按优先级依次在核心指标周围展开。

数据可视化-派可数据商业智能BI

当然,在实际的可视化分析过程中,管理人员给到的数据需求一般都会比较多,要求在同一页面上展现尽可能多的信息量。这时候设计人员就需要在满足计较关键信息、平衡布局空间以及简洁直观的基础上将数据划分为更多层次。

数据可视化-派可数据商业智能BI

5、数据可视化分析

在数据分析过程中,很多新手会有一个误区,经常会把各种各样的可视化图表装满几个屏幕,认为这样就可以把所有信息直观地展示给用户。实际上,用户并不需要那么多内容,相比复杂的信息展示,他们往往会更喜欢一目了然的内容设计,一眼就能看到关键信息。

数据可视化-派可数据商业智能BI

此外,整个可视化图表页面中,色彩不宜太过丰富,颜色最好也不要太过鲜艳,把色彩对比强烈的颜色放到关键信息,用清晰的逻辑去呈现变化,突出重点部分,使用户产生更好地体验,这才是他们最希望看到的。

最后,回到数据分析本身,分析人员可以选择为制作完成的可视化图表附上自己从业务逻辑思考的信息,帮助用户更好地分辨图表展现的意义。

派可数据 商业智能BI可视化分析平台


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9982288.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存