几天内绘制图表,其数据集具有24小时数据,但仅在MF(上午7点至下午5点)期间有效。如果使用下面的代码设置时间序列,则会得到一个包含每周7天,每天24小时的图表。有道理,但不适用于我的用例。
有没有一种方法可以定义时间序列显示的间隔?还是我需要使用其他图表类型并尝试将我的数据调整为常规周期?我希望不要这样,尽管我接收的数据通常间隔30秒,但很容易会有差距。
几乎不可能发布具有正常工作状态的UI的SSCE以及带有动态请求服务器数据的图表的图表,但是下面有一些重点说明了我正在使用的图表类型。
一些plot.add,CombinedDomainXY,索引0代码可能看起来很奇怪。我有三个共享时间值的子图,这里将其简化为一个,以使其简短。我假设有一种方法可以完成我需要做的一个绘图,这将适用于具有多个子图的图表。
public ChartPanel extends JPanel { private final MyDataset _myDataset = new MyDataset(); private final XYPlot _myPlot = new XYPlot(); _chartPanel = new ChartPanel( createChart() ); private JFreeChart createChart() { CombinedDomainXYPlot plot = new CombinedDomainXYPlot( timeAxis ); plot.setGap( 10.0 ); plot.setDomainPannable( true ); plot.setDataset( index, dataset ); NumberAxis axis = new NumberAxis(); axis.setAutoRangeIncludesZero( false ); plot.setRangeAxis( 0, axis ); plot.setRangeAxisLocation( 0, axisLocation ); plot.setRenderer( 0, new StandardXYItemRenderer() ); plot.mapDatasetToRangeAxis( 0, index ); // add the subplots... plot.add( _myPlot, 1 ); } } public class MyDataset implements XYDataset { @Override public double getYValue( int series, int item ) { return getMyData(item); } @Override public double getXValue( int series, int item ) { return _bars.get( item ).DateTime.toInstant().toEpochMilli(); } //other basic overloaded methods left out for brevity }
您可能可以将a DateAxis与自定义一起使用Timeline。在这里SegmentedTimeline检查的是一个具体的实现;尽管已弃用,但可以作为指导。根据此示例,您的概念可能看起来像这样:newWorkdayTimeline()
DateAxis
Timeline
SegmentedTimeline
newWorkdayTimeline()
public static SegmentedTimeline newWorkdayTimeline() { SegmentedTimeline timeline = new SegmentedTimeline( SegmentedTimeline.HOUR_SEGMENT_SIZE, 10, 14); timeline.setStartTime(SegmentedTimeline.firstMondayAfter1900() + 7 * timeline.getSegmentSize()); timeline.setBaseTimeline(SegmentedTimeline.newMondayThroughFridayTimeline()); return timeline; }
此示例说明了减轻您遇到的任何渲染伪像的一种方法。