-
Notifications
You must be signed in to change notification settings - Fork 1.2k
template to handle strings on x axis w/ legend #254
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,25 @@ | ||
| #include "../matplotlibcpp.h" | ||
| #include <string> | ||
| #include <vector> | ||
|
|
||
| namespace plt = matplotlibcpp; | ||
|
|
||
| int main() | ||
| { | ||
| const std::vector<std::string> months = { | ||
| "Jan 2021", "Feb 2021", "Mar 2021", "Apr 2021", "May 2021" | ||
| }; | ||
| const std::vector<double> speed_kmh = {58.4, 61.2, 63.9, 62.1, 65.0}; | ||
|
|
||
| plt::figure_size(900, 500); | ||
| plt::named_plot("Vehicle speed (max)", months, speed_kmh, "o-"); | ||
| plt::title("Monthly peak speed"); | ||
| plt::xlabel("Month"); | ||
| plt::ylabel("Speed (km/h)"); | ||
| plt::legend(); | ||
| plt::tight_layout(); | ||
|
|
||
| // Use save() for CI/headless usage; replace with show() for interactive runs. | ||
| plt::save("./string_xaxis_named_plot.png"); | ||
| return 0; | ||
| } |
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -1726,6 +1726,36 @@ bool named_plot(const std::string& name, const std::vector<NumericX>& x, const s | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
| return res; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| template<typename Numeric> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| bool named_plot(const std::string& name, const std::vector<std::string>& x, const std::vector<Numeric>& y, const std::string& format = "") | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| detail::_interpreter::get(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| PyObject* kwargs = PyDict_New(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| PyDict_SetItemString(kwargs, "label", PyString_FromString(name.c_str())); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+1734
to
+1736
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| PyObject* xarray = detail::get_array(x); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| PyObject* yarray = detail::get_array(y); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| PyObject* pystring = PyString_FromString(format.c_str()); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| PyObject* plot_args = PyTuple_New(3); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| PyTuple_SetItem(plot_args, 0, xarray); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| PyTuple_SetItem(plot_args, 1, yarray); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| PyTuple_SetItem(plot_args, 2, pystring); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| PyObject* res = PyObject_Call(detail::_interpreter::get().s_python_function_plot, plot_args, kwargs); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Py_DECREF(kwargs); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Py_DECREF(plot_args); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| if (res) Py_DECREF(res); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| return res; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| template<typename Numeric> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+1730
to
+1756
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| bool named_plot(const std::string& name, const std::vector<std::string>& x, const std::vector<Numeric>& y, const std::string& format = "") | |
| { | |
| detail::_interpreter::get(); | |
| PyObject* kwargs = PyDict_New(); | |
| PyDict_SetItemString(kwargs, "label", PyString_FromString(name.c_str())); | |
| PyObject* xarray = detail::get_array(x); | |
| PyObject* yarray = detail::get_array(y); | |
| PyObject* pystring = PyString_FromString(format.c_str()); | |
| PyObject* plot_args = PyTuple_New(3); | |
| PyTuple_SetItem(plot_args, 0, xarray); | |
| PyTuple_SetItem(plot_args, 1, yarray); | |
| PyTuple_SetItem(plot_args, 2, pystring); | |
| PyObject* res = PyObject_Call(detail::_interpreter::get().s_python_function_plot, plot_args, kwargs); | |
| Py_DECREF(kwargs); | |
| Py_DECREF(plot_args); | |
| if (res) Py_DECREF(res); | |
| return res; | |
| } | |
| template<typename Numeric> |
Copilot
AI
Apr 16, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There is an incomplete named_semilogx template declaration here (no function body and no trailing ;). This will not compile and also duplicates the existing named_semilogx template immediately below—remove this line or provide a proper definition/forward declaration ending with ;.
| template<typename Numeric> | |
| bool named_semilogx(const std::string& name, const std::vector<Numeric>& x, const std::vector<Numeric>& y, const std::string& format = "") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The PR description/README section implies legends (and/or string x-axis support) are newly enabled, but the library already provides
named_plot(...)for legend labels anddetail::get_array(std::vector<std::string>)for string data. Consider updating the README text to clarify what limitation is actually being addressed (e.g., providing a dedicated overload), or remove the claim that this capability was previously unavailable.