Jump to content

adelcio

Membros
  • Contagem de Conteúdo

    1
  • Ingressou

  • Última visita

Clientes & Parceiros

  • Você é um cliente TecnoSpeed?
    Não
  • Você é um parceiro da Casa do Desenvolvedor?
    Não

Conquistas de adelcio

0

Reputação na Comunidade

  1. Boa tarde, é uma honra, estar aqui. Sou novo em PY, e no meu primeiro projeto estou esbarrando em uma questão que não consigo resolver. Em um dos módulos do programa é criado um gráfico, que obtém sempre apenas 1 informação , numeros com "," exemplo 10,2345. Essa lista de numeros vem de um arquivo TXT. O grafico é 2d e usa esses valores para os pontos Y. Os pontos X são atribuídos sequencialmente conforme é feito a leitura, ou seja Linha 1 , X1, Linha 2, X2. Até ai tudo certo, é plotado o gráfico e tudo mais. A ideia é quando o mouse selecionar um determinado ponto desse gráfico, pois é informado em um text_box, pressiona o botão esquerdo e arrasta para cima ou para baixo, alterando esse valor Y. Porem fiz varias tentativas e ele não assume o novo valor. Pois após soltar o botão ele deveria atualizar o gráfico com aquele novo valor de Y. Então X inicial nunca muda pois ele é o ID dos dados, mais o Y eu posso alterar. Alguém pode me ajudar. segue o código desse modulo. Segue o arquivo txt em anexo. Agradeço e peço desculpas por algo. --------------------------------------- import matplotlib.pyplot as plt from matplotlib.lines import Line2D import mplcursors # Leitura dos dados do arquivo try: with open('velocidade.txt', 'r') as file: velocidades = [float(line.strip().replace(',', '.')) for line in file] except IOError: print("Erro ao ler o arquivo.") # Configuração do gráfico fig, ax = plt.subplots(figsize=(10, 6)) plt.subplots_adjust(bottom=0.2) # Variáveis globais para armazenar o estado do ponto arrastado dragging = False drag_start_y = None drag_index = None # Função para atualizar o valor da velocidade def update_speed(y): text_box.set_text(f'Velocidade: {y:.2f}') velocidades[drag_index] = y line_blue.set_ydata(velocidades) fig.canvas.draw_idle() # Função chamada quando o mouse é pressionado def on_press(event): nonlocal dragging, drag_start_y, drag_index if event.inaxes != ax: return contains, attrd = line_blue.contains(event) if not contains: return dragging = True drag_start_y = event.ydata drag_index = int(round(event.xdata)) - 1 cursor.enabled = False # Desativa mplcursors durante o arrasto # Função chamada quando o mouse é solto def on_release(event): nonlocal dragging if dragging: dragging = False drag_start_y = None drag_index = None cursor.enabled = True # Reativa mplcursors após o soltar do mouse # Função chamada quando o mouse é movido def on_motion(event): nonlocal dragging if not dragging: return if event.inaxes != ax: return y = event.ydata update_speed(y) # Configuração da caixa de texto text_box = ax.text(0.05, 0.95, '', transform=ax.transAxes, va='top') # Plot inicial do gráfico x = range(1, len(velocidades) + 1) line_blue, = ax.plot(x, velocidades, 'b-', lw=2) line_red = Line2D([x[0], x[-1]], [0, 0], color='red', lw=2) ax.add_line(line_red) # Configuração dos limites dos eixos ax.set_xlim(1, len(velocidades)) ax.set_ylim(min(velocidades), max(velocidades)) # Conecta os eventos de mouse fig.canvas.mpl_connect('motion_notify_event', on_motion) fig.canvas.mpl_connect('button_press_event', on_press) fig.canvas.mpl_connect('button_release_event', on_release) # Configura mplcursors para exibir informações sobre o ponto cursor = mplcursors.cursor(line_blue, hover=True) cursor.connect('add', lambda sel: sel.annotation.set_text(f'x: {sel.target[0]:.0f}\ny: {sel.target[1]:.2f}')) # Exibe o gráfico plt.show() velocidade.txt
×
×
  • Create New...