Chart Categories vs Time on Perspective

I’m using Ignition 8.1.14 Perspective and I’m trying to plot equipment status over time, somewhat like this:

Based on historical data from a database (not a tag).

I managed to get fairly close to what I want using an XY chart and setting the y-axis to render as a “category”, but as you can kind of see from that screenshot, it’s not plotting all categories. There are another 4 categories it’s missing, even though data provided includes those categories (it’s just plotted as running along the top instead of classed in a category).

The status is an enumerated value so I can just use the number, but I wanted to relate it to the actual status name when plotting. I couldn’t find any spot to indicate what the enumeration is for the y-axis to use, so instead I changed my dataSource array to list the status name itself, e.g.:

{
  "Tray_Filler": "Disabled",
  "t_stamp": 2022-7-6 8:39:52
}

That’s what results in the partially working sample shown above, where it recognizes and plots some categories, but not all.

Is there any way to make it show all categories in the dataset or manually define the categories?

y axis config:

{
  "name": "status",
  "label": {
    "enabled": true,
    "text": "Status",
    "color": ""
  },
  "inversed": false,
  "visible": true,
  "tooltip": {
    "enabled": true,
    "text": "",
    "cornerRadius": 3,
    "pointerLength": 4,
    "background": {
      "color": "",
      "opacity": 1
    }
  },
  "render": "category",
  "category": {
    "break": {
      "enabled": false,
      "startCategory": "",
      "endCategory": "",
      "size": 0.05
    }
  },
  "date": {
    "baseInterval": {
      "enabled": false,
      "timeUnit": "hour",
      "count": 1,
      "skipEmptyPeriods": false
    },
    "range": {
      "max": "",
      "min": "",
      "useStrict": false
    },
    "break": {
      "enabled": false,
      "startDate": "",
      "endDate": "",
      "size": 0.05
    },
    "inputFormat": "yyyy-MM-dd kk:mm:ss",
    "format": "M/d/yyyy"
  },
  "value": {
    "range": {
      "max": "",
      "min": "",
      "useStrict": false
    },
    "logarithmic": false,
    "break": {
      "enabled": false,
      "startValue": 0,
      "endValue": 100,
      "size": 0.05
    },
    "format": "#,###.##"
  },
  "appearance": {
    "opposite": false,
    "inside": false,
    "labels": {
      "color": "",
      "opacity": 1,
      "rotation": 0,
      "verticalCenter": "middle",
      "horizontalCenter": "middle"
    },
    "grid": {
      "color": "",
      "opacity": 1,
      "dashArray": "4,4",
      "minDistance": null,
      "position": 0.5
    },
    "font": {
      "size": "",
      "weight": 500
    }
  }
}

sample series config:

{
  "name": "Tray Filler",
  "label": {
    "text": "Tray Filler"
  },
  "visible": true,
  "hiddenInLegend": false,
  "defaultState": {
    "visible": true
  },
  "data": {
    "source": "statuses",
    "x": "t_stamp",
    "y": "Tray_Filler"
  },
  "xAxis": "time",
  "yAxis": "status",
  "zIndex": 0,
  "tooltip": {
    "enabled": true,
    "text": "{name}: [bold]{valueY}[/]",
    "cornerRadius": 3,
    "pointerLength": 4,
    "background": {
      "color": "",
      "opacity": 1
    }
  },
  "render": "line",
  "candlestick": {
    "open": {
      "x": "",
      "y": ""
    },
    "high": {
      "x": "",
      "y": ""
    },
    "low": {
      "x": "",
      "y": ""
    },
    "appearance": {
      "fill": {
        "color": "",
        "opacity": 1
      },
      "stroke": {
        "color": "",
        "opacity": 1,
        "width": 1
      },
      "stacked": false,
      "deriveFieldsFromData": {
        "fill": {
          "color": "",
          "opacity": ""
        },
        "stroke": {
          "color": "",
          "opacity": "",
          "width": ""
        }
      },
      "heatRules": {
        "enabled": false,
        "max": "",
        "min": "",
        "dataField": ""
      }
    }
  },
  "column": {
    "open": {
      "x": "",
      "y": ""
    },
    "appearance": {
      "fill": {
        "color": "",
        "opacity": 1
      },
      "stroke": {
        "color": "",
        "opacity": 1,
        "width": 1
      },
      "width": null,
      "height": null,
      "stacked": false,
      "deriveFieldsFromData": {
        "fill": {
          "color": "",
          "opacity": ""
        },
        "stroke": {
          "color": "",
          "opacity": "",
          "width": ""
        }
      },
      "heatRules": {
        "enabled": false,
        "max": "",
        "min": "",
        "dataField": "t_stamp"
      }
    }
  },
  "line": {
    "open": {
      "x": "",
      "y": ""
    },
    "appearance": {
      "connect": false,
      "tensionX": 1,
      "tensionY": 1,
      "minDistance": 0.1,
      "stroke": {
        "width": 3,
        "opacity": 1,
        "color": "#00ff00",
        "dashArray": ""
      },
      "fill": {
        "color": "",
        "opacity": 0
      },
      "bullets": [
        {
          "enabled": false,
          "render": "circle",
          "width": 10,
          "height": 10,
          "label": {
            "text": "{value}",
            "position": {
              "dx": 0,
              "dy": 0
            }
          },
          "tooltip": {
            "enabled": true,
            "text": "{name}: [bold]{valueY}[/]",
            "cornerRadius": 3,
            "pointerLength": 4,
            "background": {
              "color": "",
              "opacity": 1
            }
          },
          "fill": {
            "color": "",
            "opacity": 1
          },
          "stroke": {
            "color": "",
            "width": 1,
            "opacity": 1
          },
          "rotation": 0,
          "deriveFieldsFromData": {
            "fill": {
              "color": "",
              "opacity": ""
            },
            "stroke": {
              "color": "",
              "opacity": "",
              "width": ""
            },
            "rotation": ""
          },
          "heatRules": {
            "enabled": false,
            "max": 100,
            "min": 2,
            "dataField": ""
          }
        }
      ]
    }
  },
  "stepLine": {
    "open": {
      "x": "",
      "y": ""
    },
    "appearance": {
      "connect": true,
      "tensionX": 1,
      "tensionY": 1,
      "minDistance": 0.5,
      "stroke": {
        "width": 3,
        "opacity": 1,
        "color": "",
        "dashArray": ""
      },
      "fill": {
        "color": "",
        "opacity": 0
      },
      "bullets": [
        {
          "enabled": true,
          "render": "circle",
          "width": 10,
          "height": 10,
          "label": {
            "text": "{value}",
            "position": {
              "dx": 0,
              "dy": 0
            }
          },
          "tooltip": {
            "enabled": true,
            "text": "{name}: [bold]{valueY}[/]",
            "cornerRadius": 3,
            "pointerLength": 4,
            "background": {
              "color": "",
              "opacity": 1
            }
          },
          "fill": {
            "color": "",
            "opacity": 1
          },
          "stroke": {
            "color": "",
            "width": 1,
            "opacity": 1
          },
          "rotation": 0,
          "deriveFieldsFromData": {
            "fill": {
              "color": "",
              "opacity": ""
            },
            "stroke": {
              "color": "",
              "opacity": "",
              "width": ""
            },
            "rotation": ""
          },
          "heatRules": {
            "enabled": false,
            "max": 100,
            "min": 2,
            "dataField": ""
          }
        }
      ]
    }
  }
}

In case anyone else has a similar problem, it was an issue with how I defined my data. It appears you need to define every category for each element of your data source, or it has issues like shown above.

Example of an old source element:

{
  "Tray_Filler": "Disabled",
  "t_stamp": 2022-7-6 8:39:52
}

Example of a new source element (which makes it draw properly):

{
  "Lifter": None,
  "Tray_Filler": "Disabled",
  "Palletizer": None,
  "t_stamp": 2022-7-6 8:39:52,
  "Rain_Stick": None,
  "Case_Packer": None,
  "Harvester": None
}