使用for循环创建绘图子地块



我有大量CSV文件,我需要取其中的一个子集(在本例中为9(,并使用Plotly绘制数据。我已经编写了以下for循环,它读取每个文件,创建一个数据帧,然后绘制。然而,我正在为一种将每个情节自动添加到子情节的每一行和每一列的方法而绞尽脑汁。即第一个绘图在第1行,第1/4列子绘图在第2行,第1列,第8个子绘图在第3行,第2列,等等。关于如何实现这一点的任何想法。最后一行需要更改(row = idx,col = idx)

os.chdir('D:GEEDatasets')
dirlist = os.listdir()
no_of_items = 9
Fig = make_subplots(rows = 3, cols = 3)
for idx,fname in enumerate(dirlist[0:9]):
    Df = pd.read_csv(fname)
    try:
        Df['ts'] = pd.to_datetime(Df['ts'],format = '%d/%m/%Y') 
    except:
        Df['ts'] = pd.to_datetime(Df['ts'],format = '%Y/%m/%d')
    Fig.add_trace(
        go.Scatter(
            x = Df['ts'],
            y = Df['fitted.values'],
            mode = 'lines'
        ),
    row = idx,col = idx
    )

首先,我会担心0:9是10个数字,而不是9。然而,假设你使用0:8,这将工作

import math 
row = idx%3 + 1
col = math.floor(idx/3) + 1

如果你使用1:9,只需删除"+1"的

或者如果你不想导入数学

row = idx%3 + 1
col = int(str((idx/3) + 1)[0])

我很好奇专家们是如何做到这一点的,因为我相信还有更优雅的

最新更新