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

Skip to content

DOC: plotting section for Users Guide #29124

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

Open
wants to merge 2 commits into
base: main
Choose a base branch
from

Conversation

jklymak
Copy link
Member

@jklymak jklymak commented Nov 11, 2024

This PR adds a "plotting" section to the Users Guide. See https://output.circle-artifacts.com/output/job/78379cd7-923b-4f4e-90ed-e297cace49c9/artifacts/0/doc/build/html/users/index.html (update 20 April) It is unusual to have a Users Guide that does not at least cover the basic ways to make visualizations.

The organization is the same as the Plot Types gallery, with the exception that I moved errorbar out of statistics to pairwise; everything else in "statistics" calculates statistics, errorbar, like fill_between/x just plots an idea of the errors given calculated errors.

This allows related visualization types to be shown in a curated order, with narrative connection between the topics. Currently it is pretty high level, and then details referred to the Gallery Examples as either links or in .. seealso:: callouts. Some more details could be covered in each of these sections over time.

I've not made any changes outside of these documents, except I added soft references so gallery items can be referenced by :ref: instead of :doc:. Probably the Gallery Examples could/should link back to the plotting sections. Possibly some gallery sections would want to be removed, but overall I think overlap between the presentations methods is fine.

In terms of adding/moving material the balance between whether information belongs in the Example or this section will require some back and forth. Overall I'd recommend erring on the side of redundancy, and using liberal cross linking.

@github-actions github-actions bot added Documentation: plot types files in galleries/plot_types Documentation: examples files in galleries/examples Documentation: user guide files in galleries/users_explain or doc/users labels Nov 11, 2024
@story645
Copy link
Member

story645 commented Nov 12, 2024

Given that this is clearly a lot of work, what's the motivation for this section/this new set of docs? What problem/questions from folks are you seeing that you're trying to solve here that's not currently being addressed in the gallery?

@jklymak jklymak force-pushed the doc-plotting branch 2 times, most recently from 235b82e to 4856e0d Compare November 12, 2024 18:01
@jklymak jklymak changed the title Doc plotting DOC: plotting section for Users Guide Nov 12, 2024
@jklymak jklymak marked this pull request as ready for review November 12, 2024 19:14
@jklymak
Copy link
Member Author

jklymak commented Jan 22, 2025

I'll ping for a review for this. Obviously this can just be considered scaffolding.

I believe I addressed why the gallery is not a replacement for explaining how to make plots in the User Guide in the PR description. The gallery will never be a cohesive introductory guide, and I think that is fine. The approach here is to provide a basic start with links to more examples in the appropriate section of the gallery, or elsewhere in the User Guide.

Copy link
Member

@timhoffm timhoffm left a comment

Choose a reason for hiding this comment

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

Not having the time for a thorough review right now. I'll give a very brief feedback so that this does not stand uncommented.

I understand and agree with the fundamental idea. I'm slightly annoyed by the structural duplication of this page and "Plot types".

Way of working: This is a massive PR, which makes reviewing hard. I would have to reserve a significant time slot to look into it, which raises the bar and lowers the motivation. Additionally, the whole thing came without prior heads/up discussion. This means I first have to review overall approach and structure plus all the content intermixed and at the same time. I'm feeling overwhelmed by this. Also, I'm afraid of looking into/starting a discussion on the structure, because that may involve a lot of follow-up work due to all the details already written out.

Overall, this was the motivation for me to not look into a review.

IMHO this would work better if

  • you first create an issue describing the topic, and the idea for the stuctural solution (optionally/alternatively make a proof-of-concept PR for the structure). We could then agree on a the structure first.
  • then make a PR that puts the desired structure in place
  • after that, add multiple PRs for the individual sections.

This would keep the PRs smaller and more focused and significantly ease reviewing.

@@ -1,4 +1,6 @@
"""
.. _contour_demo:
Copy link
Member

Choose a reason for hiding this comment

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

Is there a reason you introduce labels to a lot of examples? Generally, we've been referencing examples via the doc :doc:`/gallery/images_contours_and_fiels/contour_demo` . See also https://matplotlib.org/devdocs/devel/document.html#refer-to-other-documents-and-sections.

Copy link
Member Author

Choose a reason for hiding this comment

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

Because if we have to re-arrange things all these hard links break, whereas labeled references do not break.

Copy link
Member

Choose a reason for hiding this comment

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

IMHO this is a case of YAGNI. We are quite conservative on the structure because it translates to public URLs. And if we really want to change, that’s a quite easy search&replace, which we need to anyway, because our current way of referencing examples is predominantly doc based.

This makes the PR look more complicated and I’ve some reservations whether it’s actually better to reference examples using labels.

Copy link
Member

Choose a reason for hiding this comment

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

I don't mind it b/c we've done some thrashing on the galleries, but I think it might make both discussions easier if it was spun out into a separate PR

Copy link
Member Author

Choose a reason for hiding this comment

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

IMHO this is a case of YAGNI. We are quite conservative on the structure because it translates to public URLs. And if we really want to change, that’s a quite easy search&replace, which we need to anyway, because our current way of referencing examples is predominantly doc based.

This was a huge barrier to making doc changes 5 or so years ago. Since then we introduced the redirect mechanism which has allowed things to be moved. It is likely true that our predominant way of referencing things is :doc: based, I'd argue :ref: is much more flexible. Certainly :ref: is used in many places as well.

Regardless, I don't think this really affects this PR. I made zero substantive changes to any of the other files - I just added the reference label. I also didn't change any :doc: calls elsewhere.

Copy link
Member

@timhoffm timhoffm Jan 23, 2025

Choose a reason for hiding this comment

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

It is likely true that our predominant way of referencing things is :doc: based

To give a number: 7 examples have labels. but we have 150 :doc: references.

Regardless, I don't think this really affects this PR.

I beg to differ:

  • Substantially introducing label-based referencing for examples is a new paradigm, which I don't want to introduce as a side-effect. I'm not going here into the pros and cons, even tough I have opinions. This deserves a dedicated discussion. It would be fine if you simultaneously have open an issue on this.
  • It further bloats a nontheless giant PR to 51 files and >1500 lines. I simply refuse to review this size of PR unless there are strong arguments that it cannot be splitted and the huge PR is sub-structured into reasonable commits.

So the effect is at least I'm not looking at this, which is fine as long as you find other reviewers. I'm just giving my perspective. Others would have to comment on why they haven't reviewed.

Copy link
Member Author

Choose a reason for hiding this comment

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

Substantially introducing label-based referencing for examples is a new paradigm, which I don't want to introduce as a side-effect.

Again, this isn't new, or just being introduced now - we have had label-based referencing for as long as I have been contributing. All this PR does is add labels, it doesn't change any existing references. If I put in a stand-alone PR with just the labels, that is all it would be - a bunch of labels not used anywhere yet. I can certainly do that if you like, but I'm not sure what the point is.

To give a number: 7 examples have labels. but we have 150 :doc: references.

An aside, for sure, but :ref: is used 738 times in our docs, and a quick skim indicates that they are all label based references to elsewhere in the docs. :doc: is used 291 times. Perhaps you are making a distinction between the gallery and the rest of the docs?

Copy link
Member

@story645 story645 Jan 23, 2025

Choose a reason for hiding this comment

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

@jklymak do you have a strong objection to splitting off the labeling PR from the plotting guide PR? I tend to review docs on my phone so it's a lot to scroll past, and as the back and forth with Tim is showing there's a whole separate conversation to be had about labeling.

If I put in a stand-alone PR with just the labels, that is all it would be - a bunch of labels not used anywhere yet

That's fine, folks do staged PRs all the time. Just say it's for this PR. Or put adding the labels in a separate first commit so reviewers can filter it out.

Copy link
Member Author

Choose a reason for hiding this comment

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

I could do both those things if it makes things easier.

Copy link
Member Author

Choose a reason for hiding this comment

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

Done

@jklymak
Copy link
Member Author

jklymak commented Jan 22, 2025

I'm slightly annoyed by the structural duplication of this page and "Plot types".

This was deliberately done so that they would present material in the same order but with more depth than in the quick visual index of "Plot Types". I'm not sure I understand the annoyance - particularly given that I made the Plot Types PR.

MHO this would work better if

you first create an issue describing the topic, and the idea for the stuctural solution (optionally/alternatively make a proof-> of-concept PR for the structure). We could then agree on a the structure first.
then make a PR that puts the desired structure in place
after that, add multiple PRs for the individual sections.
This would keep the PRs smaller and more focused and significantly ease reviewing.

I'd consider this the proof of concept PR. If you have serious objections to the structure, folks could propose alternates. If not, I'd suggest this PR is better than nothing, which is what we currently have. If folks disagree and feel it is worse than nothing, then we should close the PR and continue to have a large gap in the docs.

@story645
Copy link
Member

If folks disagree and feel it is worse than nothing, then we should close the PR and continue to have a large gap in the docs.

I'm not sure what gap it is you're trying to fill with these docs. The plot type gallery is already heavily curated, so I don't think that the narrative is adding much here.

Some of the examples feel so bogged down with extras that I'm not sure that readers will pick up the pattern that I think is what you're trying to convey, and information on how to use each specific function.

I think if there's a gap here, it's in understanding the artists that back the plots and I'd orient the user guide plotting section around those underlying artists.

@jklymak
Copy link
Member Author

jklymak commented Jan 22, 2025

The User guide has how to make a figure, how to make an axes, ...., a bunch of complicated stuff. I don't think "go look at the plot types gallery" is a good substitute for that middle ground, and I don't think the plot types gallery ties visualizations together in a hierarchy other than their ordering. Which is great - I look at the plot type gallery as a quick overview of what the library can do that a user can quickly scan to see if their chosen visualization is there, and see what we call it.

This new section of the User Guide should get into more details and connect the visualizations which is what I tried to start here. For sure, adding more detail about the underlying artists could be helpful, though I'd perhaps not ruin the flow so much as show a few examples of using the artists, and link out to the API docs or explanation elsewhere in the the Guide.

Some of the examples feel so bogged down with extras

I'm not sure what you are referring to here, but the examples are meant to be semi complete visualizations in most cases. If folks feel something got too far into the weeds, they are welcome to propose scaling a section back or breaking it into components.

I do somewhat feel you are expressing two contradictory ideas of what this section is meant for; "more details about underlying artists" and "fewer extras" are pulling in opposite directions. Obviously writing examples is a balancing act, and folks should feel free to edit this first pass all they want.

@story645
Copy link
Member

story645 commented Jan 22, 2025

The User guide has how to make a figure, how to make an axes, ...., a bunch of complicated stuff.

That's because the user guide introduces the concept of a figure, axes, colormap, etc, all of which are backed by objects. There's not a concept of a plot in the same manner, the closest being the artists that underlie the plot. And it covers the basics of how to make a plot in getting started and in the discussions of the library components relevant for that plot.

I'm not sure what you are referring to here, but the examples are meant to be semi complete visualizations in most cases.

For example, this gets so bogged down in the user warning (which is better explained in the API docs) that it loses focus on how to use the function (if that's the goal)
https://github.com/matplotlib/matplotlib/blob/2a0455e40a990bec76f671ef2d9be0cf7f6ea4af/galleries/users_explain/plotting/gridded.py#L95C5-L118

For example, the focus here is on setting up the data, the actual usage of the function not changing from the usage above:

def midpoints_plus_ends(x):
"""Given a 1D array, return a new array with the midpoints and the two ends."""
return np.concatenate(([x[0] - (x[1] - x[0]) / 2],
x[:-1] + np.diff(x) / 2,
[x[-1] - (x[-1] - x[-2]) / 2]))
yn = midpoints_plus_ends(y)
xn = midpoints_plus_ends(x)
Xn, Yn = np.meshgrid(xn, yn)
Yn = Yn + 0.3 * np.abs(xn)
fig, ax = plt.subplots()
ax.pcolormesh(Xn, Yn, Z, vmin=-0.5, vmax=1.0)

For example, the goal of this example is presumably to contrast the two, which a reader can pick up from the gallery thumbnails:

https://github.com/matplotlib/matplotlib/blob/2a0455e40a990bec76f671ef2d9be0cf7f6ea4af/galleries/users_explain/plotting/gridded.py#L150C5-L173

I do somewhat feel you are expressing two contradictory ideas of what this section is meant for; "more details about underlying artists" and "fewer extras" are pulling in opposite directions.

What I mean by focusing on the artist is more documents in the style of https://matplotlib.org/devdocs/users/explain/artists/imshow_extent.html. It unpacks a characteristic of ImageBase objects that once the reader understands it, they can then apply that understanding to every plotting method that takes an extent keyword.

@jklymak
Copy link
Member Author

jklymak commented Jan 23, 2025

That's because the user guide introduces the concept of a figure, axes, colormap, etc, all of which are backed by objects. There's not a concept of a plot in the same manner, the closest being the artists that underlie the plot. And it covers the basics of how to make a plot in getting started and in the discussions of the library components relevant for that plot.

From my point of view people need to be able to make a figure, make and axes, and then make visualizations in those figures and axes. The User Guide as it stands does not have that last step. They are all underscored by objects, so I'm not following what that has to do with explaining how to use the library.

For example, this gets so bogged down in the user warning (which is better explained in the API docs) that it loses focus on how to use the function (if that's the goal)

What I mean by focusing on the artist is more documents in the style of https://matplotlib.org/devdocs/users/explain/artists/imshow_extent.html.

I'd say both of these are somewhat asides that help the user better use the library. You could easily argue that the asides should be in a separate page or put in-line. But I don't think a deep-dive on every artist type and its quirks is the right level for the top-section of the user guide. From my point of view, if it can be explained quickly, inline is OK, if not then it should be linked out to a dedicated subpage.

@timhoffm
Copy link
Member

I give one high-level comment, other than that I'm out of the details here, because the PR gives me a mental overload:

I definitively see a place for a more detailed usage description of (some) plotting functions.
Examples:

  • plot() needs explanition at least on (i) plotting lines and/or markers, (ii) the use of the shorthand fmt string plot(x, y, 'r-') vs. keyword arguments; (iii) an explantion that and why the result is a list of Line2D and not a single Line2D plus the tuple-unpacking trick to put it into a single variable.
  • imshow() should have a basic explanation how to use color limits and colormaps for simple cases (not going deep dive into the data->color pipeline).

The user guide is certianly the right place for this. (How to plot with lines / markers / images). I'm not clear though on the framing / perspective. I'm feeling that the focus on "plotting methods" (Document: Using matplotlib > Plotting methods, and using method names as the sections) is wrong for a user guide. I think it should instead be something like "Using matplotlib > Visualizing different kinds of data". Then the subsections "pairwise data", "statistical plots", ... in here are ok. But within these sections again, it should not be methods but "drawing lines, markers, bars, ..." etc.

@story645
Copy link
Member

story645 commented Jan 23, 2025

From my point of view people need to be able to make a figure, make and axes, and then make visualizations in those figures and axes. The User Guide as it stands does not have that last step. They are all underscored by objects, so I'm not following what that has to do with explaining how to use the library.

Because those sections are focused on explaining what a figure (object) is and how to create it, what an axes (object) is and how to create it, etc.

@timhoffm is also suggesting by artist here, just implicitly:

But within these sections again, it should not be methods but "drawing lines, markers, bars, ..." etc.

Because each of those visual elements is backed by a different artist.

@timhoffm
Copy link
Member

@timhoffm is also suggesting by artist here, just implicitly:

But within these sections again, it should not be methods but "drawing lines, markers, bars, ..." etc.
Because each of those visual elements is backed by a different artist.

To be precise, I'm suggesting by kind of visualization. There's a strong parallel between "kind of visualization" and Artists, but it's not exactly 1:1 (lines = Line2D, markers = Line2D). And my point is that the user guide should be written from the perspective what the user wants (e.g. a color-coded visualization of 2D data) not what we provide (a method imshow() or an AxesImage). We should structure by the former and explain how to realize it using the latter.

@jklymak
Copy link
Member Author

jklymak commented Jan 23, 2025

And my point is that the user guide should be written from the perspective what the user wants

Sure agreed. That is basically what the current version does. It explains the type of data to be visualized and then explains the different methods to accomplish that. We don't want these to be completely abstract. Users should learn out names for things. And they should also learn the differences between the methods.

@jklymak
Copy link
Member Author

jklymak commented Jan 23, 2025

Because those sections are focused on explaining what a figure (object) is and how to create it, what an axes (object) is and how to create it, etc.

I think you are making a distinction here that the original author of those sections didn't intend.

However, the practical difference between an Axes object and a Line2d object is that you need to call many methods on the Axes object to use the library at all (or use pyplot). On the other hand, you could make hundreds of complicated visualizations using Line2d artists and not know any of the methods on that artist, or that the artist object even exists.

Not at all to argue that these sections should avoid mentioning or using artists, just that I don't think that should be a focus at the top level.

@story645
Copy link
Member

story645 commented Jan 23, 2025

That is basically what the current version does. It explains the type of data to be visualized and then explains the different methods to accomplish that.

But what @timhoffm (and I agree) is saying is it should be grouped by visualization task. I think some of this is fixable with subheadings saying things like "Plotting lines", etc...

I think what's getting jumbled up here is that method and task aren't a 1:1 either. Like scatter plots can be made using .plot or .scatter, line plots can be made using .plot, and for special types of lines .vlines, .hlines, .axline, .event and
.stem, .stair and .step (all of which I think can be accomplished with .plot)

@jklymak
Copy link
Member Author

jklymak commented Jan 23, 2025

But what @timhoffm (and I agree) is saying is it should be grouped by visualization task. I think some of this is fixable with subheadings saying things like "Plotting lines", etc...

The current headings are:

  • Plotting Methods
    • Pairwise data
    • Statistical plots
    • Gridden plots
    • Unstructured data
    • 3d and volumetric data

The sections start with a short intro about the type of data to be visualized, and then are indeed subsectioned by method type. So taking "Pairwise data" , it has

  • plot
  • fill_between, fill_betweenx, and stackplot
  • errorbar
  • scatter
  • bar and stem
  • step and stairs

we could maybe expand the description of things you do with pairwise data a bit at the beginning, but this is pretty obvious thing to do with your data. We could also change the headings, but to what without being too verbose? "plot" -> "plotting lines and markers, one color and marker at a time" "fill_between"-> "indicating regions around a line"?

The first sentence of each of these sections basically says what the primary goal of the method is, so in my opinion it's clearest just to use the method name. New users may not know our names for things, but the hope is they can realize they want to plot pairwise data, and then skim the plots for the method most suited to their visualization and then read more.

@jklymak jklymak force-pushed the doc-plotting branch 2 times, most recently from 1882990 to 9b56ba2 Compare January 23, 2025 20:20
@tacaswell tacaswell added this to the v3.11.0 milestone Apr 24, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Documentation: examples files in galleries/examples Documentation: plot types files in galleries/plot_types Documentation: user guide files in galleries/users_explain or doc/users
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants