Matplotlib: формат числа тиков по оси - инженерная нотация - PullRequest
1 голос
/ 06 ноября 2019

Фон

Тики осей могут быть преобразованы в научный формат, как предлагается здесь .

Числа могут быть преобразованы в технический формат, по одному ввремя, как показано здесь

Вопрос

Как форматировать отметки по осям в инженерных обозначениях, т. е. порядок величины кратен 3.

Ответы [ 2 ]

1 голос
/ 06 ноября 2019

Играя с модулем 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()

Output

Пожалуйста, обратитесь к принятому ответу на ваш второй связанный вопрос и ответ : Показатели между 0 и -6 не преобразованы в желаемый формат по определению / стандарту. Кроме того, мне нужно было также использовать метод quantize из decimal, потому что в противном случае выведенные числа имели бы много позиций. (Удалите часть quantize, и вы поймете, о чем я.)

Надеюсь, это поможет!

1 голос
/ 06 ноября 2019

Возможно, вы захотите объяснить, что именно вы подразумеваете под «инженерной нотацией», но есть EngFormatter , который автоматически использует префиксы единиц СИ (т. Е. Микро, милли, килограммы, мега и т. Д.)

fig, ax = plt.subplots()
ax.set_ylim(0,1e6)
ticker = matplotlib.ticker.EngFormatter(unit='')
ax.yaxis.set_major_formatter(ticker)

resulting graph with engineering notation on y-axis

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...