Skip to content

Commit

Permalink
Merge pull request #6198 from mdboom/hatch-edge-width
Browse files Browse the repository at this point in the history
ENH/API: Make hatch linewidth an rcParam

This also changes the default hatch width on some backends.
  • Loading branch information
tacaswell committed Apr 11, 2016
1 parent bdc3b25 commit f367f7b
Show file tree
Hide file tree
Showing 19 changed files with 34 additions and 4 deletions.
12 changes: 12 additions & 0 deletions doc/users/whats_new/style_changes.rst
Expand Up @@ -35,6 +35,18 @@ Plots
the rcParam ``lines.markersize`` so it is consistent with ``plot(X,
Y, 'o')``. The old value was 20, and the new value is 36 (6^2).

Hatching
````````

- The width of the lines in a hatch pattern is now configurable by the
rcParam `hatch.linewidth`, with a default of 1 point. The old
behavior was different depending on backend:

- PDF: 0.1 pt
- SVG: 1.0 pt
- PS: 1 px
- Agg: 1 px

Plot layout
```````````

Expand Down
7 changes: 7 additions & 0 deletions lib/matplotlib/backend_bases.py
Expand Up @@ -792,6 +792,7 @@ def __init__(self):
self._linewidth = 1
self._rgb = (0.0, 0.0, 0.0, 1.0)
self._hatch = None
self._hatch_linewidth = rcParams['hatch.linewidth']
self._url = None
self._gid = None
self._snap = None
Expand Down Expand Up @@ -1111,6 +1112,12 @@ def get_hatch_path(self, density=6.0):
return None
return Path.hatch(self._hatch, density)

def get_hatch_linewidth(self):
"""
Gets the linewidth to use for hatching.
"""
return self._hatch_linewidth

def get_sketch_params(self):
"""
Returns the sketch parameters for the artist.
Expand Down
2 changes: 1 addition & 1 deletion lib/matplotlib/backends/backend_pdf.py
Expand Up @@ -1182,7 +1182,7 @@ def writeHatches(self):
0, 0, sidelen, sidelen, Op.rectangle,
Op.fill)

self.output(0.1, Op.setlinewidth)
self.output(rcParams['hatch.linewidth'], Op.setlinewidth)

# TODO: We could make this dpi-dependent, but that would be
# an API change
Expand Down
3 changes: 2 additions & 1 deletion lib/matplotlib/backends/backend_ps.py
Expand Up @@ -303,6 +303,7 @@ def create_hatch(self, hatch):
if hatch in self._hatches:
return self._hatches[hatch]
name = 'H%d' % len(self._hatches)
linewidth = rcParams['hatch.linewidth']
self._pswriter.write("""\
<< /PatternType 1
/PaintType 2
Expand All @@ -313,7 +314,7 @@ def create_hatch(self, hatch):
/PaintProc {
pop
0 setlinewidth
%(linewidth)f setlinewidth
""" % locals())
self._pswriter.write(
self._convert_path(Path.hatch(hatch), Affine2D().scale(72.0),
Expand Down
2 changes: 1 addition & 1 deletion lib/matplotlib/backends/backend_svg.py
Expand Up @@ -393,7 +393,7 @@ def _write_hatches(self):
style=generate_css({
'fill': rgb2hex(stroke),
'stroke': rgb2hex(stroke),
'stroke-width': '1.0',
'stroke-width': six.text_type(rcParams['hatch.linewidth']),
'stroke-linecap': 'butt',
'stroke-linejoin': 'miter'
})
Expand Down
2 changes: 2 additions & 0 deletions lib/matplotlib/mpl-data/stylelib/classic.mplstyle
Expand Up @@ -32,6 +32,8 @@ patch.facecolor : b
patch.edgecolor : k
patch.antialiased : True # render patches in antialiased (no jaggies)

hatch.linewidth : 1.0

hist.bins : 10

### FONT
Expand Down
3 changes: 3 additions & 0 deletions lib/matplotlib/rcsetup.py
Expand Up @@ -855,6 +855,9 @@ def validate_hist_bins(s):
'patch.facecolor': ['#1f77b4', validate_color], # blue (first color in color cycle)
'patch.antialiased': [True, validate_bool], # antialiased (no jaggies)

## hatch props
'hatch.linewidth': [1.0, validate_float],

## Histogram properties
'hist.bins': [10, validate_hist_bins],

Expand Down
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified lib/matplotlib/tests/baseline_images/test_colorbar/double_cbar.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions matplotlibrc.template
Expand Up @@ -109,6 +109,9 @@ backend : $TEMPLATE_BACKEND
#patch.edgecolor : black
#patch.antialiased : True # render patches in antialiased (no jaggies)

### HATCHES
#hatch.linewidth : 1.0

### Boxplot
#boxplot.notch : False
#boxplot.vertical : True
Expand Down
2 changes: 1 addition & 1 deletion src/_backend_agg.h
Expand Up @@ -363,7 +363,7 @@ RendererAgg::_draw_path(path_t &path, bool has_clippath, const facepair_t &face,
hatch_path_trans_t hatch_path_trans(hatch_path, hatch_trans);
hatch_path_curve_t hatch_path_curve(hatch_path_trans);
hatch_path_stroke_t hatch_path_stroke(hatch_path_curve);
hatch_path_stroke.width(1.0);
hatch_path_stroke.width(points_to_pixels(gc.hatch_linewidth));
hatch_path_stroke.line_cap(agg::square_cap);

// Render the path into the hatch buffer
Expand Down
1 change: 1 addition & 0 deletions src/_backend_agg_basic_types.h
Expand Up @@ -108,6 +108,7 @@ class GCAgg
e_snap_mode snap_mode;

py::PathIterator hatchpath;
double hatch_linewidth;

SketchParams sketch;

Expand Down
1 change: 1 addition & 0 deletions src/py_converters.cpp
Expand Up @@ -481,6 +481,7 @@ int convert_gcagg(PyObject *pygc, void *gcp)
convert_from_method(pygc, "get_clip_path", &convert_clippath, &gc->clippath) &&
convert_from_method(pygc, "get_snap", &convert_snap, &gc->snap_mode) &&
convert_from_method(pygc, "get_hatch_path", &convert_path, &gc->hatchpath) &&
convert_from_method(pygc, "get_hatch_linewidth", &convert_double, &gc->hatch_linewidth) &&
convert_from_method(pygc, "get_sketch_params", &convert_sketch_params, &gc->sketch))) {
return 0;
}
Expand Down

0 comments on commit f367f7b

Please sign in to comment.