Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Conversation

@EmbersArc
Copy link
Contributor

@EmbersArc EmbersArc commented May 9, 2021

Closes #362

recording.mp4

@EmbersArc EmbersArc marked this pull request as ready for review May 11, 2021 15:53
Copy link
Owner

@emilk emilk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The markers look sweet!

I'm not sure it makes sense to couple them to Curve though.

It seems likely users will want them to show e.g. a scatterplot, or to show the datapoint to which a smooth curve has been fitted. But right now it is more designed to highlight the corners of a coarse curve (like the demo shows), which is just a weird use case to me (but that may just be me). Such a coarse curve isn't very... well, curvy!think

Consider an alternative where markers where instead part of a separate Points primitive. So you can add a curve and points, or just points, or just a curve. That way we can keep Curve for smooth things (and add methods to e.g. show the derivative/tangent on hover) and use the markers for sparse point data.

What do you think?

@EmbersArc
Copy link
Contributor Author

@emilk Thanks for the review! I'm very much open to having a separate Points primitive, in fact I was going to take this approach first. But everything is very much built around Curve right now and introducing a separate Points struct would lead to a lot of duplicate code. Maybe we could unite them in a Series primitive which has a field that defines whether it's a curve or a set of points? Maybe you have an idea?

@EmbersArc
Copy link
Contributor Author

@emilk I've now created a separate Points primitive, let me know what you think. It has lead to some duplicate code but made other parts much cleaner and straight forward. Both Curves and Points now have just one constructor, which takes a ValuesSeries object, like so:

let curve = Curve::new(ValueSeries::from_values_iter(sin));
let points = Points::new(ValueSeries::from_values_iter(sin));
ui.add(
    Plot::new("Test Plot").curve(curve).points(points)
);

@EmbersArc
Copy link
Contributor Author

One issue with this approach (apart from the duplicate code) is that points are always drawn on top of curves. But I want the user to have full control over the drawing order. One way to fix both issues might be to share an interface between Points and Curve and then store them in a vector of boxes. I can give that a shot...

@EmbersArc
Copy link
Contributor Author

Done, I'm quite happy with how this turned out. I also took the chance to rename Curve to Line since it's more general and we're breaking a lot here anyways.

Copy link
Owner

@emilk emilk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Much better!

I only have some minor notes

self
}

/// Stroke color. Default is `Color32::TRANSPARENT` which means a color will be auto-assigned.
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this no longer true?

@EmbersArc
Copy link
Contributor Author

@emilk Thanks for having another look. Much appreciated. I applied all your suggestions.

Copy link
Owner

@emilk emilk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for this!

@emilk emilk merged commit 8623909 into emilk:master May 27, 2021
@EmbersArc EmbersArc deleted the plot-markers branch May 27, 2021 16:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Plotting: Add line markers

2 participants