当前位置: 首页 > 知识库问答 >
问题:

JFree甘特图-每个作业和整数时间单位的不同颜色

凤经武
2023-03-14

我刚刚使用JFree。我想知道如何创建数据集,使特定作业的所有操作都具有相同的颜色(例如,O111、O122、O133、O144具有相同的颜色,机器与图像2成直线)。

我试图使用TaskSeries创建它,但它会为每个操作创建一个带有一行的图形。如下图所示。

但是我想要每台机器一行,如下图:

但是,我想为每个作业及其各自的操作定义一种颜色。

我的数据集创建:

public static IntervalCategoryDataset createDataset(Map<Integer, LinkedList<Operation>> lines, Integer makespan) {

    /*Map<Integer, TaskSeries> mapSeries = new HashMap<>();

    for (Map.Entry<Integer, LinkedList<Operation>> entry : lines.entrySet()) {
        for (int k = 0; k < entry.getValue().size(); k++) {
            if (mapSeries.get(entry.getValue().get(k).getJ().getId()) == null) {
                TaskSeries series = new TaskSeries("Job " + entry.getValue().get(k).getJ().getId());
                mapSeries.put(entry.getValue().get(k).getJ().getId(), series);
            }
        }
    }*/

    TaskSeries seriesOne = new TaskSeries("Scheduled");

    for (Map.Entry<Integer, LinkedList<Operation>> entry : lines.entrySet()) {
        Task mainTask = new Task("Machine" + entry.getKey(), new SimpleTimePeriod(0, makespan));

        for (int k = 0; k < entry.getValue().size(); k++) {

            Task subtask = new Task(entry.getValue().get(k).getName(),
                    new SimpleTimePeriod(entry.getValue().get(k).getStart(), entry.getValue().get(k).getEnd()));

            subtask.setDescription(entry.getValue().get(k).getName());
            //mapSeries.get(entry.getValue().get(k).getJ().getId()).add(subtask);
            mainTask.addSubtask(subtask);
        }
        seriesOne.add(mainTask);
        System.out.println();
    }

    final TaskSeriesCollection collection = new TaskSeriesCollection();
    collection.add(seriesOne); 

    return collection;
}

我还想检查是否有人知道如何将轴更改为整数时间单位(例如,0 1 2 3 4 5 6 7 8 9 10,…,makespan)。

[编辑]

我会添加更多的信息来重现我的问题。输入:

    Machine m1 = new Machine(1);
    Machine m2 = new Machine(2);
    Machine m3 = new Machine(3);

    Job j1 = new Job(1);
    Job j2 = new Job(2);
    Job j3 = new Job(3);

    j1.setSequence(new ArrayList<OperationSeq>(Arrays.asList(
            new OperationSeq[] { new OperationSeq(m1, 7), new OperationSeq(m3, 8), new OperationSeq(m2, 10) })));
    j2.setSequence(new ArrayList<OperationSeq>(Arrays.asList(
            new OperationSeq[] { new OperationSeq(m2, 6), new OperationSeq(m1, 4), new OperationSeq(m3, 12) })));
    j3.setSequence(new ArrayList<OperationSeq>(Arrays.asList(
            new OperationSeq[] { new OperationSeq(m1, 8), new OperationSeq(m2, 8), new OperationSeq(m3, 7) })));

数据模型:我正在使用

    Map<Integer, LinkedList<Operation>>

其中,键值是机器id,LinkedList是需要放置在机器行中的操作。

每个操作都包含其各自的作业id、序列id、机器id和时间间隔整数开始、整数结束(例如,来自作业1的操作,序列1(作业1的第一个操作),机器1,开始=0,结束=3)。

基于这个描述,我们可以看到每个映射键值都是图表中的一行,每个操作都是一列。然后,我想要的是根据操作作业id更改任务的颜色。

下面的图片正是我想要的。

共有1个答案

连志义
2023-03-14

>

使用相同的TaskSeries从默认的Drawing供应商获取第一种颜色,如下所示。

为每个作业及其各自的操作定义颜色。

重写getItemPaint()以提供所需的颜色;此示例为每个子任务提供不同饱和度的调色板。

将轴更改为时间单位。

由相关ChartFactory实例化的DateAxis将数据值解释为从Java纪元开始的毫秒;要更改显示,请使用所需格式覆盖setDateFormatOverrid(),如下所示。

 类似资料:
  • 我用openlayers 3在地图中上传了一个geojson文件。geojson文件是一个FeatureCollection,具有LineString类型的5个功能。如何为每个功能添加不同的颜色以区分路径?如果我将颜色添加到geojson文件的样式中,则不会读取该文件,如果我将颜色添加到笔划中,则所有功能都以单一颜色着色。 下面我添加代码。 谢谢 文件GEOJSON: "type":"Featur

  • 问题内容: 如果折线图中的数据点高于某个特定值,是否可以为该数据点设置其他颜色? 问题答案: 对于chartjs 2.0,请参见以下答案。 下面是原始答案。 关于ChartJS的好问题。我一直想做类似的事情。即动态地将点颜色更改为其他颜色。您在下面尝试过此吗?我只是尝试过,它对我有用。 试试这个: 或尝试以下方法: 甚至这个: 然后执行以下操作: 我想你可能会喜欢 仍然尝试一下。

  • 甘特图用于比较类别之间的数据。此外,它还可用于识别每个过程所花费的时间。 它显示了一段时间内任务值的进展。它在一段时间内广泛用于项目管理和其他类型的变异研究。 除时间维度外,甘特图也采用维度和度量。 例如,使用Sample-Superstore数据源,可以按照每种类型的发运模式进行运输。对于创建,甘特图遵循程序如下: 第1步:转到工作表。 单击“标记(Marks)”窗格中的下拉按钮。 从给定列表中

  • 主要内容:什么是JFreeChart 甘特图,JFreeChart 甘特图的示例什么是JFreeChart 甘特图 甘特图是一种条形图,常用于计划和安排项目任务和事件。 下图显示了 JFreeChart 库中包含的甘特图的一些演示版本: JFreeChart 甘特图的示例 让我们以人口数量作为样本数据。 软件开发阶段 预计日期 实际日期   需求分析 2017-07-03 2017-07-07 2017-07-03 2017-07-05 需求设计 2017-07-10 201

  • Mermaid 是一个用于画流程图、状态图、时序图、甘特图的库,使用 JS 进行本地渲染,广泛集成于许多 Markdown 编辑器中。 之前用过 PlantUML,但是发现这个东西的实现原理是生成 UML 的图片后上传服务端,每次再从服务端读取,因此觉得不够鲁棒,隐私性也不好,因而弃用。 Mermaid 作为一个使用 JS 渲染的库,生成的不是一个“图片”,而是一段 HTML 代码,因此安全许多。

  • 现在我每天下午3点运行我的cron作业 但是我想一天运行两次cron作业。上午10点30分和下午2点30分 我相信此命令将在上午 10:30 运行。我应该如何在下午 2:30 运行它?