Skip to content

Update hatch.py #27337

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

Closed
wants to merge 1 commit into from
Closed

Update hatch.py #27337

wants to merge 1 commit into from

Conversation

Arikad0
Copy link

@Arikad0 Arikad0 commented Nov 16, 2023

Dashed Hatch added / #27170

@melissawm
Copy link
Member

Hi @Arikad0 - can you address the current check failures? (check out above the Linting, Mypy and Tests failures)

Also, if this PR closes the issue you mentioned in the description, you can use one of the magic phrases such as "Closes #" so that GitHub understands to link the issue and PR. Thanks!

@rcomer
Copy link
Member

rcomer commented Nov 18, 2023

As it stands, the implementation here is identical to that for the vertical lines, so we have

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.fill_between([0, 1], [0, 1], hatch="_")
plt.show()

test

I believe the reason the tests fail is because we now have two vertical lines on top of each other for the "+" hatching. E.g here are the result and diff images for the failing legend test:

hatching

hatching-failed-diff

@Arikad0 do you have thoughts on how to actually create the dashed pattern?

@Arikad0
Copy link
Author

Arikad0 commented Nov 24, 2023

I'm a bit lost on how to proceed on this issue. Do you have any idea that may help? Thanks in advance

@melissawm
Copy link
Member

Gentle ping - any reviewers available to take a look? Thanks!

@rcomer
Copy link
Member

rcomer commented Mar 3, 2024

I wondered if we could use the Shapes type of hatch with a very simple straight path for this and actually it seems to work well:

Defining the class as

class Dashes(Shapes):
    size = 0.35
    def __init__(self, hatch, density):
        self.num_rows = (hatch.count('_')) * density
        path = Path([[0, 0], [1, 0]], [Path.MOVETO, Path.LINETO])
        self.shape_vertices = path.vertices
        self.shape_codes = path.codes
        super().__init__(hatch, density)

and adapting the example from #27146

import matplotlib.pyplot as plt
import numpy as np

# Data
cols = 10
rows = 4

data = (
    np.reshape(np.arange(0, cols, 1), (1, -1)) ** 2
    + np.reshape(np.arange(0, rows), (-1, 1))
    + np.random.random((rows, cols))*5
)

# Plot
fig, ax = plt.subplots()

x = range(data.shape[1])
ax.stackplot(
    x, data,
    hatch=["_", "__", "___", "____"]
)

ax.set_xlim(0, 9)
ax.set_ylim(0, 350)

plt.show()

I have
image

Possibly there are better ways.

@ShivamPathak99
Copy link
Contributor

Is there any way to bypass the MatplotlibDeprecationWarning, in case of adding custom class (e.g. dashed).

def _validate_hatch_pattern(hatch):
    valid_hatch_patterns = set(r'_-+|/\xXoO.*')    # Adding '_' Dashed pattern

After implementing above and menetioning it in hatch.pyi , still getting

MatplotlibDeprecationWarning: hatch must consist of a string of "*+-./OX\ox|" or None, but found the following invalid values "_". Passing invalid values is deprecated since 3.4 and will become an error in 3.9.

@jklymak
Copy link
Member

jklymak commented Apr 13, 2024

Did you search for that warning in the source code?

@ShivamPathak99
Copy link
Contributor

Did you search for that warning in the source code?

Thanks, it is working after a restart.

@rcomer
Copy link
Member

rcomer commented Sep 22, 2024

I am going to close this in favour of #28072.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Status: Waiting for author
Development

Successfully merging this pull request may close these issues.

5 participants