我使用文件中的数据创建了直方图,没有问题.现在我想在同一个直方图中叠加来自另一个文件的数据,所以我做了类似的事情
n,bins,patchs = ax.hist(mydata1,100)
n,bins,patchs = ax.hist(mydata2,100)
Run Code Online (Sandbox Code Playgroud)
但问题是,对于每个区间,只显示具有最高值的条,而另一个区间是隐藏的.我想知道如何用不同的颜色同时绘制两个直方图.
我试图用plot_surface命令在matplotlib中的相同轴上绘制两个3D表面.
fig = plt.figure()
fig.figsize = fig_size
ax = fig.gca(projection='3d')
surf = ax.plot_surface(X, Y, Exp_Fric_map, alpha = 1, rstride=1, cstride=1, cmap=cm.winter, linewidth=0.5, antialiased=True)
surf = ax.plot_surface(X, Y, Fric_map, alpha = 1, rstride=1, cstride=1, cmap=cm.autumn,linewidth=0.5, antialiased=True)
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,在查看绘图时,并不总是正确的表面是"在顶部",例如在图中:

在后角(200N,轴上为2.5Hz),当实际上黄色 - 红色更靠近观察者时,蓝绿色表面位于"顶部".如果我旋转图:

那么事情看起来还不错,蓝绿色表面位于200N和2.5Hz(现在在左侧)的黄红色表面下方.我尝试过搜索stackoverflow和Google,但找不到解决方案的任何类似问题.
我在Linux上使用Python 2.7.3,Numpy 1.6.1和Matplotlib 1.1.1rc.
我使用以下代码在一个简单的三维条形图上工作:
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")
ax.set_xlabel("x")
ax.set_ylabel("y")
ax.set_zlabel("z")
ax.set_xlim3d(0,10)
ax.set_ylim3d(0,10)
ax.set_zlim3d(0,2)
xpos = [2,5,8,2,5,8,2,5,8]
ypos = [1,1,1,5,5,5,9,9,9]
zpos = np.zeros(9)
dx = np.ones(9)
dy = np.ones(9)
dz = np.ones(9)
ax.bar3d(xpos, ypos, zpos, dx, dy, dz)
plt.gca().invert_xaxis()
plt.show()
Run Code Online (Sandbox Code Playgroud)
认为这只是一个测试,到目前为止似乎都很清楚.我只是想知道如何以堆叠的方式绘制这9个条中的每一个,以便例如每个条被分成4个部分,构成整个条.
但不是2堆,我想有4.任何想法如何从我现在的点开始?每个提示都会非常受欢迎.
谢谢!
编辑:如果我想为每个堆叠条实现给定值,例如:
...
z = [np.array([ 0.2, 0.6, 0.3, 0.6, 0.4, 0.3, 0.8, 0.5, 0.7]),
np.array([ 0.8, 0.4, 0.5, 0.2, …Run Code Online (Sandbox Code Playgroud) 我一直在寻找答案,但是我似乎看不出为什么在我的代码中我无法使投影轮廓显示在表面“背后”。
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
fig = plt.figure()
ax = fig.gca(projection='3d')
X = np.array([[200,800,1500,2000,3000],[200,700,1500,2000,3000],[200,800,1500,2000,3000],[200,800,1500,2000,3000]])
Y = np.array([[50,50,50,50,50],[350,350,350,350,350],[500,500,500,500,500],[1000,1000,1000,1000,1000]])
Z = np.array([[0,0,33,64,71],[44,62,69,74,76],[59,67,72,75,77],[63,68,73,76,77]])
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, alpha=0.5)
cset = ax.contourf(X, Y, Z, zdir='z', offset=0, cmap=cm.coolwarm)
cset = ax.contourf(X, Y, Z, zdir='x', offset=200, cmap=cm.coolwarm)
cset = ax.contourf(X, Y, Z, zdir='y', offset=1000, cmap=cm.coolwarm)
ax.set_xlabel('X')
ax.set_xlim(200, 3000)
ax.set_ylabel('Y')
ax.set_ylim(0, 1000)
ax.set_zlabel('Z')
ax.set_zlim(0, 100)
plt.show()
Run Code Online (Sandbox Code Playgroud)
我一直使用此页面中的“填充轮廓图”之一作为模板:http : //matplotlib.org/mpl_toolkits/mplot3d/tutorial.html#scatter-plots …
我正在使用带有 RdBu 颜色图的 matplotlib bar3d,并希望条形之间具有可变的透明度(因此较小的条形可能比较高的条形更透明)。
这是制作 3d 条形图的代码。数据存储在 4x4 矩阵“rho”中。目前 alpha 保持在 0.95,但能够控制每个柱的 alpha 值会很好。
干杯
xpos = np.arange(0,4,1)
ypos = np.arange(0,4,1)
xpos, ypos = np.meshgrid(xpos, ypos)
xpos = xpos.flatten()
ypos = ypos.flatten()
zpos = np.zeros(4*4)
dx = 0.5 * np.ones_like(zpos)
dy = dx.copy()
dz = rho.flatten()
nrm=mpl.colors.Normalize(-1,1)
colors=cm.RdBu(nrm(-dz))
alpha = 0.95
ax.bar3d(xpos,ypos,zpos, dx, dy, dz, alpha=alpha, color=colors, linewidth=0)
Run Code Online (Sandbox Code Playgroud) matplotlib ×5
python ×5
3d ×1
charts ×1
colormap ×1
histogram ×1
mplot3d ×1
plot ×1
python-2.7 ×1
surface ×1