Отобразите конкретные значения по оси Y вместо увеличения масштаба из кадра данных - PullRequest
0 голосов
/ 12 июня 2018

При построении 2 столбцов из информационного кадра в линейный график, возможно ли, вместо постоянно увеличивающегося масштаба, иметь фиксированные значения на вашей оси y (и сохранять расстояния между числами на оси постоянными)?Например, вместо 0, 100, 200, 300, ... иметь 0, 21, 53, 124, 287, в зависимости от значений из вашего набора данных?Таким образом, в основном, чтобы на оси были зафиксированы все возможные значения вместо увеличения масштаба?

Ответы [ 2 ]

0 голосов
/ 14 июня 2018

Что вам нужно сделать, это:

  1. получить все отличные y значения и отсортировать их

  2. установить их y позициюна графике в соответствии с их местом в упорядоченном списке

  3. установите метки y в соответствии с различными упорядоченными значениями

Код ниже будет делать

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

df = pd.DataFrame([[13, 1], [14, 1.8], [16, 2], [15, 1.5], [17, 2], [18, 3 ], 
                   [19, 200],[20, 3.6], ], columns = ['A','B'])

x = df['A']
y = df['B']

y_keys = np.sort(y.unique())
y_values = range(len(y_keys))
y_dict = dict(zip(y_keys,y_values))

fig, ax = plt.subplots()

ax.plot(x,[y_dict[k] for k in y],'o-')

ax.set_yticks(y_values)
ax.set_yticklabels(y_keys)

fixed y distance but different values

0 голосов
/ 12 июня 2018

Да, вы можете использовать: ax.set_yticks()

Пример:

df = pd.DataFrame([[13, 1], [14, 1.5], [15, 1.8], [16, 2], [17, 2], [18, 3 ], [19, 3.6]], columns = ['A','B'])
fig, ax = plt.subplots()

x = df['A']
y = df['B']
ax.plot(x, y, 'g-')
ax.set_yticks(y)
plt.show()

enter image description here Или, если значения очень далеки друг от друга, вы можетеиспользуйте ax.set_yscale('log').Пример:

df = pd.DataFrame([[13, 1], [14, 1.5], [15, 1.8], [16, 2], [17, 2], [18, 3 ], [19, 3.6], [20, 300]], columns = ['A','B'])
fig, ax = plt.subplots()

x = df['A']
y = df['B']

ax.plot(x, y, 'g-')
ax.set_yscale('log', basex=2)
ax.yaxis.set_ticks(y)
ax.yaxis.set_ticklabels(y)
plt.show()

enter image description here

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