我正在使用matplotlib绘制3D'直方图',其中包含角度辐射的正弦和余弦值线框。该图形应该形成一个圆圈:
现在我试图让圆圈和它的山丘绘制,但不是圆圈和周围的值。 我试过用
解雇每个零值hist[hist==0] = np.nan
然后我的情节看起来像这样,圆圈中的一些值也是零,因此线框图不再“触地”。
那么有没有办法解除圆圈及其周围的值,但是情节仍然一直下降到零?
这是我的代码:
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
cos, sin = np.genfromtxt('out_dhdrls_test0123.csv', delimiter=' ').transpose()
hist, xedges, yedges = np.histogram2d(cos, sin, bins=50, range=[[-1, 1], [-1, 1]])
hist[hist==0] = np.nan
xpos, ypos = np.meshgrid(xedges[:-1], yedges[:-1])
zpos = np.zeros_like(xpos)
ax.set_xlabel('xlabel')
ax.set_ylabel('ylabel')
ax.plot_wireframe(xpos, ypos, hist)
plt.show()
答案 0 :(得分:0)
您可能想要计算极坐标中的直方图。这样可以更容易地根据中心的半径过滤掉不需要的点。
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np; np.random.seed(1)
r = np.ones(100)*0.9
phi = np.random.rand(100)*2.*np.pi
hist, xedges, yedges = np.histogram2d(r, phi, bins=25, range=[[0, 1.2], [0,2*np.pi*26./25]])
R,Phi = np.meshgrid(xedges[:-1], yedges[:-1])
X = R*np.cos(Phi)
Y = -R*np.sin(Phi)
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
X[(R < 0.75) | (R > 1)] = np.nan
ax.plot_surface(X,Y, hist.T, alpha=0.2)
ax.plot_wireframe(X,Y, hist.T)
plt.show()