关于JFreeChart柱状图显示数值的问题?!!!

小p变砖头 2009-04-20 07:02:32
请问JFreeChart里如何能够使柱状图里每个元素的数值显示出啦? 我看网上写要使用CategoryItemRenderer这个类 这个类是抽象接口 我为什么不能实现它 implements的时候就报错 谢谢
...全文
1602 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
kjwcs 2011-11-11
  • 打赏
  • 举报
回复
感谢 3#楼 刚好适用
wjpp0000 2009-05-26
  • 打赏
  • 举报
回复
非常感谢~!
zhangpeixv 2009-04-23
  • 打赏
  • 举报
回复
这个应该是在柱状图比较密集的时候才会纵向显示的吧
可不可以设置我没有用过

但是感觉它那个是自动调节的
比如你柱子多了它怕数据之间横向排列的话有遮挡的部分
所以自动的转成纵向的
这只是我的一点个人理解啊
如果是这样的话,你可以固定一下柱子的宽度,柱子够宽不影响
数据显示,它可能就会是横向显示了

你也可以把整个图片拉长一点,没有那么挤也应该可以的

LZ还是先看下api,如果有这方面的设置,记得共享哦
小p变砖头 2009-04-22
  • 打赏
  • 举报
回复
zhangpeixv 很感谢你的帖子 现在数值已经可以正常显示 但是有的数值在柱形图里显示 有些图在柱形图上方显示(而且是纵向显示)请问能不能通过设置使他们显示在一个地方并且都是横向显示
JFreeChart chart = ChartFactory.createBarChart3D("字母出现频率","字母","出现频率",DrawImage.getDataset(),PlotOrientation.VERTICAL,false,true,false);
CategoryPlot categoryPlot = chart.getCategoryPlot();
BarRenderer3D render = (BarRenderer3D)categoryPlot.getRenderer();
render.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());
render.setMinimumBarLength(0.02);
render.setMaximumBarWidth(0.07);
ItemLabelPosition itemLabelPositionFallback=new ItemLabelPosition(
ItemLabelAnchor.OUTSIDE12,TextAnchor.BASELINE_LEFT,
TextAnchor.HALF_ASCENT_LEFT,-1.57D);
render.setPositiveItemLabelPositionFallback(itemLabelPositionFallback);
render.setNegativeItemLabelPositionFallback(itemLabelPositionFallback);
render.setItemLabelsVisible(true);
try
{
FileOutputStream fos = new FileOutputStream("d:/image.jpg");
ChartUtilities.writeChartAsJPEG(fos,1,chart,800,600,null);
fos.close();
} catch (FileNotFoundException e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1)
{
// TODO Auto-generated catch block
}
CRC622 2009-04-22
  • 打赏
  • 举报
回复
zhangpeixv 2009-04-20
  • 打赏
  • 举报
回复
奇怪了
怎么这个样子呢
//显示每个柱的数值,并修改该数值的字体属性
renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());
//设置bar的最小宽度,以保证能显示数值
renderer.setMinimumBarLength(0.02);
//最大宽度
renderer.setMaximumBarWidth(0.07);

//设置不能在柱子上正常显示的那些数值的显示方式,将这些数值显示在柱子外面
ItemLabelPosition itemLabelPositionFallback=new ItemLabelPosition(
ItemLabelAnchor.OUTSIDE12,TextAnchor.BASELINE_LEFT,
TextAnchor.HALF_ASCENT_LEFT,-1.57D);

zhangpeixv 2009-04-20
  • 打赏
  • 举报
回复
这个网上可以找到的,或者看它的demo,我的这个程序有点长了,红色的部分是需要的地方
要注意jfreechart的版本,还有引入包



<%@ page contentType="text/html;charset=GBK"%>
<%@ page import="tool.*,table.*,dao.*"%>
<%@ page import ="
org.jfree.chart.ChartFactory,
org.jfree.chart.JFreeChart,
org.jfree.data.category.DefaultCategoryDataset,
org.jfree.chart.servlet.ServletUtilities,
org.jfree.chart.renderer.category.BarRenderer3D,
java.util.*,
org.jfree.chart.plot.PlotOrientation,
java.awt.Color,
org.jfree.chart.servlet.ServletUtilities,
org.jfree.data.category.CategoryDataset,
org.jfree.data.general.*,
org.jfree.chart.plot.CategoryPlot,
org.jfree.chart.axis.CategoryAxis,
org.jfree.chart.axis.ValueAxis,
org.jfree.chart.urls.StandardCategoryURLGenerator,
org.jfree.chart.*,
org.jfree.chart.entity.*,
org.jfree.chart.labels.*,
org.jfree.chart.axis.CategoryLabelPositions,
org.jfree.ui.TextAnchor,
org.jfree.chart.axis.NumberAxis,
org.jfree.chart.axis.NumberTickUnit"
%>
<html>
<head>
<title>柱状图输出</title>
</head>
<body>

<%
Integer right=(Integer)session.getAttribute("right");
if(right==null)
{
response.sendRedirect("outTime.do");
}
%>
<%
//设置曲线
HotUsedTb hut=new HotUsedTb();

TbRealinfo tri=new TbRealinfo();
RealInfoDao rid=new RealInfoDao();

Integer sjdw=(Integer)request.getAttribute("sjdw");
DealStr ds=new DealStr();
String type=((String)request.getAttribute("type")).trim();
String ziduan="";
String ziduanzhi="";
int chooseTb=((Integer)session.getAttribute("chooseTb")).intValue();
String meterType=((String)session.getAttribute("meterType")).trim();
String start=((String)session.getAttribute("start")).trim();
String end=((String)session.getAttribute("end")).trim();

RpFactory.setStarTime(start);
RpFactory.setEndTime(end);
RpFactory.setSjdw(sjdw.intValue());
RpFactory.setMeterType(meterType);
RpFactory.setStartRow(((Integer)session.getAttribute("startRow")).intValue());
RpFactory.setPageSize(((Integer)session.getAttribute("pageSize")).intValue());

RpFactory.setChooseTable(chooseTb);
Collection list=null;
TbMeter tm=new TbMeter();
MeterDao md=new MeterDao();
TbGroup tg=new TbGroup();
GroupDao gd=new GroupDao();
tm=md.listOneMeter(new Integer(Integer.parseInt(meterType.substring(1,meterType.length()))));
tri=rid.listRealInfo(tm.getMId().intValue());
String dw1="";
String dw2="";
dw1=DealStr.getDw(tri.getRDw());
dw2=DealStr.getDw(tri.getRDw()).substring(0,2);
tg=gd.listOneGroup("",tm.getMGrp());
list=RpFactory.generateCollection();
switch(Integer.parseInt(type))
{
case 1:
ziduan="瞬时流量"+dw1;
break;
case 2:
if(tm.getMType().equals("119"))
{
ziduan="热功率GJ/h";
}
else
{
ziduan="热功率kw";
}
break;
case 3:
ziduan="用水量"+dw2;
break;
case 4:
ziduan="使用热量GJ";
break;
case 6:
ziduan="使用冷量GJ";
break;
case 7:
ziduan="供水温度℃";
break;
case 8:
ziduan="回水温度℃";
break;
}
ziduan=ziduan+"----"+tg.getGName().trim()+"("+tm.getMName().trim()+")"+" "+ds.fmatT(start)+"----"+ds.fmatT(end);
DefaultCategoryDataset dataset = new DefaultCategoryDataset();

Iterator it=list.iterator();
while(it.hasNext())
{
hut=(HotUsedTb)it.next();
String ziDuanZhi="";
String time="";
switch(Integer.parseInt(type))
{
case 1:
ziDuanZhi=hut.getSsll();
break;
case 2:
ziDuanZhi=hut.getSsrl();
break;
case 3:
ziDuanZhi=hut.getAdd();
break;
case 4:
ziDuanZhi=hut.getHot();
break;
case 6:
ziDuanZhi=hut.getThot();
break;
case 7:
ziDuanZhi=hut.getHout();
break;
case 8:
ziDuanZhi=hut.getHin();
break;
}

if(ziDuanZhi.trim().equals("x"))
{
}
else
{
dataset.addValue(Float.parseFloat(ziDuanZhi.trim()),"",ds.fmatT(hut.getTime()));
}
}
JFreeChart chart = ChartFactory.createBarChart3D(ziduan,
"时间",//横坐标名称
"值",//纵坐标名称
dataset,//数据集合
PlotOrientation.VERTICAL,//图形位置,水平还是垂直
false,
false,
false);
CategoryPlot categoryPlot = chart.getCategoryPlot();//获得 plot:3dBar为CategoryPlot
//获取横坐标
CategoryAxis domainAxis = categoryPlot.getDomainAxis();
//设置 横坐标 垂直显示
domainAxis.setCategoryLabelPositions(CategoryLabelPositions.createUpRotationLabelPositions(1));

ValueAxis rangeAxis = categoryPlot.getRangeAxis();
//设置最高的一个柱与图片顶端的距离
rangeAxis.setUpperMargin(0.5);

BarRenderer3D renderer=(BarRenderer3D) categoryPlot.getRenderer();
categoryPlot.setDomainAxis(domainAxis); //使横坐标设置生效

//显示每个柱的数值,并修改该数值的字体属性
renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());
//设置bar的最小宽度,以保证能显示数值
renderer.setMinimumBarLength(0.02);
//最大宽度
renderer.setMaximumBarWidth(0.07);

//设置不能在柱子上正常显示的那些数值的显示方式,将这些数值显示在柱子外面
ItemLabelPosition itemLabelPositionFallback=new ItemLabelPosition(
ItemLabelAnchor.OUTSIDE12,TextAnchor.BASELINE_LEFT,
TextAnchor.HALF_ASCENT_LEFT,-1.57D);



//设置不能正常显示的柱子label的position
renderer.setPositiveItemLabelPositionFallback(itemLabelPositionFallback);
renderer.setNegativeItemLabelPositionFallback(itemLabelPositionFallback);

renderer.setItemLabelsVisible(true);
renderer.setItemMargin(10);
String filename = ServletUtilities.saveChartAsPNG(chart, 980, 450, null, session);
String graphURL = request.getContextPath() + "/servlets/DisplayChart?filename=" + filename;
%>
<img src="<%= graphURL %>" border=0 usemap="#<%= filename %>">
</body>
</html>

zhanghua4109 2009-04-20
  • 打赏
  • 举报
回复
package nc.ui.test.chart;

import java.awt.Dimension;
import javax.swing.JPanel;
import org.jfree.chart.*;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.chart.renderer.category.CategoryItemRenderer;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;

public class BarChart3DDemo3 extends ApplicationFrame
{

public BarChart3DDemo3(String s)
{
super(s);
CategoryDataset categorydataset = createDataset();
JFreeChart jfreechart = createChart(categorydataset);
ChartPanel chartpanel = new ChartPanel(jfreechart);
chartpanel.setPreferredSize(new Dimension(500, 270));
setContentPane(chartpanel);
}

private static CategoryDataset createDataset()
{
DefaultCategoryDataset defaultcategorydataset = new DefaultCategoryDataset();
defaultcategorydataset.addValue(25D, "Series 1", "Category 1");
defaultcategorydataset.addValue(34D, "Series 1", "Category 2");
defaultcategorydataset.addValue(19D, "Series 2", "Category 1");
defaultcategorydataset.addValue(29D, "Series 2", "Category 2");
defaultcategorydataset.addValue(41D, "Series 3", "Category 1");
defaultcategorydataset.addValue(33D, "Series 3", "Category 2");
return defaultcategorydataset;
}

private static JFreeChart createChart(CategoryDataset categorydataset)
{
JFreeChart jfreechart = ChartFactory.createBarChart3D("3D Bar Chart Demo", "Category", "Value", categorydataset, PlotOrientation.VERTICAL, true, true, false);
CategoryPlot categoryplot = jfreechart.getCategoryPlot();
CategoryAxis categoryaxis = categoryplot.getDomainAxis();
categoryaxis.setCategoryLabelPositions(CategoryLabelPositions.createUpRotationLabelPositions(0.39269908169872414D));
CategoryItemRenderer categoryitemrenderer = categoryplot.getRenderer();
categoryitemrenderer.setItemLabelsVisible(true);
BarRenderer barrenderer = (BarRenderer)categoryitemrenderer;
barrenderer.setItemMargin(0.20000000000000001D);
return jfreechart;
}

public static JPanel createDemoPanel()
{
JFreeChart jfreechart = createChart(createDataset());
return new ChartPanel(jfreechart);
}

public static void main(String args[])
{
BarChart3DDemo3 barchart3ddemo3 = new BarChart3DDemo3("3D Bar Chart Demo 3");
barchart3ddemo3.pack();
RefineryUtilities.centerFrameOnScreen(barchart3ddemo3);
barchart3ddemo3.setVisible(true);
}
}

参考下

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧