当前位置: 首页 > 面试题库 >

将JFreeChart TimeSeries限制为营业时间

鄢翰藻
2023-03-14
问题内容

几天内绘制图表,其数据集具有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()

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;
}

此示例说明了减轻您遇到的任何渲染伪像的一种方法。



 类似资料:
  • 问题内容: 如何限制我的Jenkins作业只能在Linux从站上运行? 我 在“可以运行此项目 的位置 限制” 框中打了勾,但似乎只能在其中输入从属名称。 我想说的 是使用在Linux平台上运行的任何从属设备 类似于teamcity.agent.jvm.os.name等于TeamCity中的Linux选项。 编辑:到目前为止,您似乎必须手动编辑每个从站的标签(或编写脚本)。不幸的是,我无权更改这些

  • 问题内容: 在我的商店数据库中,我需要有营业时间。您是否知道如何在dB中实现这一点? 营业时间为周一至周日,每天可以有2个开放窗口(例如09:00-12:00、16:00-19:00) 问题答案: 建一个表,把它添加一个外键表的主键,一个场,。数据应如下所示: 这将使您有机会构建任何类型的日程表,并根据需要设置任意数量的窗口以及所需的异常数量。它是通用的,仅限于期望所有星期都相同的事实。没有考虑假

  • 问题内容: 我如何从elasticsearch中获取所有结果,因为结果仅显示限制为10。我有一个查询,像: 我已将限制设置为15,但我不想使其无限,以便我可以获取所有数据,因为我的数据不断变化,并且我想获取所有数据,所以我无法设置限制。 问题答案: 您可以使用和参数浏览所有数据。这可能非常慢,具体取决于您的数据以及索引中有多少。 http://www.elastic.co/guide/zh-CN/

  • 问题内容: 我刚刚发现,运行日历脚本时,PHP中的时间戳限制为2038。这实际上是什么意思?为什么是2038,而不是2050或2039?如果时间戳仅是从给定日期(1970年)起算的秒数,为什么还要设置限制? 问题答案: 该限制是由大多数C库用来表示该计数的4字节带符号整数强加的。快速数学(假设365天年,并非完全正确): 这也意味着下限约为1900。一些库已经开始引入64位纪元计数,但目前它们之间

  • 问题内容: 我用来优化一个实际问题,答案只能是整数。我当前的代码如下所示: 这样产生: 但是我希望使用整数值对其进行优化(将所有数值四舍五入到最接近的整数并不总是给出最小值)。 有没有办法只使用整数值? (我想我可以创建一个具有所有可能排列的数组,并为每个组合评估f(x),但这似乎不是一个非常优雅或快速的解决方案。) 问题答案: 纸浆溶液 经过研究,我认为您的目标函数不是线性的。我在Python纸

  • 问题内容: 在应用程序的Java部分中创建EditText时,如何将其限制为与xml中一样的数字?例如: 设置像 问题答案: 大概是这样吗?