Programming/Python

Python plotly scatter, scattergeo, layout geo, 화면 분할

며용 2020. 7. 23. 23:05

- 창 분할하기

def draw_graph():
	# 그래프 그릴 때 필요한 정보값들 미리 준비해놓기
    # x축의 값을 맡아줄 변수 셋팅
    x = [i for i in range(TEST_VIDEO_MAX)]

	# 위아래 분할로 만들기
    fig = make_subplots(
        rows=2,
        cols=1,

		# 분할의 타입을 먼저 설정해줘야함
        specs=[[{"type": "xy"}],
               [{"type": "scattergeo"}]],
    )

 

 

 

- 반복문 돌면서 값 여러 개 넣기

    # list or dict 안에 있는 클래스의 리스트의 값을 넣고 싶을 때..
    for i, log in enumerate(log_dict.values()):
    
    	#scatter 형태로
        fig.add_trace(go.Scatter(
        	#아까 만든 x축 해줄 리스트
            x=x,
            #y축에 점 찍을 리스트
            y=log.download_speed,
            #trace0 → name
            name=log.log_id,
            #점도 찍고 라인도 그리고
            mode='lines+markers',
            #점에 갖다대면 뜨는 캡션 폼 수정하기 (scatter 안에 있는 attribute 값만 가능)
            hovertemplate=
            '<b>%{text}_%{x}</b>'
            + '<br>Speed: %{y:.2f}',
            text=['video_{}'.format(log.log_id) for i in range(TEST_VIDEO_MAX)],
			#라인 디자인 결정
            line=dict(
                # shape='spline',
                width=1,
                # dash='dash',
            ),
            #점 디자인 결정
            marker=dict(
                symbol="star-diamond",
                size=8,
            ),
        ),
        	#분할한 화면 중 1행1열에 배치
            row=1,
            col=1,
        )

jeunna.tistory.com/107

 

Python Plotly 하다가 레퍼런스 잘 안나와서 모아놓는 document들

# 사용한 버전 pip install plotly==4.9.0 #dragmode: 드래그 모드 어떤 걸로 할지 설정하는거 #['orbit', 'turntable', 'zoom', 'pan', False] - '어떻게 만들어야할지 모르겠다 or 이렇게 어떻게 함'일 때 찾아..

jeunna.tistory.com

→ 그외의 다른 속성 값들 찾으러 떠나는 곳

 

 

 

- plotly scattergeo

    #scattergeo, 지도 그리기
    fig.add_trace(go.Scattergeo(
        lat=latitude,
        lon=longitude,
        #그룹핑
        legendgroup='continent=%s' % (state),
        #옆에 뜨는 trace 비기 싫어서 ''
        name='',
        text=['<b>%s</b>' % (city[i]) for i in range(len(city))],
        hovertemplate='<b>%{customdata[1]}</b>, %{customdata[0]}<br><br>'
                      'ip= %{customdata[2]}<br>'
                      '%{lat}º, %{lon}º',
		#hovertemplate에 다른 값을 넣고 싶을 때 custom하는 곳
        #각 hover[i]에 맞는 customdata[i]가 있어야함 (여러 개 넣고 싶으면 리스트 안에 리스트)
        customdata=[[state[i], city[i], test_ip[i]] for i in range(len(test_ip))],
        mode='markers+text',
        textposition='bottom right',
        #text의 디자인에만 적용됨
        textfont=dict(
            family=['Gravitas One, cursive' for i in range(len(test_ip))],
            size=[15 for i in range(len(test_ip))],
            color='Black',
        ),
        marker=dict(
            size=13,
            color='rgb(3, 206, 163)',
            line_color='#137e6d',
            line_width=2,
            sizemode='area',
            symbol='circle',
            opacity=0.7,
        ),
        opacity=0.7,
        #옆에 이 마크는 먼지 설명뜨는 창 없애기
        showlegend=False,
    ),
    	#지도는 2행2열에 배치
        row=2,
        col=1,
    )

 

 

 

- 분할된 창마다 다른 속성 적용하기

    #분할된 창마다 다른 속성 적용하기
    #1행1열의 y축 셋팅
    fig.update_xaxes(
        title_text="Video sequence",
        zerolinecolor='rgb(68,68,68)',
        row=1, col=1)
    fig.update_yaxes(
        title_text="Speed (Mbps)",
        gridcolor='rgb(204,204,204)',
        zerolinecolor='rgb(68,68,68)',
        row=1, col=1)

 

 

 

- layout 디자인 꾸미기

    #figure layout 설정
    fig.update_layout(
        title_text="<b>Download Test</b><br>"
                   "Fully downloaded: %d, Stopped: %d <b>|</b> Download speed average: %.2fMbps" % (success, stopped, speed_avg),
        showlegend=True,
        #scattergeo 디자인 꾸미기
        geo=dict(
        	#땅덩어리 색
            landcolor='rgb(255, 255, 255)',
            showocean=True,
            #바다 색
            oceancolor='rgb(107,139,164)',
            #지역나누는 테두리 색
            countrycolor='rgb(204, 204, 204)',
            #대륙 테두리 색
            coastlinecolor='rgb(204, 204, 204)',
            #지도 두루고 있는 박스 테두리 색
            framecolor='rgb(179,184,187)',
            #지도 모양 어떻게 바꿀껀지
            projection=dict(
                type='natural earth',
                # type='equirectangular',
            ),
            showcoastlines=False,
            showland=True,
            showcountries=True,
        ),
        plot_bgcolor='rgb(255,255,255)',
        legend=dict(
            title_text='Video'
        ),
        dragmode='pan',
        # hovermode='x unified'
    )

 

 

 

- 그렇게 설정한 결과물 띄우기

    #그렇게 설정한 그래프 띄워주세요
    fig.show()

	#저장도 해주시구요
    py.offline.plot(fig, auto_open=False, filename='./%s/%s/%s/figure.html' % (directory, date_string, UUID))

짜잔