Играя с модулем decimal
, я нашел следующее решение:
from decimal import Decimal
import matplotlib.pyplot as plt
import numpy as np
data1 = np.linspace(-9, 9, 19)
data2 = 2.3 * 10**data1
yticks = 10**(np.linspace(-9, 9, 19))
yticklabels = [Decimal(y).quantize(Decimal('0.0000000001')).normalize().to_eng_string() for y in yticks]
plt.figure(1)
plt.subplot(121)
plt.grid(True)
plt.xlabel('k')
plt.ylabel('10^k')
plt.plot(data1, data2, 'k.')
plt.yscale('log')
plt.xticks(data1)
plt.yticks(yticks)
plt.subplot(122)
plt.grid(True)
plt.xlabel('k')
plt.ylabel('10^k')
plt.plot(data1, data2, 'k.')
plt.yscale('log')
plt.xticks(data1)
plt.yticks(yticks, yticklabels)
plt.show()
Пожалуйста, обратитесь к принятому ответу на ваш второй связанный вопрос и ответ : Показатели между 0
и -6
не преобразованы в желаемый формат по определению / стандарту. Кроме того, мне нужно было также использовать метод quantize
из decimal
, потому что в противном случае выведенные числа имели бы много позиций. (Удалите часть quantize
, и вы поймете, о чем я.)
Надеюсь, это поможет!