Python:如何以堆叠/分层的方式绘制一系列区域?

Python:如何以堆叠/分层的方式绘制一系列区域?,python,matplotlib,data-visualization,Python,Matplotlib,Data Visualization,我有几个不同的区域来测量给定条件下的二维空间事件。使用区域的颜色对条件进行编码。这些区域通常是多边形(尽管我已经绘制了圆),并且可以有洞,如: 为了增加可视化的清晰度,我被要求将其转换为所谓的“婚礼蛋糕图”,其中每个区域都有一个彼此垂直的偏移,每个区域周围都有垂直的边。类似于以下绘制图像: 如何使用Matplotlib或其他Python绘图软件包执行此操作?您可以使用plot\u surface执行以下操作: # sample data data = np.zeros((20,24)) da

我有几个不同的区域来测量给定条件下的二维空间事件。使用区域的颜色对条件进行编码。这些区域通常是多边形(尽管我已经绘制了圆),并且可以有洞,如:

为了增加可视化的清晰度,我被要求将其转换为所谓的“婚礼蛋糕图”,其中每个区域都有一个彼此垂直的偏移,每个区域周围都有垂直的边。类似于以下绘制图像:


如何使用Matplotlib或其他Python绘图软件包执行此操作?

您可以使用
plot\u surface
执行以下操作:

# sample data
data = np.zeros((20,24))
data[2:18, 2:18] = 1
data[4:16, 4:16] = 2
data[6:14,6:14] = 3
data[8:12,8:12] = 2

# 2D view
plt.imshow(data, cmap='Reds')

# mesh
X,Y=np.mgrid[0:data.shape[0], 0:data.shape[1]]


# plot
fig, ax = plt.subplots(subplot_kw={"projection": "3d"})

surf = ax.plot_surface(X, Y, data, cmap='hot',
                       linewidth=0, antialiased=False)
输出:


注意您需要正确地分层标记数据。

plotly库具有绘制漏斗的功能,因此您可以使用该功能。以下是来自的图表,经过一些修改,使其看起来符合您的需要

from plotly import graph_objects as go

x_sorted = sorted([39, 27.4, 20.6, 11, 2])
y_sorted = ["Website visit", "Downloads", "Potential customers", "Requested price", "invoice sent"]
fig = go.Figure(go.Funnel(
    y = y_sorted[::-1],
    x = x_sorted,
    marker={'color':['black','yellow','green','blue','red']})
               )
fig.show()

我需要一些3D的东西,更像@quanghong的答案。对不起,如果没有说清楚的话。我不明白3D是必须的。我不确定你想用可视化来表达什么。这不是我想要的(虽然很接近!),但它帮助我走上了正确的道路。现在我使用matplotlib.PolyCollection()和axes.add_collection3d来获取多边形。我还没能得到多边形的任何厚度。我的数据不是网格格式,这就是为什么我不能直接使用你的方法。