PyLab: нанесение осей на логарифмический масштаб, но маркировка определенных точек на осях - PullRequest
4 голосов
/ 09 апреля 2011

По сути, я делаю анализ масштабируемости, поэтому я работаю с числами вроде 2,4,8,16,32 ... и т. Д., И единственный способ, которым графики выглядят рационально, - это использование логарифмической шкалы.

Но вместо обычной маркировки 10 ^ 1, 10 ^ 2 и т. Д. Я хочу, чтобы эти точки данных (2,4,8 ...) были указаны на осях

Есть идеи?

1 Ответ

8 голосов
/ 09 апреля 2011

Существует более одного способа сделать это, в зависимости от того, насколько вы хотите быть гибким / модным.

Самый простой способ - сделать что-то вроде этого:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl

x = np.exp2(np.arange(10))

plt.semilogy(x)
plt.yticks(x, x)

# Turn y-axis minor ticks off 
plt.gca().yaxis.set_minor_locator(mpl.ticker.NullLocator())

plt.show()

enter image description here

Если вы хотите сделать это более гибким способом, то, возможно, вы могли бы использовать что-то вроде этого:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl

x = np.exp2(np.arange(10))

fig = plt.figure()
ax = fig.add_subplot(111) 
ax.semilogy(x)
ax.yaxis.get_major_locator().base(2)
ax.yaxis.get_minor_locator().base(2)

# This will place 1 minor tick halfway (in linear space) between major ticks
# (in general, use np.linspace(1, 2.0001, numticks-2))
ax.yaxis.get_minor_locator().subs([1.5])

ax.yaxis.get_major_formatter().base(2)

plt.show()

enter image description here

Или как-то так:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl

x = np.exp2(np.arange(10))

fig = plt.figure()
ax = fig.add_subplot(111) 
ax.semilogy(x)
ax.yaxis.get_major_locator().base(2)
ax.yaxis.get_minor_locator().base(2)

ax.yaxis.get_minor_locator().subs([1.5])

# This is the only difference from the last snippet, uses "regular" numbers.
ax.yaxis.set_major_formatter(mpl.ticker.ScalarFormatter())

plt.show()

enter image description here

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