<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <br>
    Hello,<br>
    i need a 2D Scatter Plot and i found an example of this here
    <meta http-equiv="content-type" content="text/html;
      charset=ISO-8859-1">
    <a
      href="http://www.vtk.org/Wiki/VTK/Examples/Cxx/Plotting/ScatterPlot">http://www.vtk.org/Wiki/VTK/Examples/Cxx/Plotting/ScatterPlot</a>
    <br>
    <br>
    Subsequently it was necessary have a multiple scatter plot with in
    addition the possibility of change size, shape and color of each
    single point. It was hard understand how to do this on the previous
    example and i think is not possible to do this with a single
    vtkPlot*. So i've done some modification to the previous code and
    are attached here.&nbsp; But now the problem is that the rendering of the
    plot is too slow for a lot of points....<br>
    <br>
    maybe i'm wrong but is possible to change shape, color and size for
    each single point in a more simple way than mine?<br>
    <br>
    <br>
    Thanks<br>
    <br>
    Giuseppe Marco Randazzo<br>
    <br>
    &nbsp;------------------&nbsp; ------------------&nbsp; ------------------&nbsp;
    ------------------ <br>
    //ScatterPlot2.cxx<br>
    <br>
    #include &lt;vtkVersion.h&gt;<br>
    #include &lt;vtkSmartPointer.h&gt;<br>
    &nbsp;<br>
    #include &lt;vtkChartXY.h&gt;<br>
    #include &lt;vtkContextScene.h&gt;<br>
    #include &lt;vtkContextView.h&gt;<br>
    #include &lt;vtkFloatArray.h&gt;<br>
    #include &lt;vtkPlotPoints.h&gt;<br>
    #include &lt;vtkRenderWindow.h&gt;<br>
    #include &lt;vtkRenderWindowInteractor.h&gt;<br>
    #include &lt;vtkRenderer.h&gt;<br>
    #include &lt;vtkTable.h&gt;<br>
    #include &lt;vtkStringArray.h&gt;<br>
    #include &lt;vtkVariantArray.h&gt;<br>
    #include &lt;vtkDoubleArray.h&gt;<br>
    <br>
    #include &lt;iostream&gt;<br>
    #include &lt;sstream&gt;<br>
    #include &lt;iomanip&gt;<br>
    #include &lt;vector&gt;<br>
    using namespace std;<br>
    <br>
    template &lt;typename T&gt;<br>
    &nbsp; string NumberToString ( T Number )<br>
    &nbsp; {<br>
    &nbsp;&nbsp;&nbsp;&nbsp; ostringstream ss;<br>
    &nbsp;&nbsp;&nbsp;&nbsp; ss &lt;&lt; Number;<br>
    &nbsp;&nbsp;&nbsp;&nbsp; return ss.str();<br>
    &nbsp; }<br>
    <br>
    int main(int, char*[])<br>
    {<br>
    &nbsp; // Set up a 2D scene, add an XY chart to it<br>
    &nbsp; vtkSmartPointer&lt;vtkContextView&gt; view =<br>
    &nbsp;&nbsp;&nbsp; vtkSmartPointer&lt;vtkContextView&gt;::New();<br>
    &nbsp; view-&gt;GetRenderer()-&gt;SetBackground(1.0, 1.0, 1.0);<br>
    &nbsp; view-&gt;GetRenderWindow()-&gt;SetSize(400, 300);<br>
    &nbsp;<br>
    &nbsp; vtkSmartPointer&lt;vtkChartXY&gt; chart =<br>
    &nbsp;&nbsp;&nbsp; vtkSmartPointer&lt;vtkChartXY&gt;::New();<br>
    &nbsp; view-&gt;GetScene()-&gt;AddItem(chart);<br>
    &nbsp; chart-&gt;SetShowLegend(false);<br>
    &nbsp;<br>
    &nbsp; std::vector&lt; vtkSmartPointer&lt;vtkTable&gt; &gt; tablist;<br>
    &nbsp; std::vector&lt; vtkPlot* &gt; pointlist;<br>
    &nbsp; <br>
    &nbsp; int numPoints = 10000;<br>
    &nbsp; float inc = 7.5 / (numPoints-1);<br>
    &nbsp; for (int i = 0; i &lt; numPoints; ++i){<br>
    &nbsp; // Create a table with some points in it...<br>
    &nbsp;&nbsp;&nbsp; vtkSmartPointer&lt;vtkTable&gt; table =<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vtkSmartPointer&lt;vtkTable&gt;::New();<br>
    &nbsp; <br>
    &nbsp;&nbsp;&nbsp; for(int j = 0; j &lt; 4; j++){<br>
    &nbsp;&nbsp;&nbsp; vtkSmartPointer&lt;vtkFloatArray&gt; arrX =<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vtkSmartPointer&lt;vtkFloatArray&gt;::New();<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string name = "Axis";<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name += NumberToString(j+1);<br>
    &nbsp;&nbsp;&nbsp; arrX-&gt;SetName(name.c_str());<br>
    &nbsp;&nbsp;&nbsp; table-&gt;AddColumn(arrX);<br>
    &nbsp;&nbsp;&nbsp; }<br>
    &nbsp;<br>
    &nbsp; // Test charting with a few more points...<br>
    &nbsp; <br>
    &nbsp;&nbsp;&nbsp; table-&gt;SetNumberOfRows(1);<br>
    &nbsp;<br>
    &nbsp;&nbsp;&nbsp; table-&gt;SetValue(0, 0, i * inc);<br>
    &nbsp;&nbsp;&nbsp; table-&gt;SetValue(0, 1, cos(i * inc) + 0.0);<br>
    &nbsp;&nbsp;&nbsp; table-&gt;SetValue(0, 2, sin(i * inc) + 0.0);<br>
    &nbsp;&nbsp;&nbsp; table-&gt;SetValue(0, 3, sin(i * inc) - cos(i * inc));<br>
    &nbsp;&nbsp;&nbsp; <br>
    &nbsp;&nbsp;&nbsp; tablist.push_back(table);<br>
    &nbsp; }<br>
    &nbsp; <br>
    &nbsp; for (int i = 0; i &lt; numPoints; ++i){<br>
    &nbsp; // Add multiple scatter plots, setting the colors etc<br>
    &nbsp;&nbsp;&nbsp; vtkPlot *points = chart-&gt;AddPlot(vtkChart::POINTS);<br>
    &nbsp;&nbsp;&nbsp; points-&gt;SetInput(tablist[i], 0, 1);<br>
    &nbsp;&nbsp;&nbsp; points-&gt;SetColor(0, 0, 0, 255);<br>
    &nbsp;&nbsp;&nbsp; points-&gt;SetWidth(1.0);<br>
    &nbsp;&nbsp;&nbsp;
vtkPlotPoints::SafeDownCast(points)-&gt;SetMarkerStyle(vtkPlotPoints::CIRCLE);<br>
    &nbsp;&nbsp;&nbsp; pointlist.push_back(points);<br>
    &nbsp; }<br>
    &nbsp; <br>
    &nbsp; <br>
    &nbsp; int b = 1;<br>
    &nbsp; for(int i = 0; i &lt; numPoints; ++i){<br>
    &nbsp;&nbsp;&nbsp; if(b == 4){<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b = 1;<br>
    &nbsp;&nbsp;&nbsp; }<br>
    &nbsp;&nbsp;&nbsp; <br>
    &nbsp;&nbsp;&nbsp; pointlist[i]-&gt;SetInput(tablist[i], 0, b);<br>
    &nbsp;&nbsp;&nbsp; pointlist[i]-&gt;SetColor(0, 0, 0, 255);<br>
    &nbsp;&nbsp;&nbsp; pointlist[i]-&gt;SetWidth(4.0);<br>
    &nbsp;&nbsp;&nbsp; <br>
    &nbsp;&nbsp;&nbsp; if(b == 1){<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
vtkPlotPoints::SafeDownCast(pointlist[i])-&gt;SetMarkerStyle(vtkPlotPoints::PLUS);<br>
    &nbsp;&nbsp;&nbsp; }<br>
    &nbsp;&nbsp;&nbsp; else if(b == 2){<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
vtkPlotPoints::SafeDownCast(pointlist[i])-&gt;SetMarkerStyle(vtkPlotPoints::SQUARE);<br>
    &nbsp;&nbsp;&nbsp; }<br>
    &nbsp;&nbsp;&nbsp; else{<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
vtkPlotPoints::SafeDownCast(pointlist[i])-&gt;SetMarkerStyle(vtkPlotPoints::CIRCLE);<br>
    &nbsp;&nbsp;&nbsp; }<br>
    &nbsp;&nbsp;&nbsp; <br>
    &nbsp;&nbsp;&nbsp; pointlist[i]-&gt;Modified();<br>
    &nbsp;&nbsp;&nbsp; pointlist[i]-&gt;Update();<br>
    &nbsp;&nbsp;&nbsp; b++;<br>
    &nbsp; }<br>
    &nbsp; <br>
    &nbsp; //Finally render the scene<br>
    &nbsp; view-&gt;GetRenderWindow()-&gt;SetMultiSamples(0);<br>
    &nbsp; view-&gt;GetInteractor()-&gt;Initialize();<br>
    &nbsp; view-&gt;GetInteractor()-&gt;Start();<br>
    &nbsp;<br>
    &nbsp; return EXIT_SUCCESS;<br>
    }<br>
    <br>
    &nbsp;------------------&nbsp; ------------------&nbsp; ------------------&nbsp;
    ------------------<br>
    #CMakeLists.txt<br>
    PROJECT(ScatterPlot)<br>
    <br>
    FIND_PACKAGE(VTK REQUIRED)<br>
    INCLUDE(${VTK_USE_FILE})<br>
    <br>
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -Wall -pedantic -ggdb
    -Wno-long-long")<br>
    <br>
    ADD_EXECUTABLE(ScatterPlot ScatterPlot.cxx)<br>
    TARGET_LINK_LIBRARIES(ScatterPlot vtkHybrid vtkCharts)<br>
    <br>
    <br>
  </body>
</html>