簡體   English   中英

Matplotlib 從 C++ 繪制多個圖表

[英]Matplotlib plot multiple charts from c++

我使用 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() plot()

#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 中一樣。 希望這能有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM