@@ -1057,10 +1057,16 @@ ScaleBinned <- ggproto("ScaleBinned", Scale,
10571057 expand_range4(self $ get_limits(), expand )
10581058 },
10591059
1060+ get_limits = function (self ) {
1061+ ggproto_parent(ScaleContinuous , self )$ get_limits()
1062+ },
1063+
10601064 get_breaks = function (self , limits = self $ get_limits()) {
10611065 if (self $ is_empty()) return (numeric ())
10621066
10631067 limits <- self $ trans $ inverse(limits )
1068+ is_rev <- limits [2 ] < limits [1 ]
1069+ limits <- sort(limits )
10641070
10651071 if (is.null(self $ breaks )) {
10661072 return (NULL )
@@ -1107,7 +1113,11 @@ ScaleBinned <- ggproto("ScaleBinned", Scale,
11071113 }
11081114 new_limits_trans <- suppressWarnings(self $ trans $ transform(new_limits ))
11091115 limits [is.finite(new_limits_trans )] <- new_limits [is.finite(new_limits_trans )]
1110- self $ limits <- self $ trans $ transform(limits )
1116+ if (is_rev ) {
1117+ self $ limits <- rev(self $ trans $ transform(limits ))
1118+ } else {
1119+ self $ limits <- self $ trans $ transform(limits )
1120+ }
11111121 }
11121122 } else if (is.function(self $ breaks )) {
11131123 if (" n.breaks" %in% names(formals(environment(self $ breaks )$ f ))) {
@@ -1124,7 +1134,8 @@ ScaleBinned <- ggproto("ScaleBinned", Scale,
11241134 }
11251135
11261136 # Breaks must be within limits
1127- breaks <- breaks [breaks > = limits [1 ] & breaks < = limits [2 ]]
1137+ breaks <- oob_discard(breaks , sort(limits ))
1138+
11281139 self $ breaks <- breaks
11291140
11301141 self $ trans $ transform(breaks )
0 commit comments