[vtkusers] Parallel coordinates Extraction

Darshan Pai darshanpai at gmail.com
Tue Mar 29 20:15:30 EDT 2011


I think it is the VTK nightly from some date  in February . I will update
the VTK and see whether the error still persists .

Regards
Darshan

On Tue, Mar 29, 2011 at 7:40 PM, Eric E. Monson <emonson at cs.duke.edu> wrote:

> Hey Darshan,
>
> How recent is your version of VTK? Marcus checked in a bug fix a week or
> two ago that may fix this. If you're using a very recent version then maybe
> you can post your test code and we can take a look.
>
> -Eric
>
>
> On Mar 29, 2011, at 7:24 PM, Darshan Pai wrote:
>
> Working on it some more I see some more problems .
> I have 5 rows ans select the 5th row for color which is the category value
> 0 and 1 .
> I make a lookup table with 2 values having green and blue . I select the
> range from 0 -1 .
> So ideally the plot should show the category value 0 with green and 1 with
> blue .
>
> Instead I see that some of the lines of category zero are blue while some
> lines with category 1 are transparent . Also some lines change color in
> between . I don't understand what is wrong here .
>
> added snapshot
>
>
> On Mon, Mar 28, 2011 at 2:50 PM, Darshan Pai <darshanpai at gmail.com> wrote:
>
>> Yes that was the problem . Got it working . Thanks
>>
>> Darshan
>>
>>
>> On Mon, Mar 28, 2011 at 2:41 PM, Eric E. Monson <emonson at cs.duke.edu>wrote:
>>
>>> Those methods aren't defined in vtkPlot, but in vtkPlotPoints and
>>> vtkPlotParallelCoordinates separately. You'll have to cast the GetPlot() to
>>> the correct type.
>>>
>>> -E
>>>
>>> On Mar 28, 2011, at 2:39 PM, Darshan Pai wrote:
>>>
>>> .\PC.cpp(77) : error C2039: 'SetScalarVisibility' : is not a member of
>>> 'vtkPlot'
>>> 1>        C:\vtkcvs\VTK\Charts\vtkPlot.h(42) : see declaration of
>>> 'vtkPlot'
>>> 1>..\PC.cpp(78) : error C2039: 'SetLookupTable' : is not a member of
>>> 'vtkPlot'
>>> 1>        C:\vtkcvs\VTK\Charts\vtkPlot.h(42) : see declaration of
>>> 'vtkPlot'
>>> 1>..\PC.cpp(79) : error C2039: 'SelectColorArray' : is not a member of
>>> 'vtkPlot'
>>> 1>        C:\vtkcvs\VTK\Charts\vtkPlot.h(42) : see declaration of
>>> 'vtkPlot'
>>>
>>> Not sure if I am missing an include
>>>
>>> On Mon, Mar 28, 2011 at 2:22 PM, Eric E. Monson <emonson at cs.duke.edu>wrote:
>>>
>>>> That's strange since the Python is just a wrapper around the C++...
>>>>
>>>> -E
>>>>
>>>> On Mar 28, 2011, at 2:15 PM, Darshan Pai wrote:
>>>>
>>>> Thanks I get it .
>>>>
>>>> BTW I cannot convert it for C++ . Is there a way to port it to C++. Esp
>>>> ScalarVisibility and SelectColorArray is not defined in C++
>>>>
>>>> On Mon, Mar 28, 2011 at 9:44 AM, Eric E. Monson <emonson at cs.duke.edu>wrote:
>>>>
>>>>> 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
>>>>>
>>>>> <ParallelCoordinatesCatsColors.png>
>>>>>
>>>>>
>>>>>
>>>>>  # 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
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>
>>>
>>
> <plotoutput.jpg>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20110329/fc97b6e9/attachment.htm>


More information about the vtkusers mailing list