Как настроить x тики для строковых значений в Python - PullRequest
0 голосов
/ 16 декабря 2018

У меня проблема с построением очень простой фигуры временного ряда на Python.Я играл с данными из Твиттера, и мой x - это дни и времена, а мой y - некоторый счет, который я вычисляю на основе твитов.Очевидная проблема заключается в том, что мой x продолжает расширяться до такой степени, что ось x при построении графика не отражает все значения x в моем наборе данных.Конечно, я полностью согласен с этим, но я хотел бы, чтобы ось х по крайней мере начиналась с первого значения х и заканчивалась последним значением х в моем наборе данных, чтобы я могла оценить эволюциюэтого счета в почти в реальном времени.Это, по крайней мере, создало бы график, на котором мы могли бы видеть, как изменился счет, который я вычислял, с тех пор, как я начал собирать твиты, и до самого последнего дня, для которого я составляю соответствующий счет.Вот код, который у меня есть:

n = datetime.date.today().strftime("%B %d, %Y") #Here I'm registering today's date

a_plot=df_US.plot(x='Some timeframe', y='Some Score')
a_plot

plt.xticks(rotation=60)
plt.ylabel('Some Score')
plt.title('Evolution of Some Score in Tweets',fontdict=None, loc='center')
plt.savefig('Some Score('+n+').png', dpi=300, bbox_inches = 'tight')
plt.show()

Вот что я получаю, основываясь на этом скрипте. График некоторых временных рядов

Я в порядке, когда ось x начинается там, где она есть, только я бы хотел, чтобы она закончилась для последнего значения x в наборе данных.Я также хорошо с тем, что между ними меньше тиков.

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

1 Ответ

0 голосов
/ 17 декабря 2018

Ииук, вы можете попробовать следующую функцию, которая вычисляет n равноудаленных дат и времени между первым и последним из данного массива:

import datetime

def custom_ticks(timings, n):
    dt = (timings[-1] - timings[0]).days +1
    return [timings[0]+i*datetime.timedelta(dt/(n-1)) for i in range(n)]

, а затем, после построения вашего фрейма данных, вы можете использовать эту функциючтобы определить ваши собственные тики:

plt.xticks(custom_ticks(df_US['Some timeframe'], 5))
...