J.D*_*Doe 4 python matplotlib python-3.x
我有一个大型数据集,由 3595 个 .csv 文件组成,其中包含 1252 对 x,y 元组。每个文件代表一个时间范围。这些是使用plot_surf(). 我发现,在绘制数据时,默认情况下我的数据将被筛选(关于文件或时间范围),步长为 10,这就是为什么我需要rstride=1, cstride=1在我的艺术家中指定才能绘制所有内容。
当我这样做时,我意外地发现了我之前遇到的问题的解决方案:默认情况下,绘图显示表面上的规则间隙,这不是所提供数据的结果。此外,颜色图“jet”未正确使用。这些问题可以从下图中看出。
\n\n\n\n将其与绘图实际的样子进行比较:
\n\n\n\n我在代码中更改的只是plot_surf函数的args rstride和cstride,这伴随着非常非常长的执行时间。但我确实得到了正确的结果。
\n\n所以我的问题是:什么给出了?为什么这个突然起作用了?为什么没有间隙的颜色图/绘图不适用于默认步幅?
\n\n这是我的代码:
\n\nfrom mpl_toolkits.mplot3d import Axes3D\nimport matplotlib.pyplot as plt\nfrom matplotlib import cm\nimport matplotlib.ticker as tkr\nimport numpy as np\nimport glob\nimport pandas as pd\n\nFiles = glob.glob(\'*.xy\')\ndtime = 1\n\nZ = np.array([pd.read_csv(file,\n decimal=\',\',\n delim_whitespace=True,\n header=None,\n names=[\'2theta\',\'I\'])[\'I\']\n for num, file in enumerate(Files)\n if num < len(Files)])\n\n\n\nX = np.array([pd.read_csv(Files[0],\n decimal=\',\',\n delim_whitespace=True,\n header=None,\n names=[\'2theta\',\'I\'])[\'2theta\']])\n\nY = np.array([[t*dtime for t in range(0,len(Files))]])\n\nX, Y = np.meshgrid(X, Y)\n\n\nfig = plt.figure(figsize=(7,5))\nax = fig.gca(projection=\'3d\')\n\n\n# Plot the surface.\nsurf = ax.plot_surface(X,\n Y,\n Z,\n cmap=cm.jet,\n rstride=1,\n cstride=1,\n vmin=np.amin(Z),\n vmax=np.amax(Z),\n linewidth=0,\n antialiased=True)\n\nax.set_ylabel(r\'$t \\quad / \\quad$ s\',\n labelpad=7)\n\nax.set_xlabel(r\'$2\\theta \\quad / \\quad \xc2\xb0$\',\n labelpad=7)\n\nax.set_zlabel(\'$I$ in a.u.\',\n labelpad=7)\n\n\nax.xaxis.set_major_locator(tkr.AutoLocator())\nax.yaxis.set_major_locator(tkr.AutoLocator())\nax.zaxis.set_major_locator(tkr.AutoLocator())\n\nax.get_xaxis().get_major_formatter().set_useOffset(True)\nax.get_xaxis().get_major_formatter().set_useOffset(True)\nax.get_xaxis().get_major_formatter().set_useOffset(True)\n\nfig.colorbar(surf, shrink=0.7, aspect=20, pad=0.12)\n\nplt.tight_layout()\nplt.savefig(\'3D.png\', dpi=300, bbox=\'tight\')\nRun Code Online (Sandbox Code Playgroud)\n
看一下文档。特别是这个:
rstride 和 cstride kwargs 设置用于对输入数据进行采样以生成图形的步幅。如果传入 1k x 1k 数组,则步幅的默认值将导致绘制 100x100 网格。默认为 10。如果同时提供了 stride 和 count kwargs(请参阅下一节),则会引发 ValueError。
这应该回答你的问题:如果rstride和cstride不为 1,则并非所有点都用于绘制曲面。
这可以节省时间,因为要绘制的点越多,计算绘图所需的时间就越长。
但同时,如果您的表面具有较高的可变性,则在图中跳过 10 个点以上的 9 个点将导致不同的图片。
| 归档时间: |
|
| 查看次数: |
11244 次 |
| 最近记录: |