- 창 분할하기
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,
)
→ 그외의 다른 속성 값들 찾으러 떠나는 곳
- 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))
짜잔
'Programming > Python' 카테고리의 다른 글
Python IP주소로 위도, 경도 위치 찾기 (latitude, longitude) (0) | 2020.12.04 |
---|---|
Python plotly 그라데이션 색 점 찍기 (0) | 2020.10.10 |
Python Plotly 하다가 레퍼런스 잘 안나와서 모아놓는 document들 (0) | 2020.07.23 |
PyCharm Terminal Git Bash로 바꾸기 (0) | 2020.04.20 |
Python 환경이 다른 가상환경 여러 개 만들기 (윈도우) (0) | 2020.04.19 |