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()
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:
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()
- 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.
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.
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()
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...