Шкала переменной частоты Matplotlib по оси Y - PullRequest
1 голос
/ 05 апреля 2020

Кто-нибудь знает, как изменить шкалу Matplotlib по оси Y, чтобы иметь разный интервал и разные шаги между yticks.

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

x_data = np.arange(0, 1000, 10)
y_data = np.random.rand(100)

fig, ax = plt.subplots(figsize=(7,2))
plt.plot(x_data,y_data, color='black', linewidth=1)
plt.scatter(x_data,y_data, marker='o', facecolors='none', edgecolors='black', linewidth=1, s=20)
rect = patches.Rectangle((450,0), 100, 14,facecolor='blue', zorder=3)
ax.add_patch(rect)
ax.set_ylim(0,20)
ax.minorticks_on()
ax.yaxis.grid(True, linestyle='-', which='major', linewidth='0.75', alpha=.9)
ax.yaxis.grid(True, linestyle='--', which='minor', linewidth='0.75', alpha=0.6)

plt.show()

Это создает фигуру как таковую:

enter image description here

Однако я пытаюсь изменить ось Y, чтобы она была примерно такой (ниже), чтобы я мог лучше визуализировать распределение линейного графика, но все еще могу продемонстрировать высота прямоугольника.

enter image description here

Я пытаюсь, чтобы интервал первого тика (от 0 до 0,1) совпадал с расстоянием следующего тика (от 0,1 до 1), больший зазор от 1 до 5, а затем уменьшенный интервал для тиков после 5.

Ответы [ 2 ]

1 голос
/ 05 апреля 2020

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

Оказывается, все, что мне было нужно, это функция ax 1/2 , как было показано в примере здесь https://matplotlib.org/3.1.1/gallery/scales/scales.html#sphx -glr-gallery-scale-sizes-py

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

x_data = np.arange(0, 1000, 10)
y_data = np.random.rand(100)

fig, ax = plt.subplots(figsize=(7,2))
plt.plot(x_data,y_data, color='black', linewidth=1)
plt.scatter(x_data,y_data, marker='o', facecolors='none', edgecolors='black', linewidth=1, s=20)
rect = patches.Rectangle((450,0), 100, 14,facecolor='blue', zorder=3)
ax.add_patch(rect)
ax.set_ylim(0,20)
ax.minorticks_on()
ax.yaxis.grid(True, linestyle='-', which='major', linewidth='0.75', alpha=.9)
ax.yaxis.grid(True, linestyle='--', which='minor', linewidth='0.75', alpha=0.6)

def forward(x):
    return x**(1/2)

def inverse(x):
    return x**2

ax.set_yscale('function', functions=(forward, inverse))
ax.set_yticks([0,0.1,1,5,10,15,20])
ax.yaxis.set_minor_locator(plt.MultipleLocator(2.5))

plt.show()

Который производит:

enter image description here

1 голос
/ 05 апреля 2020

Я думаю, что часть документации matplotlib, которую вы ищете, это yscale или (если вы используете объектно-ориентированный API) set_yscale .

Если доступные по умолчанию шкалы y (например, 'log', 'symlog', 'lo git') не подходят вам, вы можете создать свою собственную шкалу. Вот документация о , что и пример .

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