1
resposta

[Dúvida] Dúvida sobre código

Olá,

Estou enfrentando problema com o meu script, anterior ao comando de atualizar no BI fica dessa forma: Insira aqui a descrição dessa imagem para ajudar na acessibilidadeApós dar o comando ele dá erro na visualização do gráfico

Insira aqui a descrição dessa imagem para ajudar na acessibilidade segue o código:

# Importando as bibliotecas
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import matplotlib.ticker as mticker

# Configurações das fontes
plt.rcParams['font.family'] = 'sans-serif'
plt.rcParams["font.sans-serif"] = 'Verdana'

def candlestick(date, open, high, low, close):
    fig, ax = plt.subplots(figsize=(30, 12), dpi=100, facecolor='#edf3ee')
    ax.set_facecolor("#edf3ee")

    # Definindo as cores de cada candle
    cores = ["green" if c > o else "red" for c, o in zip(close, open)]

    # Desenhando o corpo dos candles
    for i in range(len(date)):
        # Pavio
        ax.plot([date[i], date[i]], [low[i], high[i]], color=cores[i], alpha=0.7)

        # Corpo do candle
        ax.bar(date[i], close[i] - open[i], bottom=open[i], color=cores[i], width=0.8, alpha=0.7)

    # Cálculo das médias móveis
    mav_7 = close.rolling(7).mean().fillna(method='ffill')
    mav_30 = close.rolling(30).mean().fillna(method='ffill')

    # Plotando as médias móveis
    ax.plot(date, mav_7, label="MAV 7", color="#E76F51", linewidth=2)
    ax.plot(date, mav_30, label="MAV 30", color="#023E8A", linewidth=2)

    # Identificando cruzamentos
    #cruzamentos = np.where(np.diff(np.sign(mav_7 - mav_30)))[0]  # Identificando cruzamentos
    #for cruzamento in cruzamentos:
    #   ax.scatter(date[cruzamento + 1], mav_7[cruzamento + 1], color='black', s=100, zorder=5)

    # Marcando os pontos máximos e mínimos
    for i in range(len(date)):
        if low[i] == np.min(low):
            ax.annotate('Mínimo', xy=(date[i], low[i]), xytext=(15, -15), fontsize=26,
                        textcoords='offset points', arrowprops=dict(arrowstyle='-|>'))
        if high[i] == np.max(high):
            ax.annotate('Máximo', xy=(date[i], high[i]), xytext=(15, 15), fontsize=26,
                        textcoords='offset points', arrowprops=dict(arrowstyle='-|>'))

    # Valor Atual
    ax.axhline(y=close[len(close)-1], color="grey", linestyle='--')

    # Melhorando a formatação do gráfico
    ax.xaxis.set_major_locator(mdates.DayLocator(interval=7))  # Definir o intervalo dos labels do eixo x para 7 dias
    ax.xaxis.set_major_formatter(mdates.DateFormatter('%d/%m'))  # Formatar os labels do eixo x como data dd/mm
    ax.tick_params(axis='x', rotation=45)  # Rotacionar os labels do eixo x para evitar sobreposição

    # Ajustar labels do eixo y para serem sempre visíveis e formatados em reais
    ax.yaxis.set_major_formatter(mticker.FuncFormatter(lambda y, _: f'R${y:,.2f}'))

    ax.set_xlabel("Date")
    ax.set_ylabel("Price")
    ax.legend()  # Adicionando a legenda para as médias móveis

# Formatação do dataset
dataset["Date"] = pd.to_datetime(dataset["Date"], format="%Y-%m-%dT%H:%M:%S")

# Chamando a função candlestick
candlestick(dataset["Date"], dataset["Open"], dataset["High"], dataset["Low"], dataset["Close"])

plt.subplots_adjust(left=0.07, bottom=0.15, right=0.95, top=0.95)
plt.show()
1 resposta

Sugestões: Blocos try-except: Esses blocos permitem capturar exceções (erros) que podem ocorrer durante a execução do código. Você pode especificar diferentes tipos de exceções e o que fazer em cada caso.

Tratamento de erros de tipo: Verifique se as variáveis estão no formato correto (data, número, etc.) antes de usá-las. Isso evita erros inesperados.

Mensagens de erro personalizadas: Crie mensagens claras e informativas para quando um erro acontecer. Isso ajuda o usuário a entender o que deu errado e como corrigir.

Validação de dados: Antes de usar os dados para gerar o gráfico, valide-os. Por exemplo, verifique se não há valores ausentes ou inválidos.