DEV Community

Cover image for Como usar Matplotlib com WSL2
Gabriel Lavoura
Gabriel Lavoura

Posted on

Como usar Matplotlib com WSL2

Nos últimos meses tenho migrado meu ambiente de desenvolvimento para WSL2 (Windows Subsystem for Linux 2), sempre fui um usuário assíduo de dual boot, mas tenho trabalhado em diversos projetos em paralelo, sendo necessário mudar de sistema varias vezes ao dia, seja devido ao Home Office ou por reuniões.
Neste caso Windows torna-se um sistema amigável e com "Batteries Included", porém sinto falta da liberdade e agilidade que o pinguim me oferece.
WSL2 veio para suprir essa demanda, atualmente tenho utilizado como sistema principal de desenvolvimento, a experiência tem sido muito positiva, algumas horas para configurar tudo de primeira, mas para a próxima vez que for necessário reinstalar já está tudo automatizado, utilizando shell script para configurar o ambiente.
Hoje precisei rodar um script Python direto pelo WSL2, um plot simples de uma distribuição gaussiana e me deparei com um problema clássico:

    "UserWarning: Matplotlib is currently using agg, which is a non-GUI.
Enter fullscreen mode Exit fullscreen mode

Para resolver é bem simples, bora lá.

Escolha um X-server do seu gosto!

Eu testei com o Xming e o VcXsrv, ambos funcionaram que é uma beleza, vou seguir com o Xming neste post.

Baixe a última versão disponível do Xming para Windows e basta instalar com next, next, next, install. Aconselho liberar a ferramenta no firewall do Windows para não dar dor de cabeça.

Agora deve-se ter um pouco de atenção, segue os passos ilustrados:

  1. Abra o XLauch, escolha Multiple Windows.
    Escolha Multiple Windows

  2. Nesta tela deixe como está.
    Deixe Como está, apenas next.

  3. Marque a caixa chamada "No Access Control".
    Marque a caixa chamada "No Access Control"

  4. Agora é só next, finish e está feito!
    Agora é só next, finish e está feito!

Vamos para o WSL2

Neste caso eu estou utilizando a imagem do Ubuntu 20.04 disponível na Microsoft Store.

  • Instale o python-tk:
$ sudo apt-get install python3-tk
Enter fullscreen mode Exit fullscreen mode
  • Coloque o ip no arquivo resolv.conf, aconselho colocar no seu arquivo .zshrc / .bashrc, para nao precisar inserir novamente, pois o ip do wsl2 não é fixo.
$ export DISPLAY="`grep nameserver /etc/resolv.conf | sed 's/nameserver //'`:0"
Enter fullscreen mode Exit fullscreen mode

E está feito, relativamente simples e eficiente, a seguir uma imagem do resultado final:
Resultado WSL2 com matplotlib

Claro que não podia faltar o código que usei, peguei um dos exemplos do matplotlib para ilustrar este post:

  import matplotlib
  import matplotlib.pyplot as plt
  import numpy as np

  # Data for plotting
  t = np.arange(0.0, 2.0, 0.01)
  s = 1 + np.sin(2 * np.pi * t)

  fig, ax = plt.subplots()
  ax.plot(t, s)

  ax.set(xlabel='time (s)', ylabel='voltage (mV)',
         title='About as simple as it gets, folks')
  ax.grid()

  fig.savefig("test.png")
  plt.show()
Enter fullscreen mode Exit fullscreen mode

Então é isso, espero ter ajudado e poupado um pouco do seu tempo! :)

Top comments (0)