Search code examples
c++plotgnuplot

sciplot c++ drawWithVecs


I am trying to use sciplot in a C++17 framework to plot a vector field. I found a function called drawWithVecs but I am not sure how to use it or whether it even is suited to this purpose. Does anyone have any idea how to do this?

Please see this example from matplotlib for plotting a vector field.


Solution

  • If you can't do it in sciplot, you could try morphologica, which has a QuiverVisual class for plotting vector fields. Its 2D GraphVisual class is also able to do this. A short example program that draws three quivers for a three element vector field is:

    #include <vector>
    #include <morph/vec.h>
    #include <morph/Visual.h>
    #include <morph/ColourMap.h>
    #include <morph/QuiverVisual.h>
    
    int main()
    {
        morph::Visual scene(1024, 768, "morph::QuiverVisual"); // Create 1024x768 pix window
    
        // Define a vector field
        std::vector<morph::vec<float, 3>> coords = { {0,0,0},  {0,1,0},      {1,0,0}     };
        std::vector<morph::vec<float, 3>> quivs =  { {0,0,1},  {0,-.3,1.1},  {-.3,0,1.2}  };
    
        // Create the QuiverVisual VisualModel with make_unique
        auto vmp = std::make_unique<morph::QuiverVisual<float>>(&coords, morph::vec<float, 3>{0}, &quivs,
                                                                morph::ColourMapType::Viridis);
        scene.bindmodel (vmp); // boilerplate - wires up callbacks
    
        vmp->do_quiver_length_scaling = false;  // Avoid scaling the quiver lengths
    
        vmp->finalize();            // builds the OpenGL vertices
        scene.addVisualModel (vmp); // Adds the QuiverVisual to the scene
    
        scene.keepOpen();           // Render until user quits with Ctrl-q
    
        return 0;
    }
    
    

    Looks like: A screenshot of the morph::Visual window displaying a QuiverVisual (and the scene coordinate arrows)

    For more options/example code see:

    https://github.com/ABRG-Models/morphologica/blob/main/examples/showcase.cpp#L335

    and

    https://github.com/ABRG-Models/morphologica/blob/main/examples/quiver.cpp