From c2a6da5153e1d57dcfc7cb4985a7089d068bf0b3 Mon Sep 17 00:00:00 2001 From: Umair Idris Date: Mon, 23 Mar 2015 04:10:29 -0400 Subject: [PATCH] Add functionality to plot bar and barh with string labels. Add what's new entry. --- doc/users/whats_new/plotting.rst | 8 ++++++ lib/matplotlib/axes/_axes.py | 26 +++++++++++++++++ .../test_axes/bar_tick_label_multiple.png | Bin 0 -> 8246 bytes .../test_axes/bar_tick_label_single.png | Bin 0 -> 8936 bytes .../test_axes/barh_tick_label.png | Bin 0 -> 6405 bytes lib/matplotlib/tests/test_axes.py | 27 +++++++++++++++++- 6 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 lib/matplotlib/tests/baseline_images/test_axes/bar_tick_label_multiple.png create mode 100644 lib/matplotlib/tests/baseline_images/test_axes/bar_tick_label_single.png create mode 100644 lib/matplotlib/tests/baseline_images/test_axes/barh_tick_label.png diff --git a/doc/users/whats_new/plotting.rst b/doc/users/whats_new/plotting.rst index 1139b5e78e78..1ca2f6a69434 100644 --- a/doc/users/whats_new/plotting.rst +++ b/doc/users/whats_new/plotting.rst @@ -1,3 +1,11 @@ +Plot bar and barh with labels +````````````````````````````` + +Added kwarg "tick_label" to bar and barh to support plotting bar graphs with a +text label for each bar. +Example: + bar([1, 2], [1, 1], tick_label=['bar1', 'bar2']) + Added center and frame kwargs to pie ```````````````````````````````````` diff --git a/lib/matplotlib/axes/_axes.py b/lib/matplotlib/axes/_axes.py index 0659bbce362c..9389e7ea4220 100644 --- a/lib/matplotlib/axes/_axes.py +++ b/lib/matplotlib/axes/_axes.py @@ -1838,6 +1838,10 @@ def bar(self, left, height, width=0.8, bottom=None, **kwargs): linewidth; If 0, don't draw edges. default: None + tick_label : string or array-like, optional + the tick labels of the bars + default: None + xerr : scalar or array-like, optional if not None, will be used to generate errorbar(s) on the bar chart default: None @@ -1908,6 +1912,9 @@ def bar(self, left, height, width=0.8, bottom=None, **kwargs): edgecolor = kwargs.pop('edgecolor', None) linewidth = kwargs.pop('linewidth', None) + tick_label = kwargs.pop('tick_label', None) + label_ticks_flag = tick_label is not None + # Because xerr and yerr will be passed to errorbar, # most dimension checking and processing will be left # to the errorbar method. @@ -1938,6 +1945,7 @@ def make_iterable(x): _bottom = bottom bottom = make_iterable(bottom) linewidth = make_iterable(linewidth) + tick_label = make_iterable(tick_label) adjust_ylim = False adjust_xlim = False @@ -1956,6 +1964,9 @@ def make_iterable(x): width *= nbars if len(bottom) == 1: bottom *= nbars + + tick_label_axis = self.xaxis + tick_label_position = left elif orientation == 'horizontal': self._process_unit_info(xdata=width, ydata=bottom, kwargs=kwargs) if log: @@ -1971,11 +1982,16 @@ def make_iterable(x): left *= nbars if len(height) == 1: height *= nbars + + tick_label_axis = self.yaxis + tick_label_position = bottom else: raise ValueError('invalid orientation: %s' % orientation) if len(linewidth) < nbars: linewidth *= nbars + if len(tick_label) < nbars: + tick_label *= nbars if color is None: color = [None] * nbars @@ -2008,6 +2024,9 @@ def make_iterable(x): if len(bottom) != nbars: raise ValueError("incompatible sizes: argument 'bottom' " "must be length %d or scalar" % nbars) + if len(tick_label) != nbars: + raise ValueError("incompatible sizes: argument 'tick_label' " + "must be length %d or string" % nbars) patches = [] @@ -2103,6 +2122,10 @@ def make_iterable(x): bar_container = BarContainer(patches, errorbar, label=label) self.add_container(bar_container) + if label_ticks_flag: + tick_label_axis.set_ticks(tick_label_position) + tick_label_axis.set_ticklabels(tick_label) + return bar_container @docstring.dedent_interpd @@ -2148,6 +2171,9 @@ def barh(self, bottom, width, height=0.8, left=None, **kwargs): width of bar edge(s). If None, use default linewidth; If 0, don't draw edges. + tick_label : string or array-like, optional, default: None + the tick labels of the bars + xerr : scalar or array-like, optional, default: None if not None, will be used to generate errorbar(s) on the bar chart diff --git a/lib/matplotlib/tests/baseline_images/test_axes/bar_tick_label_multiple.png b/lib/matplotlib/tests/baseline_images/test_axes/bar_tick_label_multiple.png new file mode 100644 index 0000000000000000000000000000000000000000..a0ce8625befc63ba658c8179f367a1dacdf47431 GIT binary patch literal 8246 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 J{(&>s{sW@P_yYg{ literal 0 HcmV?d00001 diff --git a/lib/matplotlib/tests/baseline_images/test_axes/barh_tick_label.png b/lib/matplotlib/tests/baseline_images/test_axes/barh_tick_label.png new file mode 100644 index 0000000000000000000000000000000000000000..e83d42a4290d005a496bf1016211d11356808150 GIT binary patch literal 6405 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 Q1pplQ!Sj3icOmEh1t9I&a{vGU literal 0 HcmV?d00001 diff --git a/lib/matplotlib/tests/test_axes.py b/lib/matplotlib/tests/test_axes.py index fe6c5c4567a9..de71bd409275 100644 --- a/lib/matplotlib/tests/test_axes.py +++ b/lib/matplotlib/tests/test_axes.py @@ -131,7 +131,6 @@ def test_twinx_cla(): @image_comparison(baseline_images=["minorticks_on_rcParams_both"], extensions=['png']) def test_minorticks_on_rcParams_both(): - fig = plt.figure() matplotlib.rcParams['xtick.minor.visible'] = True matplotlib.rcParams['ytick.minor.visible'] = True @@ -1011,6 +1010,32 @@ def test_marker_edges(): ax.plot(x+0.2, np.sin(x), 'y.', ms=30.0, mew=2, mec='b') +@image_comparison(baseline_images=['bar_tick_label_single'], + extensions=['png']) +def test_bar_tick_label_single(): + # From 2516: plot bar with array of string labels for x axis + ax = plt.gca() + ax.bar(0, 1 , tick_label='a') + + +@image_comparison(baseline_images=['bar_tick_label_multiple'], + extensions=['png']) +def test_bar_tick_label_multiple(): + # From 2516: plot bar with array of string labels for x axis + ax = plt.gca() + ax.bar([1, 2.5], [1, 2], width=[0.2, 0.5], tick_label=['a', 'b'], + align='center') + + +@image_comparison(baseline_images=['barh_tick_label'], + extensions=['png']) +def test_barh_tick_label(): + # From 2516: plot barh with array of string labels for y axis + ax = plt.gca() + ax.barh([1, 2.5], [1, 2], height=[0.2, 0.5], tick_label=['a', 'b'], + align='center') + + @image_comparison(baseline_images=['hist_log'], remove_text=True) def test_hist_log():