Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 5ff7e37

Browse filesBrowse files
mdboomtacaswell
authored andcommitted
Merge pull request #5594 from tacaswell/fix_logformatterexponent
FIX: formatting in LogFormatterExponent
1 parent 6d42e0a commit 5ff7e37
Copy full SHA for 5ff7e37

File tree

Expand file treeCollapse file tree

2 files changed

+177
-15
lines changed
Filter options
Expand file treeCollapse file tree

2 files changed

+177
-15
lines changed

‎lib/matplotlib/tests/test_ticker.py

Copy file name to clipboardExpand all lines: lib/matplotlib/tests/test_ticker.py
+169-10Lines changed: 169 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -159,20 +159,28 @@ def test_SymmetricalLogLocator_set_params():
159159
nose.tools.assert_equal(sym.numticks, 8)
160160

161161

162+
def _logfe_helper(formatter, base, locs, i, expected_result):
163+
vals = base**locs
164+
labels = [formatter(x, pos) for (x, pos) in zip(vals, i)]
165+
nose.tools.assert_equal(labels, expected_result)
166+
167+
162168
def test_LogFormatterExponent():
163169
class FakeAxis(object):
164170
"""Allow Formatter to be called without having a "full" plot set up."""
171+
def __init__(self, vmin=1, vmax=10):
172+
self.vmin = vmin
173+
self.vmax = vmax
174+
165175
def get_view_interval(self):
166-
return 1, 10
176+
return self.vmin, self.vmax
167177

168178
i = np.arange(-3, 4, dtype=float)
169179
expected_result = ['-3', '-2', '-1', '0', '1', '2', '3']
170-
for base in [2, 5, 10, np.pi, np.e]:
180+
for base in [2, 5.0, 10.0, np.pi, np.e]:
171181
formatter = mticker.LogFormatterExponent(base=base)
172-
formatter.axis = FakeAxis()
173-
vals = base**i
174-
labels = [formatter(x, pos) for (x, pos) in zip(vals, i)]
175-
nose.tools.assert_equal(labels, expected_result)
182+
formatter.axis = FakeAxis(1, base**4)
183+
yield _logfe_helper, formatter, base, i, i, expected_result
176184

177185
# Should be a blank string for non-integer powers if labelOnlyBase=True
178186
formatter = mticker.LogFormatterExponent(base=10, labelOnlyBase=True)
@@ -185,10 +193,161 @@ def get_view_interval(self):
185193
expected_result = ['0.1', '1e-05', '3.14', '0.2', '-0.2', '-1e-05']
186194
for base in [2, 5, 10, np.pi, np.e]:
187195
formatter = mticker.LogFormatterExponent(base, labelOnlyBase=False)
188-
formatter.axis = FakeAxis()
189-
vals = base**locs
190-
labels = [formatter(x, pos) for (x, pos) in zip(vals, i)]
191-
nose.tools.assert_equal(labels, expected_result)
196+
formatter.axis = FakeAxis(1, base**10)
197+
yield _logfe_helper, formatter, base, locs, i, expected_result
198+
199+
expected_result = ['3', '5', '12', '42']
200+
locs = np.array([3, 5, 12, 42], dtype='float')
201+
for base in [2, 5.0, 10.0, np.pi, np.e]:
202+
formatter = mticker.LogFormatterExponent(base, labelOnlyBase=False)
203+
formatter.axis = FakeAxis(1, base**50)
204+
yield _logfe_helper, formatter, base, locs, i, expected_result
205+
206+
207+
def _pprint_helper(value, domain, expected):
208+
fmt = mticker.LogFormatter()
209+
label = fmt.pprint_val(value, domain)
210+
nose.tools.assert_equal(label, expected)
211+
212+
213+
def test_logformatter_pprint():
214+
test_cases = (
215+
(3.141592654e-05, 0.001, '3.142e-5'),
216+
(0.0003141592654, 0.001, '3.142e-4'),
217+
(0.003141592654, 0.001, '3.142e-3'),
218+
(0.03141592654, 0.001, '3.142e-2'),
219+
(0.3141592654, 0.001, '3.142e-1'),
220+
(3.141592654, 0.001, '3.142'),
221+
(31.41592654, 0.001, '3.142e1'),
222+
(314.1592654, 0.001, '3.142e2'),
223+
(3141.592654, 0.001, '3.142e3'),
224+
(31415.92654, 0.001, '3.142e4'),
225+
(314159.2654, 0.001, '3.142e5'),
226+
(1e-05, 0.001, '1e-5'),
227+
(0.0001, 0.001, '1e-4'),
228+
(0.001, 0.001, '1e-3'),
229+
(0.01, 0.001, '1e-2'),
230+
(0.1, 0.001, '1e-1'),
231+
(1, 0.001, '1'),
232+
(10, 0.001, '10'),
233+
(100, 0.001, '100'),
234+
(1000, 0.001, '1000'),
235+
(10000, 0.001, '1e4'),
236+
(100000, 0.001, '1e5'),
237+
(3.141592654e-05, 0.015, '0'),
238+
(0.0003141592654, 0.015, '0'),
239+
(0.003141592654, 0.015, '0.003'),
240+
(0.03141592654, 0.015, '0.031'),
241+
(0.3141592654, 0.015, '0.314'),
242+
(3.141592654, 0.015, '3.142'),
243+
(31.41592654, 0.015, '31.416'),
244+
(314.1592654, 0.015, '314.159'),
245+
(3141.592654, 0.015, '3141.593'),
246+
(31415.92654, 0.015, '31415.927'),
247+
(314159.2654, 0.015, '314159.265'),
248+
(1e-05, 0.015, '0'),
249+
(0.0001, 0.015, '0'),
250+
(0.001, 0.015, '0.001'),
251+
(0.01, 0.015, '0.01'),
252+
(0.1, 0.015, '0.1'),
253+
(1, 0.015, '1'),
254+
(10, 0.015, '10'),
255+
(100, 0.015, '100'),
256+
(1000, 0.015, '1000'),
257+
(10000, 0.015, '10000'),
258+
(100000, 0.015, '100000'),
259+
(3.141592654e-05, 0.5, '0'),
260+
(0.0003141592654, 0.5, '0'),
261+
(0.003141592654, 0.5, '0.003'),
262+
(0.03141592654, 0.5, '0.031'),
263+
(0.3141592654, 0.5, '0.314'),
264+
(3.141592654, 0.5, '3.142'),
265+
(31.41592654, 0.5, '31.416'),
266+
(314.1592654, 0.5, '314.159'),
267+
(3141.592654, 0.5, '3141.593'),
268+
(31415.92654, 0.5, '31415.927'),
269+
(314159.2654, 0.5, '314159.265'),
270+
(1e-05, 0.5, '0'),
271+
(0.0001, 0.5, '0'),
272+
(0.001, 0.5, '0.001'),
273+
(0.01, 0.5, '0.01'),
274+
(0.1, 0.5, '0.1'),
275+
(1, 0.5, '1'),
276+
(10, 0.5, '10'),
277+
(100, 0.5, '100'),
278+
(1000, 0.5, '1000'),
279+
(10000, 0.5, '10000'),
280+
(100000, 0.5, '100000'),
281+
(3.141592654e-05, 5, '0'),
282+
(0.0003141592654, 5, '0'),
283+
(0.003141592654, 5, '0'),
284+
(0.03141592654, 5, '0.03'),
285+
(0.3141592654, 5, '0.31'),
286+
(3.141592654, 5, '3.14'),
287+
(31.41592654, 5, '31.42'),
288+
(314.1592654, 5, '314.16'),
289+
(3141.592654, 5, '3141.59'),
290+
(31415.92654, 5, '31415.93'),
291+
(314159.2654, 5, '314159.27'),
292+
(1e-05, 5, '0'),
293+
(0.0001, 5, '0'),
294+
(0.001, 5, '0'),
295+
(0.01, 5, '0.01'),
296+
(0.1, 5, '0.1'),
297+
(1, 5, '1'),
298+
(10, 5, '10'),
299+
(100, 5, '100'),
300+
(1000, 5, '1000'),
301+
(10000, 5, '10000'),
302+
(100000, 5, '100000'),
303+
(3.141592654e-05, 100, '0'),
304+
(0.0003141592654, 100, '0'),
305+
(0.003141592654, 100, '0'),
306+
(0.03141592654, 100, '0'),
307+
(0.3141592654, 100, '0.3'),
308+
(3.141592654, 100, '3.1'),
309+
(31.41592654, 100, '31.4'),
310+
(314.1592654, 100, '314.2'),
311+
(3141.592654, 100, '3141.6'),
312+
(31415.92654, 100, '31415.9'),
313+
(314159.2654, 100, '314159.3'),
314+
(1e-05, 100, '0'),
315+
(0.0001, 100, '0'),
316+
(0.001, 100, '0'),
317+
(0.01, 100, '0'),
318+
(0.1, 100, '0.1'),
319+
(1, 100, '1'),
320+
(10, 100, '10'),
321+
(100, 100, '100'),
322+
(1000, 100, '1000'),
323+
(10000, 100, '10000'),
324+
(100000, 100, '100000'),
325+
(3.141592654e-05, 1000000.0, '3.1e-5'),
326+
(0.0003141592654, 1000000.0, '3.1e-4'),
327+
(0.003141592654, 1000000.0, '3.1e-3'),
328+
(0.03141592654, 1000000.0, '3.1e-2'),
329+
(0.3141592654, 1000000.0, '3.1e-1'),
330+
(3.141592654, 1000000.0, '3.1'),
331+
(31.41592654, 1000000.0, '3.1e1'),
332+
(314.1592654, 1000000.0, '3.1e2'),
333+
(3141.592654, 1000000.0, '3.1e3'),
334+
(31415.92654, 1000000.0, '3.1e4'),
335+
(314159.2654, 1000000.0, '3.1e5'),
336+
(1e-05, 1000000.0, '1e-5'),
337+
(0.0001, 1000000.0, '1e-4'),
338+
(0.001, 1000000.0, '1e-3'),
339+
(0.01, 1000000.0, '1e-2'),
340+
(0.1, 1000000.0, '1e-1'),
341+
(1, 1000000.0, '1'),
342+
(10, 1000000.0, '10'),
343+
(100, 1000000.0, '100'),
344+
(1000, 1000000.0, '1000'),
345+
(10000, 1000000.0, '1e4'),
346+
(100000, 1000000.0, '1e5')
347+
)
348+
349+
for value, domain, expected in test_cases:
350+
yield _pprint_helper, value, domain, expected
192351

193352

194353
def test_use_offset():

‎lib/matplotlib/ticker.py

Copy file name to clipboardExpand all lines: lib/matplotlib/ticker.py
+8-5Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -746,13 +746,15 @@ def pprint_val(self, x, d):
746746
else:
747747
fmt = '%1.3f'
748748
s = fmt % x
749-
#print d, x, fmt, s
749+
750750
tup = s.split('e')
751751
if len(tup) == 2:
752752
mantissa = tup[0].rstrip('0').rstrip('.')
753-
sign = tup[1][0].replace('+', '')
754-
exponent = tup[1][1:].lstrip('0')
755-
s = '%se%s%s' % (mantissa, sign, exponent)
753+
exponent = int(tup[1])
754+
if exponent:
755+
s = '%se%d' % (mantissa, exponent)
756+
else:
757+
s = mantissa
756758
else:
757759
s = s.rstrip('0').rstrip('.')
758760
return s
@@ -783,7 +785,8 @@ def __call__(self, x, pos=None):
783785
elif abs(fx) < 1:
784786
s = '%1.0g' % fx
785787
else:
786-
s = self.pprint_val(fx, d)
788+
fd = math.log(abs(d)) / math.log(b)
789+
s = self.pprint_val(fx, fd)
787790
if sign == -1:
788791
s = '-%s' % s
789792

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.