Создайте стек полярных графиков, используя Matplotlib / Python - PullRequest
3 голосов
/ 09 февраля 2012

Мне нужно сгенерировать стопку двумерных полярных графиков (трехмерный цилиндрический график), чтобы я мог видеть искаженный цилиндр.Я хочу использовать matplotlib, так как он уже установлен, и хочу распространять свой код среди тех, у кого есть только matplotlib.Например, скажем, у меня есть набор двухмерных массивов.Есть ли способ сделать это без загрузки внешнего пакета?Вот мой код.

#!usr/bin/env python
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(-180.0,190.0,10)
theta = (np.pi/180.0 )*x    # in radians

A0 = 55.0
offset = 60.0

R = [116.225,115.105,114.697,115.008,115.908,117.184,118.61,119.998,121.224,122.216,\
122.93,123.323,123.343,122.948,122.134,120.963,119.575,118.165,116.941,116.074,115.66\
,115.706,116.154,116.913,117.894,119.029,120.261,121.518,122.684,123.594,124.059,\
123.917,123.096,121.661,119.821,117.894,116.225]

fig = plt.figure()
ax = fig.add_axes([0.1,0.1,0.8,0.8],polar=True)     # Polar plot
ax.plot(theta,R,lw=2.5)
ax.set_rmax(1.5*(A0)+offset)
plt.show()

У меня есть еще 10 похожих 2D полярных графиков, и я хочу аккуратно их сложить.Если есть какой-то лучший способ визуализировать искаженный цилиндр в 3D, я полностью открыт для предложений.Любая помощь будет оценена.Спасибо!

1 Ответ

5 голосов
/ 09 февраля 2012

Если вы хотите составлять полярные диаграммы с помощью matplotlib, один из подходов заключается в использовании модуля Axes3D.Вы заметите, что я сначала использовал полярные координаты, а затем преобразовал их обратно в декартову, когда я был готов построить их.ax.plot, он контролирует высоту каждого среза.Например, если вы хотите спроецировать все ваши данные на одну ось, вы должны использовать ax.plot(X, Y, 0).Для более экзотического примера вы можете отобразить высоту данных на функцию, скажем, на седло ax.plot(X, Y, -X**2+Y**2 ).Играя с цветами, вы теоретически можете представлять несколько четырехмерных наборов данных (хотя я не уверен, насколько это ясно).Примеры ниже:

enter image description here

...