mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-01-19 00:37:25 +01:00
[matplotlib/modpyplot.cpp] Added support for third parameter color in plot function
It is now possible to specify the color of the plot through a third positional argument in the plot function. However, is a keyword (color or c) is then used, it will override the previous color command. Change-Id: I5a73ddb322e650db486de568e4a56b4752751cfb (cherry picked from commit e6cc196cca405e5a4f8058a6af917aa0e7962b8a)
This commit is contained in:
committed by
Émilie Feral
parent
4b88521e14
commit
e1a356fe88
@@ -52,11 +52,13 @@ static size_t extractArgumentAndValidateSize(mp_obj_t arg, size_t requiredlength
|
||||
|
||||
// Get color from keyword arguments if possible
|
||||
|
||||
KDColor colorFromKeywordArgument(mp_map_elem_t * elemColor) {
|
||||
bool colorFromKeywordArgument(mp_map_elem_t * elemColor, KDColor * color) {
|
||||
if (elemColor != nullptr) {
|
||||
return MicroPython::Color::Parse(elemColor->value);
|
||||
*color = MicroPython::Color::Parse(elemColor->value);
|
||||
return true;
|
||||
} else {
|
||||
return Palette::nextDataColor(&paletteIndex);
|
||||
*color = Palette::nextDataColor(&paletteIndex);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -108,9 +110,10 @@ mp_obj_t modpyplot_arrow(size_t n_args, const mp_obj_t *args, mp_map_t* kw_args)
|
||||
mp_obj_t arrowWidth = (elem == nullptr) ? mp_obj_new_float(0.003) : elem->value;
|
||||
|
||||
// Setting arrow color
|
||||
KDColor color;
|
||||
// color keyword
|
||||
elem = mp_map_lookup(kw_args, MP_OBJ_NEW_QSTR(MP_QSTR_color), MP_MAP_LOOKUP);
|
||||
KDColor color = colorFromKeywordArgument(elem);
|
||||
colorFromKeywordArgument(elem, &color);
|
||||
|
||||
// Adding the object to the plot
|
||||
sPlotStore->addSegment(args[0], args[1], mp_obj_new_float(mp_obj_get_float(args[0]) + mp_obj_get_float(args[2])), mp_obj_new_float(mp_obj_get_float(args[1]) + mp_obj_get_float(args[3])), color, arrowWidth);
|
||||
@@ -212,8 +215,10 @@ mp_obj_t modpyplot_bar(size_t n_args, const mp_obj_t *args, mp_map_t* kw_args) {
|
||||
|
||||
// Setting bar color
|
||||
// color keyword
|
||||
KDColor color;
|
||||
// color keyword
|
||||
mp_map_elem_t * elem = mp_map_lookup(kw_args, MP_OBJ_NEW_QSTR(MP_QSTR_color), MP_MAP_LOOKUP);
|
||||
KDColor color = colorFromKeywordArgument(elem);
|
||||
colorFromKeywordArgument(elem, &color);
|
||||
|
||||
for (size_t i=0; i<xLength; i++) {
|
||||
mp_obj_t iH = hItems[hLength > 1 ? i : 0];
|
||||
@@ -333,8 +338,10 @@ mp_obj_t modpyplot_hist(size_t n_args, const mp_obj_t *args, mp_map_t* kw_args )
|
||||
|
||||
// Setting hist color
|
||||
// color keyword
|
||||
KDColor color;
|
||||
// color keyword
|
||||
mp_map_elem_t * elem = mp_map_lookup(kw_args, MP_OBJ_NEW_QSTR(MP_QSTR_color), MP_MAP_LOOKUP);
|
||||
KDColor color = colorFromKeywordArgument(elem);
|
||||
colorFromKeywordArgument(elem, &color);
|
||||
|
||||
for (size_t i=0; i<nBins; i++) {
|
||||
sPlotStore->addRect(edgeItems[i], edgeItems[i+1], binItems[i], mp_obj_new_float(0.0), color);
|
||||
@@ -358,12 +365,14 @@ mp_obj_t modpyplot_scatter(size_t n_args, const mp_obj_t *args, mp_map_t* kw_arg
|
||||
size_t length = extractArgumentsAndCheckEqualSize(args[0], args[1], &xItems, &yItems);
|
||||
|
||||
// Setting scatter color
|
||||
// color keyword
|
||||
KDColor color;
|
||||
// c keyword
|
||||
mp_map_elem_t * elem = mp_map_lookup(kw_args, MP_OBJ_NEW_QSTR(MP_QSTR_c), MP_MAP_LOOKUP);
|
||||
KDColor color = colorFromKeywordArgument(elem);
|
||||
colorFromKeywordArgument(elem, &color);
|
||||
// color keyword
|
||||
elem = mp_map_lookup(kw_args, MP_OBJ_NEW_QSTR(MP_QSTR_color), MP_MAP_LOOKUP);
|
||||
color = colorFromKeywordArgument(elem);
|
||||
colorFromKeywordArgument(elem, &color);
|
||||
|
||||
for (size_t i=0; i<length; i++) {
|
||||
sPlotStore->addDot(xItems[i], yItems[i], color);
|
||||
@@ -378,9 +387,6 @@ mp_obj_t modpyplot_scatter(size_t n_args, const mp_obj_t *args, mp_map_t* kw_arg
|
||||
|
||||
mp_obj_t modpyplot_plot(size_t n_args, const mp_obj_t *args,mp_map_t* kw_args) {
|
||||
assert(sPlotStore != nullptr);
|
||||
if (n_args > 2) {
|
||||
mp_raise_TypeError("plot() takes 2 positional arguments");
|
||||
}
|
||||
sPlotStore->setShow(true);
|
||||
mp_obj_t * xItems, * yItems;
|
||||
size_t length;
|
||||
@@ -398,12 +404,18 @@ mp_obj_t modpyplot_plot(size_t n_args, const mp_obj_t *args,mp_map_t* kw_args) {
|
||||
}
|
||||
|
||||
// Setting plot color
|
||||
KDColor color;
|
||||
bool isUserSet = false;
|
||||
// c keyword
|
||||
mp_map_elem_t * elem = mp_map_lookup(kw_args, MP_OBJ_NEW_QSTR(MP_QSTR_c), MP_MAP_LOOKUP);
|
||||
KDColor color = colorFromKeywordArgument(elem);
|
||||
isUserSet = colorFromKeywordArgument(elem, &color);
|
||||
// color keyword
|
||||
elem = mp_map_lookup(kw_args, MP_OBJ_NEW_QSTR(MP_QSTR_color), MP_MAP_LOOKUP);
|
||||
color = colorFromKeywordArgument(elem);
|
||||
isUserSet = isUserSet | colorFromKeywordArgument(elem, &color);
|
||||
// Eventual third positional argument
|
||||
if (!isUserSet && n_args >= 3) {
|
||||
color = MicroPython::Color::Parse(args[2]);
|
||||
}
|
||||
|
||||
for (int i=0; i<(int)length-1; i++) {
|
||||
sPlotStore->addSegment(xItems[i], yItems[i], xItems[i+1], yItems[i+1], color);
|
||||
|
||||
Reference in New Issue
Block a user