Hello. I have some problem with showing plots on the graph. I should show some plots on one graph in different colors. I am using attribute node to change color programmatically but than more plots I show more time it takes to update plots in new color. How can I make it faster? Thanks Timur.
Hi Timur, Choose the colors before plotting something (either programmatically or at design time if your application does not require color change after plotting the graph) Hope I understood your problem
> Hello. I have some problem with showing plots on the graph. > I should show some plots on one graph in different colors. I am using > attribute node to change color programmatically but than more plots I > show more time it takes to update plots in new color. How can I make > it faster?
Two approaches to take and a couple things to watch for. The graph has a property for the Active Plot. Setting this larger than the number of plots in the data doesn't automatically allocate plots for the graph.
You can grow the plot legend to preallocate plots, or wire data that describes plots, even empty plots, and this will allocate them.
Once you have plots, each time you change the color or other attributes, the graph will typically redraw, and as you noted, this can ta ke some time if you have lots of plots or complicated data.
If you plot very little data, such as a bunch of empty plots, the redraws will take very little time, then write the data to the graph.
If you have LV6, a newer way of doing this, which also works with most other display intensive operations is to write to the Deferred Updates property for the panel. Drop a property node and choose the VI class. From this select the Panel property. Wire this to another property node, and on the list you will see a property for Deferring panel updates. Set this to True, then update all of the plots regardless of how much data is in them. Update any other properties you like, then set the Deferred Updates to False to draw the results in one pass.
I _HAD_ a similar problem and have spent half a day struggling with the guide offered by Greg McKaskle. For those in a similar position, I offer a more detailed solution:
I have a Digital Waveform Graph (LabView 6i) in which I want to speed up changes of several plot colours and names. Programmatically this is a three-stage process (which suits a Sequence Structure). First, updates of the Digital Waveform Graph are disabled. Second, the graph properties are updated within the program, but no changes are made to the displayed panel. Third, updates of the Digital Waveform Graph are enabled. It is during the last stage that the graph appears to update - quickly.
The second stage is assumed complete and working but slow. The first and last stages are added to accelerate the display process.
The first stage: create a property node for the Digital Waveform Graph (presumably other display intensive indicators may be changed similarly - I haven't tried) by right-mouse-click on the Digital Waveform Graph VI in the Diagram and select Create -> Property Node. Right click on this new property node, select Properties -> Owning VI to change the property accessed by the Digital Waveform Graph property node. Next use the Functions Palette to create a general property node (Functions Palette -> Application Control -> Property Node. Wire the output from the Digital Waveform Graph property node, 'Owning VI' property to the 'reference' input of the new general property node. The properties available from the property node change. Right click on this new property node, select Properties -> Front Panel. Create a second general property node as descried above. Wire the output of the first general property node Panel property to the 'reference' input of the new general property node. The properties available from the second general property node change. Right-click on this property node, select Properties -> Defer Panel Updates. This property must be set to input. This is done by Right-click and select Change To Write. Now wire a True boolean constant (Functions Palette -> Boolean -> True Constant) to the DeferPanUpdts input.
The second stage is already working of course.
The third stage is identical to the first, but a False boolean constant is wired to the DeferPanUpdts input.
If you would like, you can wire the error pins of the various property nodes rather than use a sequence.
Also, if you know that the digital graph is always located on the panel, you can avoid a few property nodes. Getting the VI that owns the graph is a more general solution and works well too. Additionally, notice that the Defer Updates property is a Panel property. It is not specific to graphs, but is intended to defer all updates to the panel.
.... Programmatically this is > a three-stage process (which suits a Sequence Structure). First, > updates of the Digital Waveform Graph are disabled. Second, the graph > properties are updated within the program, but no changes are made to > the displayed panel. Third, updates of t he Digital Waveform Graph are > enabled. It is during the last stage that the graph appears to update > - quickly. >
Thanks for these further comments. You're right, of course. A sequence is not necessary. Personally, I'm not keen to use Sequence structures because one cannot see the 'whole picture' at a glance. It does have the benefit of hiding some detail, which is why I chose to use it in this case
Thanks also for pointing out that ALL panel updates are deferred while I need to set only the graph deferred. This is fairy logical I guess, because the Owning VI must control the whole panel and this fact may help me later.
I'm a relative newby to LabView, but have been programming for some time so have a different perspective and knowledge base, which can cloud my understanding at times.