У меня есть 2D матрица, которая содержит амплитуды функции. Вместо обычной декартовой геометрии эта матрица содержит эти амплитуды в полярных точках. Например, первая строка содержит амплитуды с фиксированным радиусом, но с возрастающим углом. Столбцы имеют радиальные значения под фиксированным углом.
Я использую следующий код Python для построения трехмерного графика.
import numpy as np
import matplotlib.pyplot as plt
from os.path import exists
from os import sys
import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D
N=int(sys.argv[1]);
filling=int(sys.argv[2]);
trial=int(sys.argv[3]);
filename = 'density_N%d_filling%d_trial%d' % (N,filling,trial);
filename2 = 'init_%d_%d_%d' % (N,filling,trial);
if exists(filename2):
a=np.loadtxt(filename2)
NUMBINS=int(np.round(a[0]));
dR2=a[1]
dtheta=a[2]
rmax = a[3];
def read_file(filename):
with open(filename,'r') as data:
x = []
y = []
for line in data:
p = line.split()
for i in range(NUMBINS):
x.append(float(p[i]))
y.append(np.array(x))
x=[]
return y
density = np.array(read_file(filename))
density = density*NUMBINS/(np.pi*dR2)
localfillingfraction=2*np.pi*density;
r = np.sqrt(np.arange(0,rmax*rmax,dR2) )[:NUMBINS]
theta = np.array([dtheta for point in r])
mpl.rcParams['legend.fontsize'] = 10
sdensity = np.transpose(localfillingfraction)
fig = plt.figure()
ax = fig.gca(projection='3d')
for n, armonic in enumerate(sdensity):
ax.plot(r,theta*n,armonic)
plt.savefig("N%d_FILLING%d_trial%d.pdf" % (N,filling,trial));
plt.title('filling fraction, v = 1/' + str(filling))
plt.xlabel('Radius (units of lB)')
plt.ylabel('angle(Rad)')
plt.show()
Итак, filename2 содержит четыре параметра, которые мне нужны для расчета. имя файла - это двумерная матрица с полярными данными. read_file () - это функция, которую я сделал, чтобы прочитать эту 2D матрицу в список. Хотя матрица содержит радиальные данные в виде столбцов, код отображал их в обратном порядке. Вот почему я должен был транспонировать матрицу. В конце я получаю следующий график: Заполняющая фракция как функция R, тета
Несмотря на то, что этот график работает, но радиус и угол по-прежнему отображаются в виде декартовых координат. Можно ли заставить его выглядеть полярным?