Skip to content

More features in Parallel Coordinates #105

@Groostav

Description

@Groostav

Hi @HanSolo, thanks for all your work in #5

we have a bad PCP implementation, but it has so much functionality picked up that I couldn't drop your (faster/simpler & properly encapsulated) PCP chart, despite the fact that it was so much more elegant.

Java 17 has pushed our implementation of PCP into non-compliance. Its using a bunch of packages that are not exported, and our previous solution of "just use the javafx jars instead of the javafx module" puts us in a strange place for compatibility -- and afoul of JDK-8256362

So I have got a couple weeks to spend replacing PCP on our application. In order for this to be accepted into our application I need to get it a little closer to feature parity with my current implementation which I believe will necessitate some changes.

  1. smaller features I want:
    • selection model is exposed as mutable, such that a user can programatically select a dataObject for selection, and have it higlighted as if it had been filtered
    • "armed" and "selected" states --preferably with CSS. Not actually sure how css is wired to charts
      • the armed state is the name of the state for a button that is hovered over by the cursor but not clicked. I want this same functionality
    • prefWidth and prefHeight of -1 should properly scale with window size. Right now it displays a very strange behaviour.
      • ill put more comments in a detail below, this might be my fault...
    • multiple filters should further reduce the data set, rather than removing the first filter.
    • 'name' should be optional (ie null is a valid value), and should not be used to identify the point in the selection.
      • a reasonable default might be to use "Item-1234" as a default name, but this requires fast index-of, and i believe name is not observable, meaning if the items() order changes there is no mechanism to invalidate existing labels.
  • larger features I want.
    • support for running the chart with no points (a kind of "show axies only" mode), and 1 point (this currently causes the calcAutoScale functionality to crash), and support for NaN values in the data.
      • The strategy of "read the schema off the first point" simply wont work here; it seems an assumed invariant was that the chart would be constructed when the data was known. This is simply not the case for our data: we know (most of) the schema ahead of time, but the data is streamed into this chart.
      • interestingly, I cannot imagine how I would implement without a breaking API change. In this sense it will likely be better to make my modifications on a new class, rather than your existing class.
    • support for bands instead of points. The idea here is that I can give you a DataObject that expresses value as a pair of lower-bound and upper-bound doubles, rather than a single scalar value. In this way It would be rendered as a line that intersects the axies on a segment of the axis rather than a single spot on the axis, as in the pictures seen in Add a Parallel Coordinates Plot #5
      • my plan for implementation would be to use a canvas stroke where possible, and then use a path encapsulating any areas needed.

I believe I have a pretty good handle on how to do most of this, my question is how I should go about it.

I could of course simply fork your repo, add the functionality and build it for my own project, but I'd rather contritube back, but I'm not sure how much of my above feature requests you would consider to be helpful for your project and how many you want to make part of my own. I'm guessing everything in the smaller section I could PR and you would be interested in, but the larger changes I might simply need to keep to myself.

Thanks again for your work!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions