Preencher entre duas linhas verticais em matplotlib

95

Analisei os exemplos na matplotlibdocumentação, mas não estava claro para mim como posso fazer um gráfico que preencha a área entre duas linhas verticais específicas.

Por exemplo, digamos que eu queira criar um gráfico entre x=0.2e x=4(para toda a yextensão do gráfico). Devo usar fill_between, fillou fill_betweenx?

Posso usar a wherecondição para isso?

Amelio Vazquez-Reina
fonte

Respostas:

191

Parece que você deseja axvspan, em vez de preencher as funções. A diferença é que axvspan(e axhspan) preencherá toda a extensão y (ou x) do gráfico, independentemente de como você amplia.

Por exemplo, vamos usar axvspanpara destacar a região x entre 8 e 14:

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot(range(20))
ax.axvspan(8, 14, alpha=0.5, color='red')

plt.show()

insira a descrição da imagem aqui

Você poderia usar fill_betweenxpara fazer isso, mas as extensões (xey) do retângulo estariam em coordenadas de dados . Com axvspan, as extensões y do retângulo são padronizadas em 0 e 1 e estão nas coordenadas dos eixos (em outras palavras, porcentagens da altura do gráfico).

Para ilustrar isso, vamos fazer o retângulo se estender de 10% a 90% da altura (em vez de ocupar toda a extensão). Tente aplicar zoom ou panorâmica e observe que as extensões y dizem que são fixas no espaço de exibição, enquanto as extensões x se movem com o zoom / panorâmica:

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot(range(20))
ax.axvspan(8, 14, ymin=0.1, ymax=0.9, alpha=0.5, color='red')

plt.show()

insira a descrição da imagem aqui

Joe Kington
fonte
3
pessoas que estão interessadas em uma solução para usar fill_betweenpara linhas verticais mais "onduladas", dê uma olhada no transformparâmetro (e esta resposta )
Sr. Tsjolder