Python - MatPlotLib - Как я могу установить две отметки на моей оси X, один в крайнем левом и один в крайнем правом? - PullRequest
2 голосов
/ 27 марта 2019

Поэтому я пытаюсь отобразить некоторую аналитику в своем веб-приложении на python.Я хочу отобразить дату и время для первой и последней записей по оси X.

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

plt.scatter(x_data, y_data)
    plt.grid(True)
    plt.xticks(x_data, [x_data[0], x_data[-1]])
    fig = plt.gcf()

Где x_data:

['10:59:44 27-03-2019', '11:00:07 27-03-2019', '11:00:09 27-03-2019', '11:00:12 27-03-2019', '11:30:23 27-03-2019', '11:30:29 27-03-2019', '11:30:30 27-03-2019', '11:30:31 27-03-2019', '11:30:32 27-03-2019', '11:32:44 27-03-2019', '11:33:21 27-03-2019', '11:35:50 27-03-2019', '12:16:12 27-03-2019', '12:16:39 27-03-2019', '12:17:36 27-03-2019', '12:19:40 27-03-2019', '12:23:50 27-03-2019']

Я ожидал, что выходные данные поместят один крайний левый, а другой крайний правый.Вместо этого первые два тика просто показывали перекрывающиеся времена.

Я не уверен, каков правильный способ сделать это.

Ответы [ 2 ]

2 голосов
/ 27 марта 2019

Вот обходное решение, использующее некоторые случайные данные, потому что вы не указали, что такое y_data.Идея состоит в том, чтобы просмотреть существующие метки по умолчанию, а затем заменить все метки на пустые строки, кроме первой и последней.

fig, ax = plt.subplots()

plt.scatter(x_data, range(len(x_data)))
plt.grid(True)

fig.canvas.draw()
xticks = ax.get_xticklabels()
labels_new = [lab.get_text() if i in [0, len(xticks)-1] else "" 
          for i, lab in enumerate(xticks) ]

ax.set_xticklabels(labels_new)

plt.show()

enter image description here

1 голос
/ 27 марта 2019

Я подозреваю, что ваша проблема в том, что вы определяете вектор тиков, а затем назначаете две метки (в позиции 0 и 1).

import numpy as np
import matplotlib.pyplot as plt

x_data=np.array([1,2,3,4,5,6,7,8])
y_data=np.random.normal(0, 1, (8, 1))

# create an array for your labels 
new_labels=[''] * (len(x_data)-2)
new_labels.insert(0,x_data[0])
new_labels.append(x_data[-1])

plt.scatter(x_data, y_data)
plt.grid(True)
plt.xticks(x_data, new_labels) #use the new tick labels
fig = plt.gcf()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...