Я пытаюсь построить линии тока на полярной оси в matplotlib 1.4.3. Функция streamplot существует примерно с 1.2.0 и считается документированной функциональной и стабильной. Вот небольшой тестовый скрипт:Matplotlib - Как построить линии тока в полярных координатах?
from matplotlib import pyplot as plt
import numpy as np
# Define polar grid
r = np.arange(0,2001,50)
theta = np.arange(-np.pi, np.pi+np.pi/180, 2*np.pi/180)
r2D, theta2D = np.meshgrid(r, theta)
# Define some data
u = -np.sin(theta2D)
v = np.cos(theta2D)
# Set up axes
fig = plt.figure()
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8], polar=True)
# Plot streamlines
ax.streamplot(r, theta, u, v, color='k', density=1, linewidth=1)
Этот скрипт не со следующей TRACEBACK:
Traceback (most recent call last):
File "streamline_test.py", line 15, in <module>
ax.streamplot(r, theta, u, v, color='k', density=1, linewidth=1)
File "python2.7/site-packages/matplotlib/axes/_axes.py", line 4204, in streamplot
zorder=zorder)
File "python2.7/site-packages/matplotlib/streamplot.py", line 167, in streamplot
axes.add_patch(p)
File "python2.7/site-packages/matplotlib/axes/_base.py", line 1568, in add_patch
self._update_patch_limits(p)
File "python2.7/site-packages/matplotlib/axes/_base.py", line 1586, in _update_patch_limits
vertices = patch.get_path().vertices
File "python2.7/site-packages/matplotlib/patches.py", line 4033, in get_path
_path, fillable = self.get_path_in_displaycoord()
File "python2.7/site-packages/matplotlib/patches.py", line 4054, in get_path_in_displaycoord
shrinkB=self.shrinkB * dpi_cor
File "python2.7/site-packages/matplotlib/patches.py", line 2613, in __call__
shrinked_path = self._shrink(clipped_path, shrinkA, shrinkB)
File "python2.7/site-packages/matplotlib/patches.py", line 2586, in _shrink
left, right = split_path_inout(path, insideA)
File "python2.7/site-packages/matplotlib/bezier.py", line 246, in split_path_inout
ctl_points, command = next(path_iter)
StopIteration
Видимо streamplot итерация навсегда и должен остановиться на какой-то момент. Я также попробовал набор регулярно разнесенных декартовых точек, применяемых к полярной оси, но это не так. Создание полярного графика с использованием декартовых осей не является вариантом, так как мне нужна полярная сетка, но такая сетка не имеет регулярных интервалов в декартовых координатах, а для потока требуется регулярные интервалы.
Кто-нибудь знает, как получить matplotlib для построения линий тока в полярных координатах?