Criando um Gráfico Estereográfico Usando Python e ChatGPT

Hoje, gostaria de compartilhar uma maneira de criar um gráfico estereográfico de um plano 45/45 de forma rápida e consistente e a geração de uma figura para inserção em trabalhos, relatórios e outros. Utilizei: o  ChatGPT, a linguagem de programação Python e a biblioteca mplstereonet.

O ChatGPT, versão 3.5, foi utilizado para me assessorar com a criação de um script em Python do plano mencionado através de comandos sequenciais em seu prompt. A solução obtida pela IA é detalhada ao longo do texto. Na configuração inicial coloquei todas as funções da biblioteca, obtidas na documentação on-line e informei qual era meu objetivo. O ChatGPT procedeu conforme esperado nesta ocasião e gerou uma resposta sem necessidade de mais comandos ou correções.


Passo a Passo


Prompt de entrada:

"Você consegue plotar o plano 45/45 no mplstereonet, fornecendo o código Python?"

Resposta ChatGPT 3.5:

"Claro! Aqui está um código Python que usa o módulo mplstereonet para plotar um plano 45/45:"{codeBox}

"""Created on Thu Nov 23 11:17:35 2023
@author: luiz.fernando with ChatGPT"""

# importando as bibliotecas necessárias
import matplotlib.pyplot as plt
import mplstereonet

# Criando uma instância de um plot estereográfico
fig = plt.figure()
ax = fig.add_subplot(111, projection='stereonet')

# Plotando o plano 45/45
strike = 45  # Azimute de 45 graus
dip = 45  # Inclinação de 45 graus
ax.plane(strike, dip, 'r-', linewidth=2, label='Plano 45/45')

# Configurações adicionais
ax.grid()
ax.legend()

# Mostrando o gráfico
plt.show()


O código veio até mesmo comentado. Inseri este código no Spyder, um IDE (ambiente de desenvolvimento integrado para Python) voltado para cientistas, engenheiros e analistas de dados, do WinPython. Sem surpresas, o resultado foi a figura esperada, veja abaixo:

Explorando mais as possibilidades, em seguida resolvi plotar o polo do plano 45/45 e procedi com a conversa com o ChatGPT para que o código fornecido fosse alterado de acordo com minhas novas instruções, adicionando ao anterior as informações necessárias para modificar a figura desejada.


Prompt de entrada:

"Agora, plote o polo deste plano na mesma figura adaptando o código utilizado."

Resposta ChatGPT 3.5:

"Claro, para plotar o polo do plano na mesma figura, você pode utilizar o método pole() do mplstereonet. Aqui está o código adaptado para plotar o plano 45/45 e seu polo na mesma figura:"


"""Created on Thu Nov 23 11:17:35 2023
@author: luiz.fernando with ChatGPT"""

import matplotlib.pyplot as plt
import mplstereonet

# Criando uma instância de um plot estereográfico
fig = plt.figure()
ax = fig.add_subplot(111, projection='stereonet')

# Plotando o plano 45/45
strike = 45  # Azimute de 45 graus
dip = 45  # Inclinação de 45 graus
ax.plane(strike, dip, 'r-', linewidth=2, label='Plano 45/45')

# Plotando o polo do plano
ax.pole(strike, dip, markersize=10, label='Polo do Plano 45/45', color='blue')

# Configurações adicionais
ax.grid()
ax.legend()

# Mostrando o gráfico
plt.show()

Da mesma forma que a figura anterior, um sucesso no resultado! Veja abaixo:


Figura ilustrando um estereograma produzido em Python com código via ChatGPT

Procedi com a inserção de prompts no ChatGPT 3.5 com intuito de melhorar a figura resultante, alterando posição de legenda e as cores apresentadas. Solicitei também sugestões de alteração no layout da figura para melhorar sua visualização.


Prompt de entrada:

"A legenda está acima do diagrama estereográfico, coloque-a fora. Outra coisa, os valores angulares ao redor do diagrama estão muito distantes, poderia aproximá-las? O polo do plano pode ser da mesma cor de representação do plano, ajuste. Existem outras alterações de ordem visual que são recomendadas para a melhor visualização dos dados no estereograma?"

Resposta ChatGPT:

"Certamente, posso ajudar a fazer esses ajustes no estereograma para melhorar a visualização dos dados. Aqui está o código com as modificações:"


"""Created on Thu Nov 23 11:17:35 2023
@author: luiz.fernando with ChatGPT"""

import matplotlib.pyplot as plt
import mplstereonet

# Criando uma instância de um plot estereográfico
fig = plt.figure(figsize=(8, 8))  # Ajustando o tamanho da figura
ax = fig.add_subplot(111, projection='stereonet')

# Plotando o plano 45/45
strike = 45  # Azimute de 45 graus
dip = 45  # Inclinação de 45 graus
ax.plane(strike, dip, 'r-', linewidth=2, label='Plano 45/45')

# Plotando o polo do plano com a mesma cor do plano
ax.pole(strike, dip, markersize=10, label='Polo do Plano 45/45', color='red')

# Configurando a posição da legenda
ax.legend(loc='lower center', bbox_to_anchor=(0.5, -0.15), shadow=True, ncol=2)

# Configurando a distância entre os valores angulares ao redor do diagrama
ax.set_xticks(range(0, 360, 30))  # Aproximando as marcas para cada 30 graus
ax.set_yticks(range(0, 90, 10))   # Aproximando as marcas para cada 10 graus

# Configurações adicionais
ax.grid()

# Mostrando o gráfico
plt.show()
"Neste código:
  • A legenda foi movida para fora do diagrama estereográfico usando legend(loc='lower center', bbox_to_anchor=(0.5, -0.15), shadow=True, ncol=2).
  • A distância entre os valores angulares ao redor do diagrama foi ajustada para cada 30 graus no azimute e cada 10 graus na inclinação usando set_xticks e set_yticks, respectivamente.
  • O polo do plano foi ajustado para ter a mesma cor vermelha do próprio plano.
Esses ajustes visuais podem melhorar a apresentação e a legibilidade do estereograma. Experimente e adapte conforme necessário para a sua análise!"



Resposta bonita, completa e conforme esperada. Mas... o resultado não foi como o esperado. Oh não! O ChatGPT errou e modificou funções sem necessidade. Veja abaixo a figura como ficou! Ou será que foi o dispositivo localizado entre o teclado e a cadeira que não soube requisitar as alterações de forma correta? Bem, a própria OpenAI deixa este aviso na caixa de diálogo "ChatGPT can make mistakes. Consider checking important information." que em bom Português é "ChatGPT pode cometer erros. Considere verificar informações importantes.". Tirem suas próprias conclusões.



Figura ilustrando um estereograma produzido em Python com código via ChatGPT

Vamos proceder com a correção: o ChatGPT mudou o espaçamento do grid do estereograma e não moveu os labels dos valores angulares para mais perto como requisitei anteriormente. Solicitei então as alterações de forma mais detalhada..


Prompt de entrada:

"A legenda e a cor do polo do plano foram alterados com sucesso! No entanto, em vez de aproximar os labels com valores angulares da borda do estereograma, o espaçamento do grid e suas linhas de representação é que foram alterados. Volte o estereograma e seu grid ao estado anterior, mantendo as alterações de sucesso e as plotagens. Tente novamente configurar a posição dos labels do estereograma para ficaram mais próximos do círculo do estereograma."

Resposta ChatGPT:

"Entendido, peço desculpas pela dificuldade. Parece que a posição exata dos ângulos e da legenda está sendo um desafio. Vou revisar o código para garantir que o grid seja exibido corretamente e os labels estejam próximos ao círculo estereográfico. Tente o seguinte código:"


"""Created on Thu Nov 23 11:17:35 2023
@author: luiz.fernando with ChatGPT"""

import matplotlib.pyplot as plt
import mplstereonet

# Criando uma instância de um plot estereográfico
fig = plt.figure(figsize=(8, 8))  # Ajustando o tamanho da figura
ax = fig.add_subplot(111, projection='stereonet')

# Plotando o plano 45/45
strike = 45  # Azimute de 45 graus
dip = 45  # Inclinação de 45 graus
ax.plane(strike, dip, 'r-', linewidth=2, label='Plano 45/45')

# Plotando o polo do plano com a mesma cor do plano
ax.pole(strike, dip, markersize=10, label='Polo do Plano 45/45', color='red')

# Configurando a posição da legenda
ax.legend(loc='lower center', bbox_to_anchor=(0.5, -0.15), shadow=True, ncol=2)

# Ajustando os valores dos labels dos ângulos
ax.set_azimuth_ticks([0, 30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330])

# Habilitando o grid
ax.grid()

# Mostrando o gráfico
plt.show()

O resultado da nova iteração com o ChatGPT, e posterior inserção do script no Spyder, não apresentou uma boa figura. Os valores angulares ainda estão distantes do círculo do estereograma. O ChatGPT está com dificuldades de contornar o problema! Acontece nas melhores IAs (e esta ainda é a versão 3.5 e não a mais avançada)... Assim, talvez a dificuldade seja compreensível... Alguém aí com a versão plus, ChatGPT 4.0, para reproduzir esta dificuldade?

Não satisfeito, recorri a métodos tradicionais de resolução de problemas do gênero e pesquisei rapidamente no Stack Overflow, conhecida enciclopédia  e fórum dos programadores, encontrando a razão do problema aqui, em uma resposta do usuário FazTas. Coloquei este achado para o ChatGPT que concordou imediatamente com o reportado e fez algumas considerações, veja abaixo a nossa conversa.


Prompt de entrada:

"Encontrei isso no Stack Overflow: I am running python 3.9 and have the same issue with the ticks plotting way too far away from the axis. I found this workaround on the github site for this issue: Add the line "ax._polar.set_position(ax.get_position())" before calling plt.show(). This resolved the issue. Hopefully they fix the code soon in mpl though."

Resposta ChatGPT 3.5:

"Sim, o código ax._polar.set_position(ax.get_position()) pode ser utilizado como um workaround para ajustar a posição dos ticks mais próximos ao círculo do estereograma. Isso pode resolver o problema de espaçamento excessivo dos ticks em algumas situações. Experimente adicionar essa linha antes de chamar plt.show() no código anterior e veja se ajuda a posicionar os ticks mais próximos ao círculo estereográfico. Caso o problema persista, outras abordagens podem ser consideradas para ajustar a posição dos ticks e melhorar a visualização do estereograma.

No entanto, é importante mencionar que a modificação ax._polar.set_position(ax.get_position()) é uma manipulação direta de um atributo interno (_polar) do objeto AxesSubplot no Matplotlib, o que pode não ser recomendado, já que isso acessa uma propriedade interna que não é parte da interface pública do Matplotlib. Tente o código:"


# -*- coding: utf-8 -*-
"""Created on Thu Nov 23 11:17:35 2023
@author: luiz.fernando with ChatGPT"""

import matplotlib.pyplot as plt
import mplstereonet

# Criando uma instância de um plot estereográfico
fig = plt.figure(figsize=(8, 8))  # Ajustando o tamanho da figura
ax = fig.add_subplot(111, projection='stereonet')

# Plotando o plano 45/45
strike = 45  # Azimute de 45 graus
dip = 45  # Inclinação de 45 graus
ax.plane(strike, dip, 'r-', linewidth=2, label='Plano 45/45')

# Plotando o polo do plano com a mesma cor do plano
ax.pole(strike, dip, markersize=10, label='Polo do Plano 45/45', color='red')

# Configurando a posição da legenda
ax.legend(loc='lower center', bbox_to_anchor=(0.5, -0.15), shadow=True, ncol=2)

# Ajustando os valores dos labels dos ângulos
ax.set_azimuth_ticks([0, 30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330])

# Habilitando o grid
ax.grid()

# ajustando a distância dos labels para o círculo
ax._polar.set_position(ax.get_position())

# Mostrando o gráfico
plt.show()

E um salve de palmas para a dupla dinâmica que criou finalmente uma figura que é apresentável e mostra os dados corretamente! Com este código fornecido pelo ChatGPT é possível escalar a apresentação de um grande número de dados estruturais de geologia inseridos em estereogramas e outras formas de representação para figuras.

Conclusões

O ChatGPT se mostrou excelente como uma ferramenta para consultas expeditas e criação de códigos Python de maneira rápida e eficaz. No entanto, ainda está longe de uma primazia e de dominar o planeta e ainda é necessário um humano para conduzir o robô pelas dificuldades encontradas. Foi a primeira abordagem na criação de códigos Python e, possivelmente, o termo humano dessa equação consegue aprimorar os prompts a ponto de reduzir o tempo de resolução dos problemas. Mas, ressaltando que foi a primeira tentativa... Não levei mais do que 30 minutos na produção do código refinado conforme minhas orientações, incluindo aí o tempo da pesquisa da solução no StackOverflow para a apresentação da figura.

Portanto, uma maneira de encarar o ChatGPT é considerá-lo como um colega habilidoso na programação (mas meio sem noção) para bater papo e resolver da melhor forma o desafio proposto. O importante aqui é saber fazer as perguntas para obter as respostas corretas! E ter um pouco de paciência...


Postar um comentário

Postagem Anterior Próxima Postagem