Plotly Line Plot만들기
Plotly Line plot 연습을 위해서 gapminder
데이터를 사용합니다. 데이터를 살펴보기 위해서 sample 데이터 3개를 확인합니다.
import plotly.express as px
df = px.data.gapminder()
df.sample(3)
1571 |
Tunisia |
Africa |
2007 |
73.923 |
10276158 |
7092.923025 |
TUN |
788 |
89 |
Bahrain |
Asia |
1977 |
65.593 |
297410 |
19340.101960 |
BHR |
48 |
797 |
Japan |
Asia |
1977 |
75.380 |
113872473 |
16610.377010 |
JPN |
392 |
각 국가의 기대수명, 인구 등 여러 정보를 시간에 표시됩니다. Line Plot으로 표시하기에는 많은 데이터이기 때문에 Asia
대륙에 대한 정보만 표시하겠습니다.
df_asia = df.query("continent == 'Asia'")
df_asia
0 |
Afghanistan |
Asia |
1952 |
28.801 |
8425333 |
779.445314 |
AFG |
4 |
1 |
Afghanistan |
Asia |
1957 |
30.332 |
9240934 |
820.853030 |
AFG |
4 |
2 |
Afghanistan |
Asia |
1962 |
31.997 |
10267083 |
853.100710 |
AFG |
4 |
3 |
Afghanistan |
Asia |
1967 |
34.020 |
11537966 |
836.197138 |
AFG |
4 |
4 |
Afghanistan |
Asia |
1972 |
36.088 |
13079460 |
739.981106 |
AFG |
4 |
... |
... |
... |
... |
... |
... |
... |
... |
... |
1675 |
Yemen, Rep. |
Asia |
1987 |
52.922 |
11219340 |
1971.741538 |
YEM |
887 |
1676 |
Yemen, Rep. |
Asia |
1992 |
55.599 |
13367997 |
1879.496673 |
YEM |
887 |
1677 |
Yemen, Rep. |
Asia |
1997 |
58.020 |
15826497 |
2117.484526 |
YEM |
887 |
1678 |
Yemen, Rep. |
Asia |
2002 |
60.308 |
18701257 |
2234.820827 |
YEM |
887 |
1679 |
Yemen, Rep. |
Asia |
2007 |
62.698 |
22211743 |
2280.769906 |
YEM |
887 |
396 rows × 8 columns
query
함수로 continent
가 Asia
인 정보만 다시 표시합니다. 396개의 데이터로 줄었습니다.
fig = px.line(df_asia, x='year', y='lifeExp', color='country')
fig.show()
이 데이터를 Line Plot으로 표시합니다. x축을 year
로 표시하고 y축을 기대수명을 나타내는 lifeExp
로 표시합니다. 각 line의 색은 country
에 따라 결정됩니다.
아직 데이터가 많으니 평균기대수명보다 높고 1인당 GDP가 평균 이상인 국가만 다시 필터링하겠습니다.
lifeExp_avg = df['lifeExp'].mean()
gdpPercap_avg = df['gdpPercap'].mean()
display(lifeExp_avg)
df_result = df.query("continent == 'Asia' and lifeExp > @lifeExp_avg and gdpPercap > @gdpPercap_avg")
df_result
87 |
Bahrain |
Asia |
1967 |
59.923 |
202182 |
14804.672700 |
BHR |
48 |
88 |
Bahrain |
Asia |
1972 |
63.300 |
230800 |
18268.658390 |
BHR |
48 |
89 |
Bahrain |
Asia |
1977 |
65.593 |
297410 |
19340.101960 |
BHR |
48 |
90 |
Bahrain |
Asia |
1982 |
69.052 |
377967 |
19211.147310 |
BHR |
48 |
91 |
Bahrain |
Asia |
1987 |
70.750 |
454612 |
18524.024060 |
BHR |
48 |
... |
... |
... |
... |
... |
... |
... |
... |
... |
1508 |
Taiwan |
Asia |
1992 |
74.260 |
20686918 |
15215.657900 |
TWN |
158 |
1509 |
Taiwan |
Asia |
1997 |
75.250 |
21628605 |
20206.820980 |
TWN |
158 |
1510 |
Taiwan |
Asia |
2002 |
76.990 |
22454239 |
23235.423290 |
TWN |
158 |
1511 |
Taiwan |
Asia |
2007 |
78.400 |
23174294 |
28718.276840 |
TWN |
158 |
1535 |
Thailand |
Asia |
2007 |
70.616 |
65068149 |
7458.396327 |
THA |
764 |
95 rows × 8 columns
Line Plot에 마커 적용하기
이제 시점을 좀 더 확실히 보기 위해서 markers
를 사용하여 마커를 적용합니다.
fig = px.line(df_result, x='year', y='lifeExp', color='country', markers=True)
fig.show()
각 라인에 서로다른 마커 심볼을 적용하기 위해서 symbol
에 country
정보를 전달합니다. 각 라인은 서로 다른 마커 심볼로 표시됩니다.
fig = px.line(df_result, x='year', y='lifeExp', color='country', symbol='country', markers=True)
fig.show()
마커 사이즈 설정하기
날짜 정보를 갖는 데이터를 Line Plot으로 표시하는 방법을 정리합니다. stock()
함수로 주식정보를 불러옵니다.
0 |
2018-01-01 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1.000000 |
1 |
2018-01-08 |
1.018172 |
1.011943 |
1.061881 |
0.959968 |
1.053526 |
1.015988 |
2 |
2018-01-15 |
1.032008 |
1.019771 |
1.053240 |
0.970243 |
1.049860 |
1.020524 |
3 |
2018-01-22 |
1.066783 |
0.980057 |
1.140676 |
1.016858 |
1.307681 |
1.066561 |
4 |
2018-01-29 |
1.008773 |
0.917143 |
1.163374 |
1.018357 |
1.273537 |
1.040708 |
... |
... |
... |
... |
... |
... |
... |
... |
100 |
2019-12-02 |
1.216280 |
1.546914 |
1.425061 |
1.075997 |
1.463641 |
1.720717 |
101 |
2019-12-09 |
1.222821 |
1.572286 |
1.432660 |
1.038855 |
1.421496 |
1.752239 |
102 |
2019-12-16 |
1.224418 |
1.596800 |
1.453455 |
1.104094 |
1.604362 |
1.784896 |
103 |
2019-12-23 |
1.226504 |
1.656000 |
1.521226 |
1.113728 |
1.567170 |
1.802472 |
104 |
2019-12-30 |
1.213014 |
1.678000 |
1.503360 |
1.098475 |
1.540883 |
1.788185 |
105 rows × 7 columns
데이터를 살펴보면 회사들의 주가를 시간에 따라서 저장하고 있습니다. y축에 표시할 데이터는 리스트 형태로 정보를 전달합니다. 마커사이즈는 marker_size
를 이용해서 설정합니다.
fig = px.line(df, x='date', y=["GOOG", "AAPL", "FB"], markers=True)
fig.update_traces(marker_size=10)
fig.show()