2017-02-01 2 views
2

Есть ли какая-нибудь настройка полярной проекции, которая позволяет использовать 3 оси? Наверное, возможно, 3D-диаграмма рассеяния наклонена на 2D, поэтому она выстраивается так:Полярная проекция с 3-мя осями в matplotlib/plotly/bokeh для Python? (Графы улья)

Недавно я узнал о Hive Plots, и мне захотелось запрограммировать его так, чтобы у меня было больше свободного пространства на атестике, чтобы он выглядел больше как these guys. Я начал пытаться сделать один, но единственный способ, которым я мог думать, это было с полярными координатами, подобными этому.

Мой вопрос: Есть ли способ получить 3-осевые полярные координаты в matplotlib, plotly или bokeh? или если нет Есть ли способ исправить 3D-график, чтобы иметь такой тип структуры?

fig = plt.figure(figsize=(10,10)) 
ax = plt.subplot(111, polar=True) 
ax.plot(2*[np.pi/2], [0,1], color="black", linewidth=3) 
ax.plot(2*[5*np.pi/4], [0,1], color="black", linewidth=3) 
ax.plot(2*[7*np.pi/4], [0,1], color="black", linewidth=3) 

enter image description here

ответ

0

может быть начало, но я хотел бы проверить Matplotlib 2.0, чтобы увидеть, если 3D является лучше

import numpy as np 

from mpl_toolkits.mplot3d import Axes3D 
import matplotlib.pyplot as plt 

def Lin3dSeg(a,b): 
    ''' 
    if a, b are spherical coordinate vector tuples, then it 
    returns list of spherical coordinate points of a linear in r, theta, phi 
    3D spiral segment connecting them 
    ''' 
    return [np.linspace(start, stop) for start, stop in zip(a,b)] 

def Sphere2Cart(sphere_pt): # no particular convention, just thrown together 
    x = sphere_pt[0] * np.sin(sphere_pt[1]) 
    y = sphere_pt[0] * np.cos(sphere_pt[1]) 
    z = sphere_pt[0] * np.cos(sphere_pt[2]) 
    return (x, y, z) 

def SphereSegCarts(seg): 
    return [Sphere2Cart(pt) for pt in zip(*Lin3dSeg(*seg))] 

seg_a =((10, 0, 0),(5, np.pi/2, 0)) 
seg_b =((10, np.pi/2, 0),(1, 0, np.pi/2)) 
seg_c =((3, 0, np.pi/2),(10, np.pi/2, np.pi/2)) 


fig = plt.figure() 
ax = fig.add_subplot(111, projection='3d') 
ax.view_init(elev=45, azim=45) 

ax.plot(*zip(*SphereSegCarts(seg_a)), c='r') 
ax.plot(*zip(*SphereSegCarts(seg_b)), c='g') 
ax.plot(*zip(*SphereSegCarts(seg_c)), c='b') 

plt.show() 

enter image description here

Смежные вопросы