-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Conversation
bool named_plot(const std::string& name, const std::vector<std::string>& x, const std::vector<Numeric>& y, const std::string& format = "") { .. }
added template to be able to have named legend plotting: ex: time(x) vs signal(y) with legend.
Prior to this change, the current library implements simple plots with no legends and with this change the above should be possible.
lava
commented
Apr 2, 2021
Thanks for contributing!
I'm a bit confused if/why this works, it's not mentioned on the matplotlib docs that x can be a vector of strings: https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.plot.html
Would you mind adding an example that uses this function, so I can check out that this works as it should?
im-hashim
commented
Apr 3, 2021
via email
im-hashim
commented
Mar 7, 2023
@lava this is open for more than 2 years. if my response answers your question, can you please merge my pull request ?
im-hashim
commented
Apr 16, 2026
Thanks for the review and for asking for a concrete example.
I added a small runnable example at:
- examples/string_xaxis_named_plot.cpp
I also added a short README usage note and constraints under the examples section.
Expected behavior:
named_plot("Vehicle speed (max)", x, y, "o-")works withxasstd::vector<std::string>and numericyof matching length.- Matplotlib treats the string labels as categorical x-axis values.
- Calling
legend()shows the provided series label. - The example saves
string_xaxis_named_plot.png(and can be switched toshow()for interactive runs).
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.
Pull request overview
Adds an API/example intended to support named_plot() with std::vector<std::string> x-axis values so users can plot categorical/string x-values while still using legend labels.
Changes:
- Introduces a new
named_plotoverload forx: std::vector<std::string>inmatplotlibcpp.h. - Adds a new example demonstrating string x-axis + legend plotting.
- Documents the new example/usage in the README.
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 4 comments.
| File | Description |
|---|---|
| matplotlibcpp.h | Adds a named_plot overload for string x-values (and accidentally adds a broken named_semilogx declaration). |
| examples/string_xaxis_named_plot.cpp | New runnable example plotting categorical month labels with a legend and saving an image. |
| README.md | Adds documentation snippet and build command for the new example. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
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.
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 and detail::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.
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 ;.
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.
PyDict_SetItemString does not steal a reference to the value; passing the temporary result of PyString_FromString(...) here leaks a reference. Store the created Python string in a local PyObject*, insert it into kwargs, then Py_DECREF it after insertion (same pattern as used elsewhere when the API doesn’t steal refs).
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.
This overload appears redundant: the existing named_plot template taking std::vector<NumericX> already works with NumericX = std::string because detail::get_array(const std::vector<std::string>&) is defined. Keeping both copies increases maintenance surface; consider removing this overload and relying on the generic template (or factoring shared logic into a helper).
bool named_plot(const std::string& name, const std::vectorstd::string& x, const std::vector& y, const std::string& format = "") { .. }
added template to be able to have named legend plotting: ex: time(x) vs signal(y) with legend.
Prior to this change, the current library implements simple plots with no legends and with this change the above should be possible.