ValueError: год вне диапазона с использованием matplotlib.pyplot - PullRequest
0 голосов
/ 10 июня 2019

После того, как я вызвал Candlestick_ohlc, я не могу преобразовать даты оси X во что-то, что может понять matplotlib.

Я нубский программист Python.Я пытался превратить информационный фрейм в список, я пытался передать даты в Candstick_ohlc, кажется, ничто не работает, кроме изменения

 df['time'] = (df['time'].astype('float')) 

в

df['time'] = (df['time'].astype('float')\1000) 

Хотя это отрисовываетнеправильная дата / время.

import requests
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdate
import matplotlib.style as style
import matplotlib.ticker as mticker
from matplotlib.dates import date2num
from mpl_finance import candlestick_ohlc
import datetime as dt
import numpy as np
import matplotlib.ticker as mticker


def get_data(date):
    """ Query the API for 2000 days historical price data starting from "date". """
    url = "https://min-api.cryptocompare.com/data/histoday?fsym=BTC&tsym=USD&limit=2000&toTs={}".format(date)
    r = requests.get(url)
    ipdata = r.json()
    return ipdata

def get_df(from_date, to_date):
    """ Get historical price data between two dates. """
    date = to_date
    holder = []
    # While the earliest date returned is later than the earliest date requested, keep on querying the API
    # and adding the results to a list. 
    while date > from_date:
        data = get_data(date)
        holder.append(pd.DataFrame(data['Data']))
        date = data['TimeFrom']
    # Join together all of the API queries in the list.    
    df = pd.concat(holder, axis = 0)                    
    # Remove data points from before from_date
    df = df[df['time']>from_date]                       
    # Convert to timestamp to readable date format
    # df['time'] = pd.to_datetime(df['time'], unit='s')   
    # Make the DataFrame index the time
    df.set_index('time', inplace=True)                  
    # And sort it so its in time order 
    df.sort_index(ascending=False, inplace=True)        
    return df

df = get_df(1528502400, 1560112385)

style.use('dark_background')    
fig = plt.figure()
ax1 = plt.subplot2grid((1,1), (0,0))
df = df.reset_index()

cols = ['time', 'open', 'high', 'low', 'close', 'volumefrom', 'volumeto']
df = df[cols]

#IF YOU /1000 AFER ('float') IT WILL RUN BUT NOT CORRECT DATE
df['time'] = (df['time'].astype('float'))

print(df.dtypes)
ohlc = df.values.tolist()
candlestick_ohlc(ax1, ohlc, width=.4, colorup='g', colordown='r')

# IF YOU COMMENT NEXT 4 LINES IT WILL RUN, but NO DATES for XAXIS
date_fmt = "%d-%m-%Y"
date_formatter = mdate.DateFormatter(date_fmt)
ax1.xaxis.set_major_formatter(date_formatter)
fig.autofmt_xdate()

ax1.set_ylabel('BTC Price (USD)')
ax1.set_xlabel('Date')
plt.show()

Ожидаемым результатом будут метки даты, нанесенные на график как dmy.:)

Хотелось бы, чтобы с 1970-х годов здесь были даты для ярлыков xaxis, а не секунд

Я хочу, чтобы это выглядело, но с точными датами

1 Ответ

0 голосов
/ 11 июня 2019

Вот как исправить код:

df ['time'] = df ['time']. Apply (mdates.epoch2num)

Это была определенно одна из тех строк кода, на которые вы тратите часы ... теперь я знаю.

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