Como usar Matplotlib com WSL2
Tags: wsl2, pyplot, python, matplotlib
Published: 2021-01-31 04:59:11

---
title: Como usar Matplotlib com WSL2
published: true
description: Tutorial rápido de como utilizar aplicações, ferramentas ou bibliotecas que necessitem de interface gráfica, como por exemplo matplotlib.
tags: WSL2, pyPlot, Python, matplotlib
cover_image: https://dev-to-uploads.s3.amazonaws.com/i/qq4rvp4h1v0agjvsewlz.png
---
Nos últimos meses tenho migrado meu ambiente de desenvolvimento para [WSL2](https://docs.microsoft.com/pt-br/windows/wsl/install-win10) (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:

```err
    "UserWarning: Matplotlib is currently using agg, which is a non-GUI.
```

Para resolver é bem simples, bora lá.

## Escolha um X-server do seu gosto!

Eu testei com o Xming e o [VcXsrv](https://sourceforge.net/projects/vcxsrv/), ambos funcionaram que é uma beleza, vou seguir com o Xming neste post.

Baixe a última versão disponível do [Xming](https://sourceforge.net/projects/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](https://dev-to-uploads.s3.amazonaws.com/i/0lxt3uxud96b1p5q1mlc.png)

  2. Nesta tela deixe como está.
![Deixe Como está, apenas next.](https://dev-to-uploads.s3.amazonaws.com/i/t1p3gm0qmnyxtt82xyei.png)

  3. Marque a caixa chamada "No Access Control".
![Marque a caixa chamada "No Access Control"](https://dev-to-uploads.s3.amazonaws.com/i/9hhmcai2e90kyx7ss2xy.png)

  4. Agora é só next, finish e está feito!
![Agora é só next, finish e está feito!](https://dev-to-uploads.s3.amazonaws.com/i/2tgc9ip8q89p061nhwsh.png)


## Vamos para o WSL2

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

- Instale o python-tk:

```zsh
$ sudo apt-get install python3-tk
```
- 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.

```zsh
$ export DISPLAY="`grep nameserver /etc/resolv.conf | sed 's/nameserver //'`:0"
```

E está feito, relativamente simples e eficiente, a seguir uma imagem do resultado final:
![Resultado WSL2 com matplotlib](https://dev-to-uploads.s3.amazonaws.com/i/qq4rvp4h1v0agjvsewlz.png)


Claro que não podia faltar o código que usei, peguei um dos exemplos do [matplotlib](https://matplotlib.org/3.2.1/tutorials/introductory/sample_plots.html) para ilustrar este post:

```python
  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()
```

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