[vtkusers] Parallel coordinates Extraction

Eric E. Monson emonson at cs.duke.edu
Mon Mar 28 09:44:48 EDT 2011


Hey Darshan,

I don't remember if there's a way to color the lines in the older parallel coordinates view (and don't have time to look right now), but in the new Charts classes you can color plots by another array. This will be in 5.8 and it's been in git master for a while, but it wasn't in 5.6.

(There is a little bug lingering in the parallel coordinates charts plot which causes it to use the plot's pen opacity instead of the opacity of the lookup table you've passed it, but I think Marcus is trying to get around to checking in a fix sometime soon.)

Here's an example that uses categorical colors with the parallel coordinates:

Talk to you later,
-Eric

· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
Eric E Monson
Duke Visualization Technology Group




# Translated to Python from [VTK]/Charts/Testing/Cxx/TestPCPlot.cxx

import vtk
import math

# Set up a 2D scene, add an XY chart to it
view = vtk.vtkContextView()
view.GetRenderer().SetBackground(1.0, 1.0, 1.0)
view.GetRenderWindow().SetSize(600,300)

chart = vtk.vtkChartParallelCoordinates()
view.GetScene().AddItem(chart)

# Test charting with a few more points...
numPoints = 100
numCats = 8
inc = 7.5 / (numPoints-1)

# Create arrays that will end up as table columns
arrX = vtk.vtkFloatArray()
arrX.SetName("XAxis")
arrX.SetNumberOfComponents(1)
arrX.SetNumberOfTuples(numPoints)
arrC = vtk.vtkFloatArray()
arrC.SetName("Cosine")
arrC.SetNumberOfComponents(1)
arrC.SetNumberOfTuples(numPoints)
arrS = vtk.vtkFloatArray()
arrS.SetName("Sine")
arrS.SetNumberOfComponents(1)
arrS.SetNumberOfTuples(numPoints)

arrCat = vtk.vtkIntArray()
arrCat.SetName("Category_ids")
arrCat.SetNumberOfComponents(1)
arrCat.SetNumberOfTuples(numPoints)

# For some reason table.SetValue() is not wrapped
# 	so need to build arrays and then add as columns
# Would be more elegant to use numpy, but wanted to keep it out for now...
for i in range(numPoints):
	arrX.SetTuple1(i, i * inc)
	arrC.SetTuple1(i, math.cos(i * inc) + 0.0)
	arrS.SetTuple1(i, math.sin(i * inc) + 0.0)
	arrCat.SetTuple1(i, int(float(numCats)*float(i)/float(numPoints)))

# Create a table with some points in it...
table = vtk.vtkTable()
table.AddColumn(arrX)
table.AddColumn(arrC)
table.AddColumn(arrS)
table.AddColumn(arrCat)

cl = []
cl.append([float(cc)/255.0 for cc in [27, 158, 119]])	# Colorbrewer Dark2
cl.append([float(cc)/255.0 for cc in [217, 95, 2]])
cl.append([float(cc)/255.0 for cc in [117, 112, 179]])
cl.append([float(cc)/255.0 for cc in [231, 41, 138]])
cl.append([float(cc)/255.0 for cc in [102, 166, 30]])
cl.append([float(cc)/255.0 for cc in [230, 171, 2]])
cl.append([float(cc)/255.0 for cc in [166, 118, 29]])
cl.append([float(cc)/255.0 for cc in [102, 102, 102]])

lut = vtk.vtkLookupTable()
lutNum = len(cl)
lut.SetNumberOfTableValues(lutNum)
lut.Build()
for ii,cc in enumerate(cl):
	lut.SetTableValue(ii,cc[0],cc[1],cc[2],1.0)
lut.SetRange(0,numCats-1)
lut.SetAlpha(1.0)

chart.GetPlot(0).SetInput(table)
chart.GetPlot(0).SetScalarVisibility(1)
chart.GetPlot(0).SetLookupTable(lut)
chart.GetPlot(0).SelectColorArray("Category_ids")

chart.GetPlot(0).GetPen().SetOpacityF(0.8)

view.GetRenderWindow().SetMultiSamples(0)
view.GetRenderWindow().Render()

view.GetInteractor().Start()



On Mar 26, 2011, at 1:15 AM, Darshan Pai wrote:

> Oh ok , so i guess it somehow picks up the internal arrays from the RTanalyticsSOurce.
> Is there anyway to have some of the lines as different colors ? I mean like categorical data.
> There is also a Parallel Coordinates in the Charts too .
> 
> On Fri, Mar 25, 2011 at 10:38 PM, David Doria <daviddoria at gmail.com> wrote:
> On Fri, Mar 25, 2011 at 8:12 PM, Darshan Pai <darshanpai at gmail.com> wrote:
> >
> > This example
> > http://www.vtk.org/Wiki/VTK/Examples/Python/Infovis/ParallelCoordinatesExtraction
> > I can run it , but can someone please explain this part in the code
> > rep.SetInputArrayToProcess(0,0,0,0,'RTDataGradient')
> > rep.SetInputArrayToProcess(1,0,0,0,'RTData')
> > rep.SetInputArrayToProcess(2,0,0,0,'Elevation')
> > rep.SetInputArrayToProcess(3,0,0,0,'BrownianVectors')
> >
> > How is this data acquired ? I never used Infovis before so I am not clear what these lines are doing exactly
> > Thanks in advance
> > Darshan
> 
> The SetInputArrayToProcess function is among the most confusing ones I
> have encountered (it doesn't have anything to do with vtkInfovis)
> 
> http://www.vtk.org/doc/nightly/html/classvtkAlgorithm.html#a6bea16e1329609dbccce0ff8d2367484
> 
> I believe all that is happening is the arrays RTDataGradient, RTData,
> Elevation, BrownianVectors are being set as vertical axes in the
> parallel coordinate representation. The first parameter, 'idx', is
> setting the 0th array, the 1st array, etc. I just always put 0's for
> the rest of the arguments.
> 
> It has always seemed to me that for saneness there should be a
> 
> void SetInputArrayToProcess (int idx, const char *name)
> 
> so the explanation of "I don't know, just put 0's" doesn't ever have to be used.
> 
> David
> 
> _______________________________________________
> Powered by www.kitware.com
> 
> Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html
> 
> Please keep messages on-topic and check the VTK FAQ at: http://www.vtk.org/Wiki/VTK_FAQ
> 
> Follow this link to subscribe/unsubscribe:
> http://www.vtk.org/mailman/listinfo/vtkusers

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20110328/738ff4dc/attachment.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: ParallelCoordinatesCatsColors.png
Type: image/png
Size: 25296 bytes
Desc: not available
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20110328/738ff4dc/attachment.png>


More information about the vtkusers mailing list