几天内绘制一个图表,其数据集具有24小时数据,但这仅在M-F,上午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
}
答案 0 :(得分:1)
您可以将DateAxis
与自定义Timeline
一起使用。 SegmentedTimeline
(经here检查)是一个具体的实现;尽管deprecated可以作为指南。基于此example,您的概念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;
}
此example说明了减轻您遇到的任何渲染瑕疵的一种方法。