我有一个大型数据集,由 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 …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 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)