8000 Add non-blocking mode of Matplotlib::show and a simple example by HyHuang1995 · Pull Request #35 · lava/matplotlib-cpp · GitHub
[go: up one dir, main page]

Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 46 additions & 0 deletions examples/nonblock.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
#define _USE_MATH_DEFINES
#include <cmath>
#include "matplotlibcpp.h"

namespace plt = matplotlibcpp;


using namespace matplotlibcpp;
using namespace std;

int main()
{
// Prepare data.
int n = 5000;
std::vector<double> x(n), y(n), z(n), w(n,2);
for(int i=0; i<n; ++i) {
x.at(i) = i*i;
y.at(i) = sin(2*M_PI*i/360.0);
z.at(i) = log(i);
}

// Plot line from given x and y data. Color is selected automatically.
plt::subplot(2,2,1);
plt::plot(x, y);

// Plot a red dashed line from given x and y data.
plt::subplot(2,2,2);
plt::plot(x, w,"r--");

// Plot a line whose name will show up as "log(x)" in the legend.
plt::subplot(2,2,3);
plt::named_plot("log(x)", x, z);

// Set x-axis to interval [0,1000000]
plt::xlim(0, 1000*1000);

// Add graph title
plt::title("Sample figure");
// Enable legend.
plt::legend();

plt::show(false);

cout << "matplotlibcpp::show() is working in an non-blocking mode" << endl;
getchar();
}
33 changes: 22 additions & 11 deletions matplotlibcpp.h
Original file line number Diff line number Diff line change
Expand Up @@ -648,16 +648,27 @@ namespace matplotlibcpp {
// if PyDeCRFF, the function doesn't work on Mac OS
}

inline void show()
{
PyObject* res = PyObject_CallObject(
detail::_interpreter::get().s_python_function_show,
detail::_interpreter::get().s_python_empty_tuple);

if (!res) throw std::runtime_error("Call to show() failed.");

Py_DECREF(res);
}
inline void show(const bool bBlock = true)
{
PyObject* res;
if(bBlock)
{
res = PyObject_CallObject(
detail::_interpreter::get().s_python_function_show,
detail::_interpreter::get().s_python_empty_tuple);
}
else
{
PyObject *kwargs = PyDict_New();
PyDict_SetItemString(kwargs, "block", Py_False);
res = PyObject_Call( detail::_interpreter::get().s_python_function_show, detail::_interpreter::get().s_python_empty_tuple, kwargs);
}


if (!res) throw std::runtime_error("Call to show() failed.");

Py_DECREF(res);
}

inline void draw()
{
Expand Down Expand Up @@ -743,7 +754,7 @@ namespace matplotlibcpp {
template<typename U, U> struct Check;

template<typename U>
static std::true_type test( ... ); // use a variadic function to make sure (1) it accepts everything and (2) its always the worst match
static std::true_type test( ... ); // use a variadic function to makemake sure (1) it accepts everything and (2) its always the worst match

template<typename U>
static std::false_type test( Check<void(Fallback::*)(), &U::operator()>* );
Expand Down
0