我想使用dataframe从csv文件中绘制一些数据。
我的代码当前显示266 = 14 * 19个单独的子图。当前,它被编码为在一个屏幕上显示所有266个子图,每个子图很小且难以阅读。
我尝试使用1x1的情节
#fig, cx=plt.subplots(1,1, sharex=False, sharey=False, figsize=(18,12))
主要代码:
fig, cx=plt.subplots(14,19, sharex=False, sharey=False, figsize=(18,12))
#fig, cx=plt.subplots(1,1, sharex=False, sharey=False, figsize=(18,12))
plt.subplots_adjust(hspace=0.5)
cx = cx.ravel()
for i in range(0,len(Bond)):
cx[i].plot(VelLog[Bond[i]], color='b')
cx[i].set_xlabel('Time (ms)')
cx[i].set_ylabel('Velocity (m/s)')
cx[i].set_ylim(-250,150)
cx[i].set_title(Bond[i])
plt.savefig('Velocity.png', dpi=120)
plt.show()
##################################
Error message when I un-comment Line 1
cx[i].plot(VelLog[Bond[i]], color='b')
IndexError: index 209 is out of bounds for axis 0 with size 209
如何一次只在屏幕上显示几个子图以提高可读性?
像5x5 + 5x5 + 5x5 + 5x5 + 5x5,+ 5x5 + 5x5 + 5x5 + 5x5 + 5x5 + 4x4 = 266
11个不同的屏幕。
是否可以添加图表过滤器作为替代?
这是我更新的代码,其中包含您的建议。现在它会创建11个数字。我能够绘制所有266张图,但每个图看起来都一样
Nrows, Ncols = 14, 19
Nplots = Nrows*Ncols
nrows, ncols = 5, 5
naxes = nrows*ncols
nfigures = Nplots//naxes
count = 0
figures = []
for fignum in range(nfigures+1):
fig, axes = plt.subplots(nrows, ncols, sharex=False, sharey=False, figsize=(18,12))
plt.subplots_adjust(hspace=0.5)
#axes = axes.ravel()
figures.append(fig)
axes = axes.flat
for ax in axes:
#print(count)
if count<Nplots:
for i in range(0,len(Bond)):
cvs_row, cvs_col = divmod(count, Ncols)
cvs_row, cvs_col = cvs_row+1, cvs_col+1
ax.plot(VelLog[Bond[i]], color='b', label='%d,%d'%(cvs_row, cvs_col))
ax.set_xlabel('Time (ms)')
ax.set_ylabel('Velocity (m/s)')
ax.set_ylim(-250,150)
ax.set_title(Bond[i])
count = count+1
plt.savefig('Velocity.png', dpi=120)
plt.show()
这是一个数字的结果 enter image description here
答案 0 :(得分:0)
在这里,我绘制相同的函数14 * 19次,但是您可以了解一下
我们有两个问题,跟踪我们正在绘制的内容和 延迟实际绘图,直到我们完成所有绘图为止。
这里使用全局计数器和divmod
解决了第一个问题
内置,第二个将所有图形存储在列表中并调用
plt.show()
仅在绘图阶段的最后。
为了显示“跟踪”的含义,我添加了标签和 每个子图的图例。
为了使事情更合理,我不检查最后一个数字是否为空 而且我也不检查最后一个数字的某些子图是否为空, 但请记住,如果您可以从图形中删除一些子图 想要一个干净的最后一个数字。
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, np.pi, 31)
y = np.sin(x)
Nrows, Ncols = 14, 19
Nplots = Nrows*Ncols
nrows, ncols = 5, 5
naxes = nrows*ncols
nfigures = Nplots//naxes
count = 0
figures = []
for fignum in range(nfigures+1):
fig, axes = plt.subplots(nrows, ncols)
figures.append(fig)
axes = axes.flat
for ax in axes:
print(count)
if count<Nplots:
cvs_row, cvs_col = divmod(count, Ncols)
cvs_row, cvs_col = cvs_row+1, cvs_col+1
ax.plot(x, y, label='%d,%d'%(cvs_row, cvs_col))
ax.legend()
count = count+1
plt.show()
这里我仅显示最后一个数字,以显示“空”的含义 子图“ ...