@PashaLynx
Страшный дилетант

Как в matplotlib уменьшить диапазон?

Здравствуйте. Новичок в matplotlib. Стоит задача - сделать график колебания курса валют. Есть скрипт, создающий два списка - в одном курс валют, в другом - время, когда приблизительно были сделаны измерения(он ниже).

price = []
check_time = []


conn = sqlite3.connect('data.db')
c = conn.cursor()
z = c.execute('''SELECT value FROM euro ORDER BY id DESC LIMIT 50;''')
rowss = z.fetchall()
for row in rowss:
    s = row[0]
    s = float(s)
    check_time.append(s)

now = datetime.now()

i=1
while i<=50:
    time_value=now - timedelta(minutes=10)
    #time_on=datetime.strftime(time_value, '%d/%m/%y %I:%M')
    price.append(time_value)
    i=i+1
dates = matplotlib.dates.date2num(price)

plt.plot(price, check_time)
plt.show()


Но поскольку изменения данных очень малы(+10 мин и +-несколько копеек), то чтобы это увидеть нужна довольно малая цена деления. Мой график выглядит так -
5fb14d647b24a742642490.png
На всякий случай - стоимость валюты вида - 91.49, время - (2020, 11, 15, 18, 32, 29, 528208)
Скажите, как можно исправить:
1 -Цену деления по x и y.
2 - Есть ли возможность допустим, отображать деления даты через одну, чтобы они не накладывались друг на друга.
Заранее спасибо за помощь.
  • Вопрос задан
  • 393 просмотра
Решения вопроса 1
@PashaLynx Автор вопроса
Страшный дилетант
Ну, во-первых, надо быть внимательным. В скрипте была ошибка, из-за которой все даты были равны.
Отвечаю на второй вопрос - чтобы дата была такой, какой вам надо, используйте DateFormatter.
Исправленный код будет выглядеть вот так
import matplotlib.pyplot as plt
import matplotlib
import sqlite3
from matplotlib import dates
from datetime import datetime, timedelta
import matplotlib.dates as mdates

price = []
check_time = []


conn = sqlite3.connect('data.db')
c = conn.cursor()
z = c.execute('''SELECT value FROM euro ORDER BY id DESC LIMIT 114;''')
rowss = z.fetchall()
for row in rowss:
    s = row[0]
    s = float(s)
    price.append(s)

now = datetime.now()
time_value = now
i=1
while i<=114:
    check_time.append(time_value)
    time_value = time_value - timedelta(minutes=10)
    i=i+1

dates = matplotlib.dates.date2num(check_time)
plt.plot(check_time, price, label='курс евро')
plt.title('КУРС ЕВРО ЗА ПОСЛЕДНИЕ СУТКИ. ', fontsize=15)
plt.xlabel('время', fontsize=12, color='blue')
plt.ylabel('стоимость', fontsize=12, color='blue')
plt.xticks(rotation=45)
plt.legend()
plt.grid(True)
# Преобразовываем дату
plt.gcf().autofmt_xdate()
myFmt = mdates.DateFormatter('%H:%M')
plt.gca().xaxis.set_major_formatter(myFmt)

plt.savefig('data/euro.png')

И сам график будет выглядеть вот так.5fb21d1d87c7f062266900.png
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы