使用for循环创建绘图子图

时间:2020-03-06 08:50:39

标签: python plotly

我有大量的CSV文件,我需要获取其中的一个子集(在本例中为9)并使用Plotly绘制数据。我编写了以下for循环,该循环读取每个文件,创建一个数据框,然后进行绘图。但是,我想尽办法自动将每个图添加到子图的每一行和每一列。也就是说,第一个图位于第1行,第1列/第4个子图位于第2行,第1列,第8个子图位于第3行,第2列等。有关如何实现此目的的任何想法。最后一行需要更改(row = idx,col = idx)

os.chdir('D:\GEE\Datasets')
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

    )

1 个答案:

答案 0 :(得分:1)

首先,我会担心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])

我很好奇专家们如何做到这一点,因为我敢肯定还有一些更优雅的东西