Python?的matplotlib/plotly/bokeh中3轴极坐标投影(配置单元图)

k97glaaz  于 2023-02-16  发布在  Python
关注(0)|答案(2)|浏览(187)

有没有什么调整的极坐标投影,以允许3轴?我猜可能是一个三维散点图倾斜到二维,所以它排队像这样?
我最近发现了Hive Plots,我想尝试编写一个,这样我就可以在美学上有更多的自由范围,使它看起来更像these guys。我开始尝试做一个,但我能想到的唯一方法是这样做的极坐标。
我的问题:* * 是否有办法在matplotlib、plotly或bokeh中获取3轴极坐标?**如果没有,是否有办法将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)

qij5mzcb

qij5mzcb1#

与你的目标美学的链接似乎被破坏了,所以如果这实际上没有帮助的话,我道歉,但是我维护了一个叫做hiveplotlib的包,它允许在kwargs上灵活地绘制Hive图。
high-level API旨在满足大多数需求,另外还有一个针对利基案例的低级API demonstrated on the Zachary's Karate Club dataset
目前,只有对matplotlibbokeh的正式支持,但是有一个JSON导出器允许以任何语言进行下游绘图,包括一个使用plotly的示例,所有这些都在this notebook中演示。

jm2pwxwz

jm2pwxwz2#

也许是一个开始,但我会检查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()

相关问题