Plotly buttons in for loop

I could not be able to iterate my subplot consisting of one table and bar plots with multiple line plots

cod as below

I would like to replace the bool values of dict with something which can be iterated

                    buttons=list([
                                                        dict(label=df.columns[1], 
                                                            method="restyle", 
                                                            args=[{"visible": [True]*13+[False]*247}, 
                                                                {"title": df.columns[1]}]), 
                                                        dict(label=df.columns[2], 
                                                            method="restyle", 
                                                            args=[{"visible": [False]*13+[True]*13+[False]*234}, 
                                                                {"title": df.columns[2]}]), 

                                                        dict(label=df.columns[3],
                                                            method="restyle", 
                                                            args=[{"visible": [False]*26+[True]*13+[False]*221}, 
                                                                {"title": df.columns[1]}]), 
                                                        dict(label=df.columns[4], 
                                                            method="restyle", 
                                                            args=[{"visible": [False]*39+[True]*13+[False]*208}, 
                                                                {"title": df.columns[1]}]), 
                                                        dict(label=df.columns[5], 
                                                            method="restyle", 
                                                            args=[{"visible": [False]*52+[True]*13+[False]*195}, 
                                                                {"title": df.columns[1]}]),
                                                        dict(label=df.columns[6], 
                                                            method="restyle", 
                                                            args=[{"visible": [False]*65+[True]*13+[False]*182}, 
                                                                {"title": df.columns[1]}]), 
                                                        dict(label=df.columns[7], 
                                                            method="restyle", 
                                                            args=[{"visible": [False]*78+[True]*13+[False]*169}, 
                                                                {"title": df.columns[2]}]), 

                                                        dict(label=df.columns[8], 
                                                            method="restyle", 
                                                            args=[{"visible": [False]*91+[True]*13+[False]*156}, 
                                                                {"title": df.columns[1]}]), 
                                                        dict(label=df.columns[9], 
                                                            method="restyle", 
                                                            args=[{"visible": [False]*104+[True]*13+[False]*143}, 
                                                                {"title": df.columns[1]}]), 
                                                        dict(label=df.columns[10], 
                                                            method="restyle", 
                                                            args=[{"visible": [False]*117+[True]*13+[False]*130}, 
                                                                {"title": df.columns[1]}]),
                                                        dict(label=df.columns[11], 
                                                            method="restyle", 
                                                            args=[{"visible":[False]*130+[True]*13+[False]*117}, 
                                                                {"title": df.columns[1]}]), 
                                                        dict(label=df.columns[12], 
                                                            method="restyle", 
                                                            args=[{"visible": [False]*143+[True]*13+[False]*104}, 
                                                                {"title": df.columns[2]}]), 

                                                        dict(label=df.columns[13], 
                                                            method="restyle", 
                                                            args=[{"visible": [False]*156+[True]*13+[False]*91}, 
                                                                {"title": df.columns[1]}]), 
                                                        dict(label=df.columns[14], 
                                                            method="restyle", 
                                                            args=[{"visible": [False]*169+[True]*13+[False]*78}, 
                                                                {"title": df.columns[1]}]), 
                                                        dict(label=df.columns[15], 
                                                            method="restyle", 
                                                            args=[{"visible": [False]*182+[True]*13+[False]*65}, 
                                                                {"title": df.columns[1]}]),
                                                        dict(label=df.columns[16], 
                                                            method="restyle", 
                                                            args=[{"visible": [False]*195+[True]*13+[False]*52}, 
                                                                {"title": df.columns[1]}]), 
                                                        dict(label=df.columns[17], 
                                                            method="restyle", 
                                                            args=[{"visible": [False]*208+[True]*13+[False]*39}, 
                                                                {"title": df.columns[2]}]), 

                                                        dict(label=df.columns[18], 
                                                            method="restyle", 
                                                            args=[{"visible": [False]*221+[True]*13+[False]*26}, 
                                                                {"title": df.columns[1]}]), 
                                                        dict(label=df.columns[19], 
                                                            method="restyle", 
                                                            args=[{"visible": [False]*234+[True]*13+[False]*13}, 
                                                                {"title": df.columns[1]}]), 
                                                        dict(label=df.columns[20], 
                                                            method="restyle", 
                                                            args=[{"visible": [False]*247+[True]*13}, 
                                                                {"title": df.columns[1]}]),

                                                    ]), 

                                    
                                )]))

Hi,

Could you put a few more words on how you weren’t able to iterate the subplot?

If I understand you correctly, you might want to create all dict elements in a list comprehension. For that you could use a function like:

def create_mask(idx: int, size: int=260, step: int=13) -> list[bool]:
    return idx * step * [False] + step * [True] + (size - step * (idx + 1)) * [False]

Then:

buttons_list = [
    dict(
        label=df.columns[i+1],
        method="restyle",
        args=[
            dict(
                visible=create_mask(i),
                title=df.columns[i]
             )
        ]
    )
]       

Would this help you? :slightly_smiling_face: