def __init__(self, parent=None): QCellWidget.__init__(self, parent) centralLayout = QtGui.QVBoxLayout() self.setLayout(centralLayout) centralLayout.setMargin(0) centralLayout.setSpacing(0) self.view = vtk.vtkContextView() self.widget = QVTKRenderWindowInteractor( self, rw=self.view.GetRenderWindow(), iren=self.view.GetInteractor()) self.chart = vtk.vtkChartParallelCoordinates() self.view.GetScene().AddItem(self.chart) self.layout().addWidget(self.widget) # Create a annotation link to access selection in parallel coordinates view self.annotationLink = vtk.vtkAnnotationLink() # If you don't set the FieldType explicitly it ends up as UNKNOWN (as of 21 Feb 2010) # See vtkSelectionNode doc for field and content type enum values self.annotationLink.GetCurrentSelection().GetNode(0).SetFieldType( 1) # Point self.annotationLink.GetCurrentSelection().GetNode(0).SetContentType( 4) # Indices # Connect the annotation link to the parallel coordinates representation self.chart.SetAnnotationLink(self.annotationLink) self.annotationLink.AddObserver("AnnotationChangedEvent", self.selectionCallback)
def __init__(self, parent=None): QCellWidget.__init__(self, parent) centralLayout = QtGui.QVBoxLayout() self.setLayout(centralLayout) centralLayout.setMargin(0) centralLayout.setSpacing(0) self.view = vtk.vtkContextView() self.widget = QVTKRenderWindowInteractor(self, rw=self.view.GetRenderWindow(), iren=self.view.GetInteractor() ) self.chart = vtk.vtkChartParallelCoordinates() self.view.GetScene().AddItem(self.chart) self.layout().addWidget(self.widget) # Create a annotation link to access selection in parallel coordinates view self.annotationLink = vtk.vtkAnnotationLink() # If you don't set the FieldType explicitly it ends up as UNKNOWN (as of 21 Feb 2010) # See vtkSelectionNode doc for field and content type enum values self.annotationLink.GetCurrentSelection().GetNode(0).SetFieldType(1) # Point self.annotationLink.GetCurrentSelection().GetNode(0).SetContentType(4) # Indices # Connect the annotation link to the parallel coordinates representation self.chart.SetAnnotationLink(self.annotationLink) self.annotationLink.AddObserver("AnnotationChangedEvent", self.selectionCallback)
def generateParallelCoordinatesChart(self): input = self.inputModule().getOutput() ptData = input.GetPointData() narrays = ptData.GetNumberOfArrays() arrays = [] # Create a table with some points in it... table = vtk.vtkTable() for iArray in range(narrays): table.AddColumn(ptData.GetArray(iArray)) # Set up a 2D scene, add an XY chart to it view = vtk.vtkContextView() # view.SetRenderer( self.renderer ) # view.SetRenderWindow( self.renderer.GetRenderWindow() ) view.GetRenderer().SetBackground(1.0, 1.0, 1.0) view.GetRenderWindow().SetSize(600, 300) chart = vtk.vtkChartParallelCoordinates() brush = vtk.vtkBrush() brush.SetColorF(0.1, 0.1, 0.1) chart.SetBackgroundBrush(brush) # Create a annotation link to access selection in parallel coordinates view annotationLink = vtk.vtkAnnotationLink() # If you don't set the FieldType explicitly it ends up as UNKNOWN (as of 21 Feb 2010) # See vtkSelectionNode doc for field and content type enum values annotationLink.GetCurrentSelection().GetNode(0).SetFieldType( 1) # Point annotationLink.GetCurrentSelection().GetNode(0).SetContentType( 4) # Indices # Connect the annotation link to the parallel coordinates representation chart.SetAnnotationLink(annotationLink) view.GetScene().AddItem(chart) chart.GetPlot(0).SetInput(table) def selectionCallback(caller, event): annSel = annotationLink.GetCurrentSelection() if annSel.GetNumberOfNodes() > 0: idxArr = annSel.GetNode(0).GetSelectionList() if idxArr.GetNumberOfTuples() > 0: print VN.vtk_to_numpy(idxArr) # Set up callback to update 3d render window when selections are changed in # parallel coordinates view annotationLink.AddObserver("AnnotationChangedEvent", selectionCallback) # view.ResetCamera() # view.Render() # view.GetInteractor().Start() return view
def generateParallelCoordinatesChart( self ): input = self.inputModule().getOutput() ptData = input.GetPointData() narrays = ptData.GetNumberOfArrays() arrays = [] # Create a table with some points in it... table = vtk.vtkTable() for iArray in range( narrays ): table.AddColumn( ptData.GetArray( iArray ) ) # Set up a 2D scene, add an XY chart to it view = vtk.vtkContextView() # view.SetRenderer( self.renderer ) # view.SetRenderWindow( self.renderer.GetRenderWindow() ) view.GetRenderer().SetBackground(1.0, 1.0, 1.0) view.GetRenderWindow().SetSize(600,300) chart = vtk.vtkChartParallelCoordinates() brush = vtk.vtkBrush() brush.SetColorF (0.1,0.1,0.1) chart.SetBackgroundBrush(brush) # Create a annotation link to access selection in parallel coordinates view annotationLink = vtk.vtkAnnotationLink() # If you don't set the FieldType explicitly it ends up as UNKNOWN (as of 21 Feb 2010) # See vtkSelectionNode doc for field and content type enum values annotationLink.GetCurrentSelection().GetNode(0).SetFieldType(1) # Point annotationLink.GetCurrentSelection().GetNode(0).SetContentType(4) # Indices # Connect the annotation link to the parallel coordinates representation chart.SetAnnotationLink(annotationLink) view.GetScene().AddItem(chart) chart.GetPlot(0).SetInput(table) def selectionCallback(caller, event): annSel = annotationLink.GetCurrentSelection() if annSel.GetNumberOfNodes() > 0: idxArr = annSel.GetNode(0).GetSelectionList() if idxArr.GetNumberOfTuples() > 0: print VN.vtk_to_numpy(idxArr) # Set up callback to update 3d render window when selections are changed in # parallel coordinates view annotationLink.AddObserver("AnnotationChangedEvent", selectionCallback) # view.ResetCamera() # view.Render() # view.GetInteractor().Start() return view
def testLinePlot(self): "Test if colored parallel coordinates plots can be built with python" # Set up a 2D scene, add a PC 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) # Create a table with some points in it arrX = vtk.vtkFloatArray() arrX.SetName("XAxis") arrC = vtk.vtkFloatArray() arrC.SetName("Cosine") arrS = vtk.vtkFloatArray() arrS.SetName("Sine") arrS2 = vtk.vtkFloatArray() arrS2.SetName("Tan") numPoints = 200 inc = 7.5 / (numPoints-1) for i in range(numPoints): arrX.InsertNextValue(i * inc) arrC.InsertNextValue(math.cos(i * inc) + 0.0) arrS.InsertNextValue(math.sin(i * inc) + 0.0) arrS2.InsertNextValue(math.tan(i * inc) + 0.5) table = vtk.vtkTable() table.AddColumn(arrX) table.AddColumn(arrC) table.AddColumn(arrS) table.AddColumn(arrS2) # Create blue to gray to red lookup table lut = vtk.vtkLookupTable() lutNum = 256 lut.SetNumberOfTableValues(lutNum) lut.Build() ctf = vtk.vtkColorTransferFunction() ctf.SetColorSpaceToDiverging() cl = [] # Variant of Colorbrewer RdBu 5 cl.append([float(cc)/255.0 for cc in [202, 0, 32]]) cl.append([float(cc)/255.0 for cc in [244, 165, 130]]) cl.append([float(cc)/255.0 for cc in [140, 140, 140]]) cl.append([float(cc)/255.0 for cc in [146, 197, 222]]) cl.append([float(cc)/255.0 for cc in [5, 113, 176]]) vv = [float(xx)/float(len(cl)-1) for xx in range(len(cl))] vv.reverse() for pt,color in zip(vv,cl): ctf.AddRGBPoint(pt, color[0], color[1], color[2]) for ii,ss in enumerate([float(xx)/float(lutNum) for xx in range(lutNum)]): cc = ctf.GetColor(ss) lut.SetTableValue(ii,cc[0],cc[1],cc[2],1.0) lut.SetAlpha(0.25) lut.SetRange(-1, 1) chart.GetPlot(0).SetInputData(table) chart.GetPlot(0).SetScalarVisibility(1) chart.GetPlot(0).SetLookupTable(lut) chart.GetPlot(0).SelectColorArray("Cosine") view.GetRenderWindow().SetMultiSamples(0) view.GetRenderWindow().Render() img_file = "TestParallelCoordinatesColors.png" vtk.test.Testing.compareImage(view.GetRenderWindow(),vtk.test.Testing.getAbsImagePath(img_file),threshold=25) vtk.test.Testing.interact()
reader.SetFileName(inputFilename) reader.SetHaveHeaders(1) reader.DetectNumericColumnsOn() reader.SetFieldDelimiterCharacters(",") reader.Update() table = reader.GetOutput() lookup = vtk.vtkLookupTable() lookup.SetNumberOfTableValues(78) lookup.Build() for i in range(0, 78): lookup.SetTableValue(i, (i%7)/7.00, (i%3)/3.00, (i%4)/4.00) lookup.SetRange(0, 78) lookup.SetAlpha(1.0) chart = vtk.vtkChartParallelCoordinates() chart.GetPlot(0).SetInputData(table) chart.SetColumnVisibilityAll(True) chart.SetColumnVisibility("LAUS Area Code ", False) chart.SetColumnVisibility("State FIPS Code", False) chart.SetColumnVisibility("County FIPS Code", False) chart.SetColumnVisibility("Area Title", False) chart.SetColumnVisibility("State", False) chart.SetColumnVisibility("Period", False) chart.SetColumnVisibility("Date", False) chart.GetPlot(0).SetScalarVisibility(1) chart.GetPlot(0).SetLookupTable(lookup) chart.GetPlot(0).SelectColorArray("County FIPS Code") chart.GetPlot(0).GetPen().SetOpacityF(0.8)