2017-02-01 8 views
2

Gibt es irgendwelche Optimierungen an der polaren Projektion, die 3 Achsen erlauben? Ich vermute, möglicherweise ein 3D-Streudiagramm auf 2D gekippt, so dass es so ausgerichtet ist?Polar Projektion mit 3 Achsen in Matplotlib/Plotly/Bokeh für Python? (Hive Plots)

Ich habe vor kurzem über Hive Plots herausgefunden, und ich wollte versuchen, eins zu kodieren, damit ich mehr Freiraum auf der Ästhetik haben könnte, um es eher wie these guys aussehen zu lassen. Ich fing an zu versuchen, einen zu machen, aber die einzige Art, wie ich daran denken konnte, war mit Polarkoordinaten wie dieser.

Meine Frage: Gibt es eine Möglichkeit, 3-Achsen-Polarkoordinaten in Matplotlib, Plotly oder Bokeh zu bekommen? oder wenn nicht Gibt es eine Möglichkeit, ein 3D-Diagramm zu reparieren, um diese Art von Struktur zu haben?

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

Antwort

0

vielleicht ein Anfang, aber ich würde matplotlib 2.0 überprüfen, um zu sehen, ob 3D jetzt besser

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

ist
Verwandte Themen