Ниже приведен код форматирования значения x, которое я использовал.
Примеры того, что он делает:
- Он составляет 7 500 000 в 7,5 М
-
Он форматирует 800 000 в 800 К Это
def Formatting(self, x, pos): formats = ((1e-12,'%d%s T','%1.1f T'), (1e-9, '%d%s B','%1.1f B'), (1e-6, '%d%s M','%1.1f M'), (1e-3, '%d%s k','%1.1f K' )) for i, (N, A, B) in enumerate(formats): if abs(x) > (1./N): result = '' x = x * N if abs(x) >= 1000: x, r = divmod(x, 1000) result = ",%03d%s" % (r, result) return A % (x, result) else: return B % (x) elif 1 <= abs(x) < 1e3: return '%1.0f' % (x) elif 0.1 <= abs(x) < 1: return '%1.1f' % (x) elif 0 < abs(x) < 0.1: return '%1.3f' % (x) elif x == 0: return '%1.0f' % (x)
Теперь я изо всех сил стараюсь сделать следующие улучшения:
- Вместо 550 M я хотел бы иметь возможность печатать .55 B
- Вместо 550 B я хотел бы иметь возможность печатать .55 T
- Вместо 550 K я хотел бы иметь возможность печатать .55 M
- Вместо 0,001 я хотел бы иметь возможность печатать .001 без нулевого
- Однако 55,5 М, 55,5 В, 55,5 К все равно должны быть напечатаны - не .055 М, или .055 В..
Предложения о том, как выполнить это изменение или улучшить этот фрагмент кода, чтобы иметь более значимые распечатки (которые используются в диаграмме)?
Большое спасибо!