ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Python] subplot 에 shape 추가하기
    Programing/Data Science 2020. 4. 3. 07:46

    5x1 크기의 subplot을 구성하고 각 subplot 에 shape를 추가하는 방법에 대해 정리하였습니다.

    shape를 추가하기 위해서는 아래 함수들을 사용하면 됩니다. 다만, 모든 subplot에 동일한 또는 특정 shape를 추가하려면 fig.add_shape 를 사용해서 어느 subplot에 적용할지를 특정해줘야 합니다. 그렇지 않을 경우 첫번째 subplot 에만 shape가 적용이 되네요.

    fig.update_shapes

    fig.add_shapes

    fig.update_layout(.... shapes=my_shapes)

    title_list = ['sub1_1', 'sub1_2', 'sub2_1', 'sub2_2']
    #shared_xaxes: True if subplots in the same cols share the xaxes
    #shared_yaxes: True if subplots in the same rows share the yaxes
    trace_list = list()
    trace_list.append(go.Histogram(x = x, y=y, legendgroup='group', xbins=dict(size=0.1), showlegend=True))
    trace_list.append(go.Histogram(x = x, y=y, legendgroup='group', xbins=dict(size=0.1), showlegend=True))
    ...
    # legendshow = False when the legend shares with first 2 traces
    trace_list.append(go.Histogram(x = x, y=y, legendgroup='group', xbins=dict(size=0.1), showlegend=False))
    
    N_rows = 5
    my_shape = dict(x0 =1 , y0 =0, x1 = 2, y1 = 10,fillcolor='lightsalmon', opacity = 0.3, line_width = 0, layer='below')
    fig = make_subplots(rows = N_rows, cols = 1, shared_xaxes=True, subplots_titles = title_list)
    for idx in range(N_rows):
    	fig.add_trace(trace_list[idx * 2], idx + 1, 1)
        fig.add_trace(trace_list[idx * 2 +1], idx + 1, 1) # idx+1, 1: shows 2 traces at the same subplot
        fig.add_shape(my_shape, row = idx+1, 1)  
        
    fig.update_layout(barmode='stack') # stack | overlay
    fig.update_yaxes(tick0 = 0, dtick=2, fixedrange=True, range=[0, 10]) # fixedrange = True if all subplots has the same scale
    fig.update_traces(opacity=0.5)
    fig.show()

     

    댓글

Designed by Tistory.