# HG changeset patch # User Rik # Date 1607046400 28800 # Node ID f5e89a80ba8cd6e5deba558260df82b32a1cbb39 # Parent eacd1a3417c34c87b1d788c6ae88668298ad2d7c Use colors from "colormap" property for bar, barh if a "hist" option was given (bug #59589). * NEWS: Announce change * bar.m: Update documentation to point out that colors are taken from "ColorOrder" property for "stacked" or "grouped" option, but from "ColorMap" property for "hist" or "histc" option. This is Matlab compatible, and also possibly dumb. * hist.m: Update documentation to state that "ColorMap" property will be used for color selection. * __bar__.m: Add new variable ishist to indicate that a histogram option was given. Set "climmode" of axis to "auto" so that colormap data is correctly shown. * __bar__.m (bars): When ishist is true, set "cdata" field of patch object to the index of the bar group (1,2,3,...). diff -r eacd1a3417c3 -r f5e89a80ba8c NEWS --- a/NEWS Tue Dec 01 22:59:35 2020 +0100 +++ b/NEWS Thu Dec 03 17:46:40 2020 -0800 @@ -164,9 +164,9 @@ Previously the negative bars could overlap positive bars depending on drawing order. -- The functions `bar`, `barh`, and `hist` now use colors from the -`"ColorOrder"` axes property rather than the `"Colormap"` figure -property. +- The functions `bar` and `barh` now use colors from the `"ColorOrder"` +axes property rather than the `"Colormap"` figure property unless one +of the histogram options (@qcode{"hist"}, @qcode{"histc"} was specified. - The function `saveas` now defaults to saving in Octave figure format (.ofig) rather than PDF (.pdf). diff -r eacd1a3417c3 -r f5e89a80ba8c scripts/plot/draw/bar.m --- a/scripts/plot/draw/bar.m Tue Dec 01 22:59:35 2020 +0100 +++ b/scripts/plot/draw/bar.m Thu Dec 03 17:46:40 2020 -0800 @@ -95,8 +95,10 @@ ## ## @noindent ## The default color for bars is taken from the axes' @qcode{"ColorOrder"} -## property. The color of bars can also be set manually using the -## @qcode{"facecolor"} property as shown below. +## property. The default color for bars when a histogram option +## (@qcode{"hist"}, @qcode{"histc"} is used is the @qcode{"Colormap"} property +## of either the axes or figure. The color of bars can also be set manually +## using the @qcode{"facecolor"} property as shown below. ## ## @example ## @group diff -r eacd1a3417c3 -r f5e89a80ba8c scripts/plot/draw/hist.m --- a/scripts/plot/draw/hist.m Tue Dec 01 22:59:35 2020 +0100 +++ b/scripts/plot/draw/hist.m Thu Dec 03 17:46:40 2020 -0800 @@ -62,8 +62,8 @@ ## ## @noindent ## The full list of patch properties is documented at @ref{Patch Properties}. -## If not specified, the default colors for the histogram are taken from the -## axes' @qcode{"ColorOrder"} property. +## property. If not specified, the default colors for the histogram are taken +## from the @qcode{"Colormap"} property of the axes or figure. ## ## If the first argument @var{hax} is an axes handle, then plot into this axes, ## rather than the current axes returned by @code{gca}. diff -r eacd1a3417c3 -r f5e89a80ba8c scripts/plot/draw/private/__bar__.m --- a/scripts/plot/draw/private/__bar__.m Tue Dec 01 22:59:35 2020 +0100 +++ b/scripts/plot/draw/private/__bar__.m Thu Dec 03 17:46:40 2020 -0800 @@ -125,6 +125,8 @@ endif endwhile + ishist = islogical (histc); + ngrp = rows (x); if (isvector (y) && ngrp != rows (y)) @@ -137,7 +139,7 @@ nbars = columns (y); ## Column width is 1 for 'hist*' styles (bars touch). - if (islogical (histc)) + if (ishist) cwidth = 1; if (nbars == 1) gwidth = 1; @@ -173,7 +175,7 @@ xb = repmat ([x1; x1; x2; x2](:), 1, nbars); if (group) - if (islogical (histc) && histc) + if (ishist && histc) offset = 2*cdelta * [0:(nbars-1)] + cdelta(1); # not centered else offset = 2*cdelta * [-(nbars - 1) / 2 : (nbars - 1) / 2]; @@ -223,7 +225,7 @@ hax = newplot (hax); htmp = bars (hax, vertical, x, y, xb, yb, gwidth, group, - have_line_spec, bv, newargs{:}); + have_line_spec | ishist, bv, newargs{:}); if (! ishold ()) if (numel (x(:,1)) <= 15 && all (x(:,1) == fix (x(:,1)))) @@ -241,7 +243,7 @@ else set (hax, "clim", [0 1], "ylimmode", "manual"); endif - set (hax, "box", "on", "layer", "top"); + set (hax, "box", "on", "layer", "top", "climmode", "auto"); endif unwind_protect_cleanup if (! isempty (oldfig)) @@ -279,14 +281,14 @@ color = __next_line_color__ (); h = patch (hax, xb(:,:,i), yb(:,:,i), "FaceColor", color, "parent", hg); else - h = patch (hax, xb(:,:,i), yb(:,:,i), "parent", hg); + h = patch (hax, xb(:,:,i), yb(:,:,i), "cdata", i, "parent", hg); endif else if (! have_color_spec) color = __next_line_color__ (); h = patch (hax, yb(:,:,i), xb(:,:,i), "FaceColor", color, "parent", hg); else - h = patch (hax, yb(:,:,i), xb(:,:,i), "parent", hg); + h = patch (hax, yb(:,:,i), xb(:,:,i), "cdata", i, "parent", hg); endif endif