Колчан 2D цветовая карта - PullRequest
0 голосов
/ 23 ноября 2018

Я строю дипольное поле, которое имеет особенность в начале координат.Поэтому я хочу раскрасить стрелки, чтобы обозначить силу поля.

Сейчас мне удается создать нужные стрелки, но цвет идет вдоль тета-оси, а не вдоль оси r:

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
import matplotlib.cm as cm
from matplotlib.colors import Normalize

fig = plt.figure(figsize=(15,10))
ax = fig.gca(projection='polar')

n=30
m=8

thetas = np.linspace(0, 2*np.pi, n)
radii = np.linspace(0.15, 1, m)
theta, r = np.meshgrid(thetas, radii)
p = .3
Er = p*2*np.cos(theta)#/r**3
Et = p*np.sin(theta)#/r**3

m = np.meshgrid(thetas,radii)
#This is where one should define m such that it results in the color coding I want. Unfortunately, I am not completely sure how the color is decoded in the quiver function.

ax.set_title("Dipole field", va='bottom')
ax.quiver(theta, r, Er * np.cos(theta) - Et * np.sin (theta), Er * np.sin(theta) + Et * np.cos(theta), m, pivot='mid')
plt.show()

enter image description here

Хотелось бы, чтобы стрелки были темнее рядом с началом координат и ярче с расстоянием r = sqrt (x ^ 2 + y ^ 2) от происхождения растет.

1 Ответ

0 голосов
/ 23 ноября 2018

Хорошо, благодаря комментариям @ImportanceOfBeingEarnest я могу ответить на вопрос следующим образом: C-аргумент в функции колчана может просто принимать функцию координат построения.Следовательно, достаточно добавить «r» в функцию колчана следующим образом:

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

fig = plt.figure(figsize=(15,10))
ax = fig.gca(projection='polar')

n=30
m=8

thetas = np.linspace(0, 2*np.pi, n)
radii = np.linspace(0.15, 1, m)
theta, r = np.meshgrid(thetas, radii)
p = .3
Er = p*2*np.cos(theta)#/r**3
Et = p*np.sin(theta)#/r**3
#we leave out the 1/r**3 part because it would make our arrows infinitely long near the origin.
#Instead we use a colormap to indicate the strength of the field as follows

ax.set_title("Dipole field", va='bottom')
ax.quiver(theta, r, Er * np.cos(theta) - Et * np.sin (theta), Er * np.sin(theta) + Et * np.cos(theta), r, pivot='mid', cmap='YlGnBu_r')
plt.show()

Результат выглядит следующим образом: enter image description here

Команда cmap делаетцветовая кодировка отображается в соответствии с картой YlGnBu_r.

Более карты цветовой кодировки приведены здесь: http://matplotlib.org/examples/color/colormaps_reference.html и здесь http://matplotlib.org/users/colormaps.html.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...