Gostaria de gerar um gráfico de superfície com células discretas em forma de arco em um plano cartesiano 2D. Consigo obter resultados decentes plotando um gráfico de superfície 3D (usando plot_surface
) e visualizando-o de cima, mas o matplotlib pode ser um pouco exigente com 3D, então prefiro fazer isso em 2D. Também posso obter resultados semelhantes usando pcolormesh
um gráfico polar, mas, novamente, quero um plano cartesiano 2D. Como posso fazer isso no matplotlib?
ERM:
import numpy as np
import matplotlib.pyplot as plt
r = np.linspace(2, 5, 25)
theta = np.linspace(0, np.pi, 25)
R, Theta = np.meshgrid(r, theta)
X = R*np.cos(Theta)
Y = r*np.sin(Theta)
U = R*np.cos(Theta)*np.exp(R*Theta/500)
fig, ax = plt.subplots(figsize=(8,6), subplot_kw={"projection":"3d"})
surf = ax.plot_surface(X, Y, U, cmap="viridis", rstride=1, cstride=1)
ax.view_init(elev=90, azim=-90)
ax.set_proj_type("ortho")
ax.zaxis.line.set_lw(0.)
ax.set_zticks([])
ax.set_aspect("equalxy")
fig.colorbar(surf, shrink=0.5, aspect=5)
fig.tight_layout()
fig, ax = plt.subplots(figsize=(8,6), subplot_kw={"projection":"polar"})
ax.pcolor(Theta, R, U, shading="nearest")
ax.set_xlim(0, np.pi)
ax.grid(False)
fig.tight_layout()
Versão do gráfico 3D:
Versão do gráfico polar 2D:
Uma solução poderia ser montar o gráfico a partir de pedaços de cunha.