KNIME new Visualizations Nodes

Hello community,

I am excited to present to you the first new nodes for visualizations that we have created with a completely rewritten visualization framework. We started this effort to get our visualization nodes into a consistent style and generate a more pleasant look & feel for them. With this release we will ship the first 4 nodes in a labs extension called “KNIME Views (Labs)”. The 4 nodes are:

  • Scatter Plot
  • Line Plot
  • Bar Chart
  • Table View

These new nodes do not only inline the style of the visualizations, but we also focused on improving the user experience to help you build your visualizations as fast and as easy as possible. We therefore introduced a bunch of features I now want to present to you:

Preview of the view next to the dialog

Preview_next_to_configuration

Preview_next_to_configuration2060×1540 318 KB

What you can see in the screenshot above is the configuration window of the new “Scatter Plot” node. The dialog now always consists of the actual dialog elements and a preview of the actual view next to it. The great thing about this is, that if you now make changes to these settings it will be directly reflected in the actual view. With this reactivity we want you to be much faster on the iterations you need until you arrive at the desired output.

Node descriptions at the corresponding dialog elements

Node_descriptions

We have introduced setting descriptions right next to the setting where you actually want to use them. You still have the possibility to see the complete node description with all the options if you click on the node, but you also have the possibility now to see the description for the particular setting you are currently at, right next to the displayed setting.

Execution Overlay

Execution_Overlay

Execution_Overlay1031×775 52.7 KB

If the node is not executed you can still access the dialog and configure your node, but the preview of the node is only visible once the node is executed. To enable this inside the dialog, we have introduced this execution overlay, which enables you to execute the node directly in the dialog.

Indication of flow variables

Flow variables

If a setting is overwritten by a flow variable you will notice that the input element is disabled and an icon is displayed next to it. This icon will indicate that this particular setting is overwritten by a flow variable and shows the actual value of the flow variable. This icon will change depending if a flow variable is overwritten or if a setting exposes a flow variable. To configure flow variables you can open the context menu of any new node (right click) and will find a new entry called “Configure Flow Variables…”. This will open the usual flow variable dialog.

More features come in the future

This is just the beginning of the new visualizations. In the future we want to improve these 4 nodes that we have introduced this release and want to release additional visualization types. Furthermore, we are planning to tackle the following bigger topics:

  • Image generation
  • Color management
  • Shape management

Disclaimer

This extension is considered a preview and is currently under development. We might change the appearance of certain settings.

Feedback

We are looking forward to receiving your feedback. So, please reply here with any ideas, comments, or questions. If you run into any problems please follow the Bug Reporting Best Practices.

Example Workflow

There is an example workflow to showcase how to use the new views in conjunction with flow variables: KNIME Views (Labs) - Variables Handling – KNIME Hub

Known Issues

This is a list of known issues that we are aware of and are trying to fix at the moment.

  • If you select the text of an input with your mouse and input new content the input will be displayed in reversed order
  • Sometime the legend overlaps with the chart title
  • For the Bar Chart the axis labels often overlap with the axis ticks

Call to Action

Take a look at the nodes in action (A Virtual Tour of KNIME Analytics Platform 4.6.0 | KNIME) or try them out yourself by downloading the extension (KNIME Views (Labs) – KNIME Hub).
If you are missing any functionality, find anything that does not behave as you would expect it or want to see an additional visualization as a next node please reply with your feedback to this thread.

6 Likes

The interactive nature of the scatterplot is nice, and look forward to seeing all the missing features from the prior node added such as colouring points etc. Certainly a nice polished view.
However, I am having issues with Table View node. If the dataset has Chemical Structures present (I am using SDF) then the table view just shows completely empty rows.
Also with the Table View, I really do hope that it will finally catch up with the Interactive Table View node in being able to parse chemical structures, sort, reorder columns, resize rows, resize columns, HiLite, see all data in one page,View only HiLited etc…

2 Likes

Absolutely loving the new scatterplot, much improved on before in terms of style of visualisation.
However, I have just noticed an annoying feature which is that when you have the scatterplot open, you cannot go back to the KNIME workflow to do anything. All of KNIME is locked out until the scatterplot window is closed.
This is annoying, as oftentimes I like to have multiple views on the screen to look at various different visualisations at the same time.

1 Like

In the scatterplot, I am now getting this error, and cannot do anything in there. This is on the exact same dataset I was viewing earlier with the Scatterplot node. I have discovered deleting the node and adding a fresh one solves the problem. (KNIME 4.6, MacOS 12.4).

java.lang.NullPointerException

org.knime.base.views.node.scatterplot.data.ScatterPlotInitialDataImpl.(ScatterPlotInitialDataImpl.java:23)
org.knime.base.views.node.BaseViewsNodeView.lambda$3(BaseViewsNodeView.java:122)
org.knime.core.webui.data.json.impl.JsonInitialDataServiceImpl.getInitialDataObject(JsonInitialDataServiceImpl.java:97)
org.knime.core.webui.data.json.JsonInitialDataService.getInitialData(JsonInitialDataService.java:78)
org.knime.core.webui.node.AbstractNodeUIManager.callTextInitialDataService(AbstractNodeUIManager.java:152)
org.knime.gateway.api.entity.NodeUIExtensionEnt.(NodeUIExtensionEnt.java:105)
org.knime.gateway.api.entity.NodeViewEnt.(NodeViewEnt.java:105)
org.knime.gateway.api.entity.NodeViewEnt.create(NodeViewEnt.java:82)
org.knime.gateway.api.entity.NodeViewEntUtil.createNodeViewEntAndEventSources(NodeViewEntUtil.java:105)
org.knime.js.cef.nodeview.CEFNodeView.initializePageBuilder(CEFNodeView.java:247)
org.knime.js.cef.nodeview.CEFNodeView.lambda$7(CEFNodeView.java:337)
org.knime.js.cef.nodeview.CEFNodeView$2.completed(CEFNodeView.java:349)
com.equo.chromium.swt.internal.Chromium.lambda$6(Chromium.java:832)
org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40)
org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185)
org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4220)
org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3880)
org.knime.js.cef.nodeview.CEFNodeView.blockUntilDisposed(CEFNodeView.java:381)
org.knime.js.cef.nodeview.CEFNodeView.callOpenView(CEFNodeView.java:214)
org.knime.core.node.AbstractNodeView.openView(AbstractNodeView.java:197)
org.knime.core.node.Node.invokeOpenView(Node.java:2665)
org.knime.workbench.editor2.actions.OpenNodeViewAction.openNodeView(OpenNodeViewAction.java:143)
org.knime.workbench.editor2.editparts.NodeContainerEditPart.openNodeDialog(NodeContainerEditPart.java:858)
org.knime.workbench.editor2.editparts.NodeContainerEditPart.openNodeDialog(NodeContainerEditPart.java:845)
org.knime.workbench.editor2.editparts.NodeContainerEditPart.openDialog(NodeContainerEditPart.java:834)
org.knime.workbench.editor2.editparts.NodeContainerEditPart.performRequest(NodeContainerEditPart.java:398)
org.eclipse.gef.tools.SelectEditPartTracker.performOpen(SelectEditPartTracker.java:194)
org.eclipse.gef.tools.SelectEditPartTracker.handleDoubleClick(SelectEditPartTracker.java:137)
org.knime.workbench.editor2.WorkflowSelectionDragEditPartsTracker.handleDoubleClick(WorkflowSelectionDragEditPartsTracker.java:126)
org.eclipse.gef.tools.AbstractTool.mouseDoubleClick(AbstractTool.java:1069)
org.eclipse.gef.tools.SelectionTool.mouseDoubleClick(SelectionTool.java:527)
org.eclipse.gef.EditDomain.mouseDoubleClick(EditDomain.java:231)
org.eclipse.gef.ui.parts.DomainEventDispatcher.dispatchMouseDoubleClicked(DomainEventDispatcher.java:291)
org.eclipse.draw2d.LightweightSystem$EventHandler.mouseDoubleClick(LightweightSystem.java:518)
org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:200)
org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89)
org.eclipse.swt.widgets.Display.sendEvent(Display.java:4479)
org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1512)
org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1535)
org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1520)
org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1324)
org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4265)
org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3878)
org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1157)
org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1046)
org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155)
org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:644)
org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:551)
org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:156)
org.knime.product.rcp.KNIMEApplication.start(KNIMEApplication.java:183)
org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203)
org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:401)
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255)
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.base/java.lang.reflect.Method.invoke(Unknown Source)
org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:653)
org.eclipse.equinox.launcher.Main.basicRun(Main.java:590)
org.eclipse.equinox.launcher.Main.run(Main.java:1461)

1 Like

Hey richards,
thanks for your feedback. The Table View is in its beginning at the moment. We are planning to add more renderers and support for different formats. Also we are currently already working on adding searching/filtering capabilities to the table.
I will keep this thread updated once we have something to share.
Regarding your second point, that it is only possible to open one view at a time: This limitation is only in place if you open the dialog/preview. If you right click the node and open the actual view it is still possible to open multiple views.
Regarding the error: Is it possible for you to share the workflow you used to produce this error?

Greetings and thanks,
Daniel

3 Likes

Are there any plans to add mouseover popups, showing one or more column’s data? It would be quite useful to be able to show an identifier and some key data when mousing over. If (one of) the selected column is an image, it would be great if it could be displayed!

Hey rsherhod,

which view are you talking about? I assume the table view? What exactly do you mean with the popups showing the columns data? If we are talking about the table view we are currently working on getting images displayed.

Greetings,
Daniel

I actually meant the plots: XY, bar plots, line plots etc.

I’ve always thought that it would be useful to be able to mouseover a point on the plot, and have a popup display one or more values from the corresponding row. Something like the hover tooltips that bokeh and similar libraries can produce would be very useful for interactive interpretation of the data. If the row includes an image column, being able to pick that as the tooltip would be especially cool.

Showing images in the table view is important too, of course. Particularly asynchronous rendering of CellTypes that have an assigned renderer (e.g. RDKit for SMILES).

3 Likes

Got it, thanks for the explanation. Makes a lot of sense and I will add a feature request for this.

Greetings,
Daniel

1 Like

If you’d like to learn more about KNIME’s new visualization nodes (or ask questions), please join the webinar we’re hosting for a quick overview and Q&A on recently released KNIME Analytics Platform 4.6.0 & KNIME Server 4.15!

July 14, 2022
5:00 PM - 6:00 PM UTC +2 Berlin
10:00 AM - 11:00AM -5 Chicago

Register for the webinar and get highlights on the latest version:

  • A preview of the sleeker UI
  • Better Python scripting
  • New visualization nodes
  • An improved Snowflake integration
  • …and more!

Followed by a summary of the community feedback and a Q&A with our experts, @carstenhaubold and @roberto_cadili. Come prepared with your questions and get a sneak peek into what’s coming next.

Register here

2 Likes

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.

Hey,

thank you all for the valuable feedback and ideas.
With KNIME 4.7.0 we were able to publish the following 7 additional view nodes:

  • Boxplot node
  • Density plot
  • Heatmap node
  • Histogram node
  • Pie chart
  • Stacked area chart
  • Statistics view

To see them in action either try them out yourself or see the What’s New Page.
We also did various improvements to the four existing views and especially focused on the Table View node. This node now offers the following new features:

  • A search field to search in the entire table or individual filters to filter in specific columns
    Filtering

  • Resize the columns to make them as wide as you need them
    ColumnResizing

  • Lazy loading and virtual scrolling to enable to scroll through huge tables
    LazyLoading

  • A compact mode, for cases where space is a limiting factor
    CompactMode

@richards99 chemical structures should now be supported and if you chose the RDKit 2D depiction as default renderer in the KNIME preferences you will see the molecules in the table view. We are currently working on a proper renderer selection in the table itself and are also aware of the problem that the images are small at the moment.

As with the last views, we are very eager to hear what you think about the new improvements and the new views in general.

Greetings,
Daniel

4 Likes

Hi Daniel,
is there a possibility in Scatter Plot (Labs) to feed the Node with variables for the reference line?
and furthermore will it be possible in the future to add not only horizontal reference lines, but also vertical?
Sincerely
Flo

Hey @Flo1124,
this is possible to som extend. You can change existing reference lines via flow variables, but it is currently not possible to add new or delete existing reference lines with flow variables. (see attached screenshot)

yes, we will improve this feature in the future, but there is currently no timeline for it.

Greetings,
Daniel

2 Likes

Hi Daniel,

I am just “playing” with the new KNIME Table View. One minor comment in comparison to the Javascript Table View is that the new node does not support HTML (which is a pity in one of my workflows as I am structuring a test description through HTML with line breaks, bold fonts…).

It would be very nice and even more important if the node would be a KNIME Labs Table Edit node …
Any thoughts from your side in this direction?

One general comment/question to the new Views… on the “long” run styling via a css stylesheet (if well documented) or even something more convenient (eg. change font size…) would be really appreciated…

Thank you very much for considering and thank you very much for the constant effort of the KNIME team!

Best regards,

Jürgen

Hey @Juergen,

great to hear that you are trying out the new table view. We are currently working on enabling HTML content for the new table view and it should soon land in the nightly :slight_smile:.

The Table Editor is on our list, but it will take some more thinking and time to get this right.

For the styling we are thinking about going into a theme based direction. Which means that you can set up label sizes for all your views without fiddling around with custom css styles. What is your use case for custom styling?

Greetings,
Daniel

1 Like

Hi Daniel,

we are using the different Lab views (like LinePlot and ScatterPlots) -due to there nice interactive features- in online meetings where we share screens. As I am ggplot addicted I prefer (e.g.) custom colours (like the company brand colors) and “readably sized” labels (better larger than too small), which are not easily accessible in the Views by now (??).

Theming is a nice idea, my “favorite blueprint” would be ggplot with (e.g.) theme_bw (base_size = …). For me the set of a base_size which will influence every label size would be great.

Best regards,

Jürgen

Hey @Juergen,

thanks for the additional insights. I am not too familiar with ggplot but I like the idea of a base_size.
What exactly is it that you want to color with your brand colors? If it is the actual data points than I have good news. We are currently working on enabling coloring for your series in the new plots.

Greetings,
Daniel

Hi @DanielBog ,

that is exactly what I meant… very good news.

The same holds true for the “shapes” of a scatterplot point.

And together with the themes (and through this the adaptation of the text font size) the plots are getting more and more useful for our work.

Thank you very much for the team’s effort!

Best regards,

Jürgen

1 Like