JFreechart如何实现 X轴 自定义刻度

heliang69 2013-01-18 10:48:12
现在想做一个柱图,X轴显示的是从00:00 - 23:59 ,第分钟一条数据,但是这样都显示出来会使X轴的刻度过于密集,为了美观,想让X轴只显示整点,也就是00:00、01:00、02:00.。。。。。。。这种形式的。

想请问一下大家这种JFreeChart如何来实现。

谢谢
...全文
1284 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
po050407139 2014-08-01
  • 打赏
  • 举报
回复
楼主,咋时候有空请教一下,谢谢
po050407139 2014-06-11
  • 打赏
  • 举报
回复
什么做啊,教教我呗
javakingshen 2013-09-24
  • 打赏
  • 举报
回复
跪求怎么完成的??重写这个类的那个方法啊??
dulongjian 2013-09-21
  • 打赏
  • 举报
回复
引用 6 楼 heliang69 的回复:
我自己重写了CategoryAxis类,解决了这个问题 通过重写这个类,可以实现任何的刻度类型。
要重写这个类的哪些方法 还是要自己添加方法
suciver 2013-01-18
  • 打赏
  • 举报
回复
不要用TimeSeries用XYSeries自己定义x轴值
panzhixiong_cn 2013-01-18
  • 打赏
  • 举报
回复
http://download.csdn.net/detail/jouice8111/792896 这边有个例子,你可以参考一下。
brightyq 2013-01-18
  • 打赏
  • 举报
回复
肯定是可以不用JFreechart提供的自动控制刻度间距,自动定义步长.下面是网上找的例子:
NumberAxis numberAxis = (NumberAxis) plot.getRangeAxis();
numberAxis .setAutoTickUnitSelection(false);
 
double unit=10d;//刻度的长度
NumberTickUnit ntu= new NumberTickUnit(unit);
numberAxis .setTickUnit(ntu);
 
DateAxis xAxis = new DateAxis(xName);
xAxis.setRange(start_time, end_time);
 
xAxis.setAutoTickUnitSelection(false);
xAxis.setTickUnit(new DateTickUnit(DateTickUnit.MINUTE,20));
 
plot.setDomainAxis(xAxis);
heliang69 2013-01-18
  • 打赏
  • 举报
回复
我自己重写了CategoryAxis类,解决了这个问题 通过重写这个类,可以实现任何的刻度类型。
heliang69 2013-01-18
  • 打赏
  • 举报
回复
引用 4 楼 suciver 的回复:
给你个jfreechart自带的demo吧 Java code?1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818……
首先,非常感谢你的回复。 但是你的这个代码我也在Demo中看过了,他的这个X轴,是系统自己根据图形的宽度来自动改变的刻度。我现在的想法是自己设置这个刻度。
suciver 2013-01-18
  • 打赏
  • 举报
回复
给你个jfreechart自带的demo吧

package demo;

import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RectangleInsets;
import org.jfree.ui.RefineryUtilities;

public class LineChartDemo2 extends ApplicationFrame
{
  public LineChartDemo2(String paramString)
  {
    super(paramString);
    XYDataset localXYDataset = createDataset();
    JFreeChart localJFreeChart = createChart(localXYDataset);
    ChartPanel localChartPanel = new ChartPanel(localJFreeChart);
    localChartPanel.setPreferredSize(new Dimension(500, 270));
    setContentPane(localChartPanel);
  }

  private static XYDataset createDataset()
  {
    XYSeries localXYSeries1 = new XYSeries("First");
    localXYSeries1.add(1.0D, 1.0D);
    localXYSeries1.add(2.0D, 4.0D);
    localXYSeries1.add(3.0D, 3.0D);
    localXYSeries1.add(4.0D, 5.0D);
    localXYSeries1.add(5.0D, 5.0D);
    localXYSeries1.add(6.0D, 7.0D);
    localXYSeries1.add(7.0D, 7.0D);
    localXYSeries1.add(8.0D, 8.0D);
    XYSeries localXYSeries2 = new XYSeries("Second");
    localXYSeries2.add(1.0D, 5.0D);
    localXYSeries2.add(2.0D, 7.0D);
    localXYSeries2.add(3.0D, 6.0D);
    localXYSeries2.add(4.0D, 8.0D);
    localXYSeries2.add(5.0D, 4.0D);
    localXYSeries2.add(6.0D, 4.0D);
    localXYSeries2.add(7.0D, 2.0D);
    localXYSeries2.add(8.0D, 1.0D);
    XYSeries localXYSeries3 = new XYSeries("Third");
    localXYSeries3.add(3.0D, 4.0D);
    localXYSeries3.add(4.0D, 3.0D);
    localXYSeries3.add(5.0D, 2.0D);
    localXYSeries3.add(6.0D, 3.0D);
    localXYSeries3.add(7.0D, 6.0D);
    localXYSeries3.add(8.0D, 3.0D);
    localXYSeries3.add(9.0D, 4.0D);
    localXYSeries3.add(10.0D, 3.0D);
    XYSeriesCollection localXYSeriesCollection = new XYSeriesCollection();
    localXYSeriesCollection.addSeries(localXYSeries1);
    localXYSeriesCollection.addSeries(localXYSeries2);
    localXYSeriesCollection.addSeries(localXYSeries3);
    return localXYSeriesCollection;
  }

  private static JFreeChart createChart(XYDataset paramXYDataset)
  {
    JFreeChart localJFreeChart = ChartFactory.createXYLineChart("Line Chart Demo 2", "X", "Y", paramXYDataset, PlotOrientation.VERTICAL, true, true, false);
    localJFreeChart.setBackgroundPaint(Color.white);
    XYPlot localXYPlot = (XYPlot)localJFreeChart.getPlot();
    localXYPlot.setBackgroundPaint(Color.lightGray);
    localXYPlot.setAxisOffset(new RectangleInsets(5.0D, 5.0D, 5.0D, 5.0D));
    localXYPlot.setDomainGridlinePaint(Color.white);
    localXYPlot.setRangeGridlinePaint(Color.white);
    XYLineAndShapeRenderer localXYLineAndShapeRenderer = (XYLineAndShapeRenderer)localXYPlot.getRenderer();
    localXYLineAndShapeRenderer.setBaseShapesVisible(true);
    localXYLineAndShapeRenderer.setBaseShapesFilled(true);
    NumberAxis localNumberAxis = (NumberAxis)localXYPlot.getRangeAxis();
    localNumberAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
    return localJFreeChart;
  }

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

  public static void main(String[] paramArrayOfString)
  {
    LineChartDemo2 localLineChartDemo2 = new LineChartDemo2("Line Chart Demo 2");
    localLineChartDemo2.pack();
    RefineryUtilities.centerFrameOnScreen(localLineChartDemo2);
    localLineChartDemo2.setVisible(true);
  }
}
heliang69 2013-01-18
  • 打赏
  • 举报
回复
引用 2 楼 suciver 的回复:
不要用TimeSeries用XYSeries自己定义x轴值
没太明白你是什么意思,能说明一下吗?

81,094

社区成员

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

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