Matplotlib 从 c++ 绘制多个图表

Matplotlib plot multiple charts from c++

本文关键字:绘制 c++ Matplotlib      更新时间:2023-10-16

我使用C ++的matplotlib进行(调试)绘图。我想在同一张图中绘制多个图。到目前为止,我有

template<typename NumericX, typename NumericY>
bool plot(const NumericX const* x, const NumericY const* y, std::size_t size, const std::string& s = "")
{
    PyObject* xlist = PyList_New(size);
    PyObject* ylist = PyList_New(size);
    PyObject* pystring = PyUnicode_FromString(s.c_str());
    for(size_t i = 0; i < size; ++i) {
        PyList_SetItem(xlist, i, PyFloat_FromDouble(x[i]));
        PyList_SetItem(ylist, i, PyFloat_FromDouble(y[i]));
    }
    PyObject* plot_args = PyTuple_New(3);
    PyTuple_SetItem(plot_args, 0, xlist);
    PyTuple_SetItem(plot_args, 1, ylist);
    PyTuple_SetItem(plot_args, 2, pystring);
    PyObject* pymod = PyImport_Import(pyplotname);
    PyObject* s_python_function_plot = PyObject_GetAttrString(pymod, "plot");
    PyObject* res = PyObject_CallObject(s_python_function_plot, plot_args);
    Py_DECREF(xlist);
    Py_DECREF(ylist);
    Py_DECREF(plot_args);
    if(res) Py_DECREF(res);
    return res;
}

但打电话

 plot(x_0,_y_0, size_0);
 plot(x_1,_y_1, size_1);
 show(); // just calling matplotlib.show

仅显示第一个图。我能做什么,才能获得所有的情节?

我知道自从你发布这个问题以来已经有很长时间了,matplotlib 的实现可能已经有所改进,但我仍然遇到了同样的问题,所以这是我如何应对的:假设您的数据是(x0,_y_0)和(x_1,_y_1)(让我们暂时忘记size_0和size_1)。只需在plot()之前致电subplot()

#include <matplotlibcpp.h>
namespace plt = matplotlibcpp;
plt::subplot(2, 1, 1); // 2 rows, 1 column, first plot
plt::plot(x_0,_y_0);
plt::subplot(2, 1, 2); // 2 rows, 1 column, second plot
plt::plot(x_1,_y_1);
plt::show();

仅使用 plot() 通常会在同一图形中显示重叠的两个跟踪,就像在 Python 中一样。希望这能有所帮助。