小编J.D*_*Doe的帖子

Matplotlib 的 rstride、cstride 弄乱了plot_surface 3D 图中的颜色图?

我有一个大型数据集,由 3595 个 .csv 文件组成,其中包含 1252 对 x,y 元组。每个文件代表一个时间范围。这些是使用plot_surf(). 我发现,在绘制数据时,默认情况下我的数据将被筛选(关于文件或时间范围),步长为 10,这就是为什么我需要rstride=1, cstride=1在我的艺术家中指定才能绘制所有内容。

\n\n

当我这样做时,我意外地发现了我之前遇到的问题的解决方案:默认情况下,绘图显示表面上的规则间隙,这不是所提供数据的结果。此外,颜色图“jet”未正确使用。这些问题可以从下图中看出。

\n\n

失败的阴谋

\n\n

将其与绘图实际的样子进行比较:

\n\n

在此输入图像描述

\n\n

我在代码中更改的只是plot_surf函数的args rstride和cstride,这伴随着非常非常长的执行时间。但我确实得到了正确的结果。

\n\n

所以我的问题是:什么给出了?为什么这个突然起作用了?为什么没有间隙的颜色图/绘图不适用于默认步幅?

\n\n

这是我的代码:

\n\n
from 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 …
Run Code Online (Sandbox Code Playgroud)

python matplotlib python-3.x

4
推荐指数
1
解决办法
1万
查看次数

获取某个轴 matplotlib 的所有艺术家?

我正在尝试在 mpl 中对绘图进行动画处理,并且我决定最明智的方法是使用 Gridspec 动态添加多个轴。我提供了一些我希望 Gridspec 在我的画布上制作轴的列和行,然后我可以用艺术家填充这些轴。

由于轴的数量是任意的,因此艺术家的数量也是任意的,我认为最好像这样访问艺术家:

import matplotlib.pyplot as plt

fig = plt.figure(constrained_layout=False, figsize=(8,8), facecolor=bg_colour)
gs = fig.add_gridspec(nrows=nrows, ncols=ncols, hspace=0.1, wspace=0.1)

for i in range(nrows):
    for j in range(ncols):
        ax = plt.subplot(gs[i,j])

print(fig.axes[0].artists)
Run Code Online (Sandbox Code Playgroud)

所以我的想法是,我可以动态创建所有轴,然后我还可以通过fig.axes使用适当的索引进行切片来动态地将艺术家添加到这些轴。一旦我选择了我的轴我就可以做

fig.axes[0].plot([],[])
Run Code Online (Sandbox Code Playgroud)

将一个空艺术家添加到右轴,然后我可以使用代码中的更新函数为其设置动画。

问题是,无论我如何设置图形、轴和艺术家的创建,列表fig.axes[index].artists始终为空。我不明白如何发出命令来绘制我的轴,然后不让艺术家出现在所有艺术家的列表中。是.artists我需要使用的所有艺术家的容器吗?我要找的东西是否存放在其他地方?难道mpl实际上一开始就不允许这种事情发生吗?

完整代码

import numpy as np
import itertools
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
from matplotlib.ticker import AutoMinorLocator, MaxNLocator




def circle_points_x(period):

    t = np.linspace(0,2*np.pi,500)
    x = np.cos(period*t +np.pi/2)

    return x

def circle_points_y(period):

    t = …
Run Code Online (Sandbox Code Playgroud)

python animation matplotlib

3
推荐指数
1
解决办法
3640
查看次数

标签 统计

matplotlib ×2

python ×2

animation ×1

python-3.x ×1