Частота xticks оцифрованных данных - PullRequest
0 голосов
/ 29 января 2020

Мой вопрос довольно прост, и, вероятно, есть действительно простой способ решить эту проблему, который я не смог выяснить.

Я строю одну серию pandas, которая имеет следующий формат (обратите внимание на binned data):

                       0
index                   
(0.0, 1.0]     -0.001563
(1.0, 2.0]     -0.014911
(2.0, 3.0]     -0.007187
(3.0, 4.0]     -0.003144
(4.0, 5.0]     -0.000145
(5.0, 6.0]      0.004209
(6.0, 7.0]      0.001705
(7.0, 8.0]     -0.000323
(8.0, 9.0]      0.000477

Однако, когда я пытаюсь построить график с использованием pd.Series.plot (поэтому столбец 0 - это y, а индекс - x), я получаю только несколько баллов по оси x. Я хотел бы установить галочку для более частых корзин. Тем не менее, я не добился успеха, так как индекс теперь категоричен, и нет никаких хитростей, чтобы установить числовой интервал.

Есть предложения о том, как это можно решить?

РЕДАКТИРОВАТЬ Итак, у меня есть следующий график:

enter image description here

Что я хочу, вместо показа Стандартные xticks, установленные графиком, я хочу выбрать, какие интервалы будут отображаться. Допустим, вместо того, чтобы показывать частоту каждые 50 интервалов, я хочу показать частоту каждые 15 интервалов

1 Ответ

0 голосов
/ 29 января 2020

Это решит ваш вопрос? Сначала галочки устанавливаются для категориальных осей как 0,1,2,.... Затем индекс используется в качестве метки. Вращение помогает избежать наложения этикеток.

В следующем примере 200 лотков, и устанавливаются отметки каждые 15 позиций. Он также добавляет второстепенные тики (без метки) каждые 3 позиции.

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

df = pd.DataFrame({'val': np.random.uniform(10,20,5000)})
cut = pd.cut(df['val'], bins=200).value_counts()
cut.plot(rot=90)
tickrange = range(0, len(cut), 15)
plt.xticks(tickrange, cut.index[tickrange])
plt.gca().set_xticks(range(0, len(cut), 3), minor=True)
plt.tight_layout()
plt.show()

example plot

Если ваши интервалы отсортированы, вы можете начать (или середина) интервала как метка. Например:

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

df = pd.DataFrame({'val': np.concatenate([np.random.uniform(0, 360, 2000),
                                          np.random.normal(92, 3, 200),
                                          np.random.normal(255, 3, 200)])})
cut = pd.cut(df['val'], bins=range(361)).value_counts().sort_index()
cut.plot(rot=0)
tickrange = range(0, len(cut), 20)
# t.left: interval start, t.right: interval end, t.mid: interval center
ticklabels = [t.left for t in cut.index[tickrange]]
plt.xticks(tickrange, ticklabels)
plt.gca().set_xticks(range(0, len(cut), 5), minor=True)
plt.tight_layout()
plt.show()

sample with simpler ticks

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