Стрелки на полярном графике Matplotlib

Я пытаюсь построить векторы напряжения на резисторе, конденсаторе и катушке индуктивности в последовательной цепи RLC. Я сделал все расчеты и могу получить приличный график только с обычным ax.plot(theta,r,....).

Я хотел бы, чтобы векторные векторы выглядели как стрелки. Я пытался использовать ax.arrow(0,0,theta,magnitude), но он все еще выглядит как линия. Суть кода, который я написал, находится здесь: GIST

Мое изображение, которое я создаю, это

Я попытался следовать примеру, который нашел на этот список, поскольку он очень похож на то, что я хочу сделать, он создает следующее изображение:

Когда я запускаю их код на своем компьютере, я получаю

Я использую Xubuntu 14.04 и использую matplotlib 1.3.1. Я вижу, что пример, который я использую, использовал matplotlib 0.99 в 2009 году.

Любая помощь приветствуется.


person Jesse    schedule 01.06.2014    source источник


Ответы (1)


Размеры стрел были слишком большими, это:

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

print "matplotlib.__version__   = ", matplotlib.__version__
print "matplotlib.get_backend() = ", matplotlib.get_backend()


# radar green, solid grid lines
plt.rc('grid', color='#316931', linewidth=1, linestyle='-')
plt.rc('xtick', labelsize=15)
plt.rc('ytick', labelsize=15)

# force square figure and square axes looks better for polar, IMO
width, height = matplotlib.rcParams['figure.figsize']
size = min(width, height)
# make a square figure
fig = plt.figure(figsize=(size, size))
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8], polar=True, axisbg='#d5de9c')

r = np.arange(0, 3.0, 0.01)
theta = 2*np.pi*r
ax.plot(theta, r, color='#ee8d18', lw=3)
ax.set_rmax(2.0)
plt.grid(True)

ax.set_title("And there was much rejoicing!", fontsize=20)
#This is the line I added:
arr1 = plt.arrow(0, 0.5, 0, 1, alpha = 0.5, width = 0.015,
                 edgecolor = 'black', facecolor = 'green', lw = 2, zorder = 5)

# arrow at 45 degree
arr2 = plt.arrow(45/180.*np.pi, 0.5, 0, 1, alpha = 0.5, width = 0.015,
                 edgecolor = 'black', facecolor = 'green', lw = 2, zorder = 5)

plt.show()

Производит:

введите здесь описание изображения

Лучше? :)

person Dair    schedule 01.06.2014
comment
Спасибо за ваш ответ, я вижу, что теперь это работает для ширины, и это сработало для меня, но теперь я хотел бы применить это к моей векторной диаграмме. У меня есть это для вектора фазора: ax.arrow(LV.theta[1],0,0,LV.mag[1], width=0.005,length_includes_head=True,edgecolor = 'black', facecolor = 'green', lw = 2, zorder = 5) Теперь диаграмма выглядит так:Диаграмма - person Jesse; 02.06.2014
comment
Теперь я понял, что это был атрибут head_length, который я не устанавливал должным образом. - person Jesse; 02.06.2014