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…

1 Like

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).

2 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.