gpt4 book ai didi

python - 子图中的分页符? Matplotlib 多页子图

转载 作者:太空宇宙 更新时间:2023-11-03 20:26:55 26 4
gpt4 key购买 nike

我想创建一个 python 程序,能够将多个图形绘制到一个 PDF 文件中,但是子图的数量是可变的。我已经在每页一个图上做到了这一点。然而,由于我有一些大约 100 个图,需要大量滚动,并且没有真正清晰地显示。因此我希望每页有 5X4 个子图。我已经为此编写了代码,整个代码很长,而且由于我对 pyhton 很陌生,对于知道该怎么做的人来说,它看起来很糟糕,但是绘图部分如下所示:

rows = (len(tags))/5
fig = plt.figure()
count = 0
for keyInTags in tags:
count = count + 1
ax = fig.add_subplot(int(rows), 5, count)
ax.set_title("cell" + keyInTags)
ax.plot(x, y_green, color='k')
ax.plot(x, y_red, color='k')
plt.subplots_adjust(hspace=0.5, wspace=0.3)
pdf.savefig(fig)

这个想法是我得到一个 PDF,其中绘制了所有“细胞”(用于生物研究)。到目前为止,我编写的代码运行良好,但是如果我有超过 4 行的子图,我想做一个“pageprake”。在某些情况下,一页上的行数超过 21 行,这使得我无法看到任何内容。

那么,是否有解决方案,例如告诉 Python 在 4 行后进行分页?在 21 行的情况下,我喜欢有 6 个页面,其中有漂亮的可见图。或者是通过绘制 5x4 绘图然后以某种方式迭代文件来完成的?如果有人能提供一点帮助或给出提示,我会非常高兴。我坐在这里 4 个小时了,没有找到解决方案。

最佳答案

A.循环页面

您可以找出需要多少页(npages)并为每页创建一个新数字。

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.backends.backend_pdf import PdfPages


tags = ["".join(np.random.choice(list("ABCDEFG123"), size=5)) for _ in range(53)]

N = len(tags) # number of subplots
nrows = 5 # number of rows per page
ncols = 4 # number of columns per page

# calculate number of pages needed
npages = N // (nrows*ncols)
if N % (nrows*ncols) > 0:
npages += 1

pdf = PdfPages('out2.pdf')

for page in range(npages):
fig = plt.figure(figsize=(8,11))
for i in range(min(nrows*ncols, N-page*(nrows*ncols))):
# Your plot here
count = page*ncols*nrows+i
ax = fig.add_subplot(nrows, ncols, i+1)
ax.set_title(f"{count} - {tags[count]}")
ax.plot(np.cumsum(np.random.randn(33)))
# end of plotting

fig.tight_layout()
pdf.savefig(fig)

pdf.close()
plt.show()

B.循环数据

或者您可以循环标签本身并在需要时创建一个新图形:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.backends.backend_pdf import PdfPages


tags = ["".join(np.random.choice(list("ABCDEFG123"), size=5)) for _ in range(53)]

nrows = 5 # number of rows per page
ncols = 4 # number of columns per page

pdf = PdfPages('out2.pdf')

for i, tag in enumerate(tags):
j = i % (nrows*ncols)
if j == 0:
fig = plt.figure(figsize=(8,11))

ax = fig.add_subplot(nrows, ncols,j+1)
ax.set_title(f"{i} - {tags[i]}")
ax.plot(np.cumsum(np.random.randn(33)))
# end of plotting
if j == (nrows*ncols)-1 or i == len(tags)-1:
fig.tight_layout()
pdf.savefig(fig)

pdf.close()
plt.show()

关于python - 子图中的分页符? Matplotlib 多页子图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57754419/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com