在Python中将二维图形转换为圆柱体

在Python中将二维图形转换为圆柱体,python,matplotlib,Python,Matplotlib,现在我有一个像这样的数字 由代码生成: import matplotlib.pyplot as plt import numpy as np data = np.random.rand(20,5) rows,cols = data.shape plt.imshow(data, interpolation='nearest', extent=[0.5, 0.5+cols, 0.5, 0.5+cols], cmap='bwr') plt.show() 然而,我想把它“折叠”成一个3D圆柱

现在我有一个像这样的数字

由代码生成:

import matplotlib.pyplot as plt

import numpy as np

data = np.random.rand(20,5)
rows,cols = data.shape

plt.imshow(data, interpolation='nearest', extent=[0.5, 0.5+cols, 0.5,   0.5+cols], cmap='bwr')
plt.show()
然而,我想把它“折叠”成一个3D圆柱体,连接左右边缘(就像一张纸那样)。换句话说,左边缘和右边缘实际上是相同的边缘,所以我想把它们连接在一起,形成一个圆柱体


我该怎么做呢?

对于
mplot3d
中的任意三维多边形,可以选择
Poly3DCollection
方法

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d.art3d import Poly3DCollection
import numpy as np

fig = plt.figure()
ax = fig.gca(projection='3d')

nphi,nz=12,20
r=1 # radius of cylinder
phi = np.linspace(0,360, nphi)/180.0*np.pi
z= np.linspace(0,1.0,nz)
print z

facecolors=['r','g','b','y']
cols=[]
verts2 = []
for i  in range(len(phi)-1):
    cp0= r*np.cos(phi[i])
    cp1= r*np.cos(phi[i+1])
    sp0= r*np.sin(phi[i])
    sp1= r*np.sin(phi[i+1])

    for j in range(len(z)-1):
        z0=z[j]
        z1=z[j+1]
        verts=[]
        verts.append((cp0, sp0, z0))
        verts.append((cp1, sp1, z0))
        verts.append((cp1, sp1, z1))
        verts.append((cp0, sp0, z1))
        verts2.append(verts)
        value=np.random.rand()
        print value
        col=plt.cm.bwr(value)
        print col
        cols.append(col)

poly3= Poly3DCollection(verts2, facecolor=cols  )  

poly3.set_alpha(0.8)
ax.add_collection3d(poly3)
ax.set_xlabel('X')
ax.set_xlim3d(-1, 1)
ax.set_ylabel('Y')
ax.set_ylim3d(-1, 1)
ax.set_zlabel('Z')
ax.set_zlim3d(0, 1)
plt.show()
您可以使用:

屈服


你想要一个三维图形吗?是的,我想要的是一个三维圆柱体。你有一个可以显示三维图像的系统吗?@IgnacioVazquez Abrams这是什么意思?Matplotlib可以绘制三维图像我想你可以添加一些注释来解释这一点吗?谢谢,这不使用颜色贴图。我添加了颜色贴图。在我的两个for循环中,我为每个矩形手动创建(x、y、z)顶点(其中四个称为
顶点
)。每个矩形都有一个左下
(i,j)
、右下
(i+1,j)
、右上
(i+1,j+1)
和左上`(i,j+1)`顶点。x坐标与角φ的余弦一致,y坐标与相同角度的正弦一致。z坐标在12个步骤中从0变为1(nz=12)
verts2
是一个包含所有矩形顶点的列表。我希望@Ignacio Vazquez Abrams能给我一个向上的投票,这将是我的一天。干得好Roadrunner,这是一个向上的投票。。。不投赞成票,不接受伟大的答案,这是相当“内库图恩”的。
import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d.axes3d as axes3d

np.random.seed(2016)
data = np.random.rand(12, 20)
h, w = data.shape
theta, z = np.linspace(0, 2 * np.pi, w), np.linspace(0, 1, h)
THETA, Z = np.meshgrid(theta, z)    
X = np.cos(THETA)
Y = np.sin(THETA)

fig = plt.figure()
ax = fig.add_subplot(1,1,1, projection='3d')
cmap = plt.get_cmap('bwr')
plot = ax.plot_surface(
    X, Y, Z, rstride=1, cstride=1, facecolors=cmap(data),
    linewidth=0, antialiased=False, alpha=0.75)

plt.show()