繁体   English   中英

mplot3D fill_between 超出轴限制

[英]mplot3D fill_between extends over axis limits

我对使用 mplot3D 在 Python 中创建一个简单的线图有疑问,其中填充了 plot 下的区域。 我在 RedHatEnterprise 7.2、matplotlib 1.2.0 和 numpy 1.7.2 上使用 Python 2.7.5。

使用下面的代码,我能够生成一行 plot。这是按预期显示的,plot 的开头/结尾由导入数据集的限制设置。

然后,我尝试使用 Bart 从Plotting a series of 2D plots projected in 3D in a perspectival way给出的答案来填充 plot 和 -0.1 之间的区域。 然而,这有效,填充区域超出了数据集的限制。 从链接运行示例时也是如此。

此屏幕截图显示生成的 plot 填充区域超出设置的轴限制。 生成的绘图的填充区域超出了设置的轴限制。

  1. 如何实现填充区域只是数据集的范围或轴限制,以较小者为准?
  2. 如何将这些图的图例添加到图中?

代码如下:

from numpy import *
import matplotlib.pylab as plt
from mpl_toolkits.mplot3d import Axes3D

x,y = genfromtxt("data.dat",unpack=True)

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

ax.add_collection3d(plt.fill_between(x,y,-0.1, color='orange', alpha=0.3,label="filled plot"),1, zdir='y')

ax.plot(x,y,1,zdir="y",label="line plot")
ax.legend()

ax.set_xlim3d(852.353,852.359)
ax.set_zlim3d(-0.1,5)
ax.set_ylim3d(0,2)
ax.get_xaxis().get_major_formatter().set_useOffset(False)

plt.show()

我不知道如何将fill_between按照你想要的方式工作,但我可以使用3D polygon提供替代方法:

from numpy import *
import matplotlib.pylab as plt
from mpl_toolkits.mplot3d import Axes3D
from mpl_toolkits.mplot3d.art3d import Poly3DCollection # New import

#x,y = genfromtxt("data.dat",unpack=True)
# Generated some random data
w = 3
x,y = np.arange(100), np.random.randint(0,100+w,100)
y = np.array([y[i-w:i+w].mean() for i in range(3,100+w)])
z = np.zeros(x.shape)
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

#ax.add_collection3d(plt.fill_between(x,y,-0.1, color='orange', alpha=0.3,label="filled plot"),1, zdir='y')
verts = [(x[i],z[i],y[i]) for i in range(len(x))] + [(x.max(),0,0),(x.min(),0,0)]
ax.add_collection3d(Poly3DCollection([verts],color='orange')) # Add a polygon instead of fill_between

ax.plot(x,z,y,label="line plot")
ax.legend()
ax.set_ylim(-1,1)
plt.show()

上面的代码生成一些随机数据。 从中构建顶点并绘制具有这些顶点的多边形。 这将为您提供所需的绘图(但不使用fill_between )。 结果是:

多边形3D模仿matplotlib中的fill_between

我有一段时间遇到了同样的问题,并在 GitHub 上遇到了这个很棒的脚本。它可能会有所帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM