Snoopy [python] Seaborn 4 - lineplot
Python/Seaborn

[python] Seaborn 4 - lineplot

Sooyoon Jeong 2022. 11. 15.

seaborn.lineplot — seaborn 0.12.0 documentation (pydata.org)

 

seaborn.lineplot — seaborn 0.12.0 documentation

seaborn.lineplot seaborn.lineplot(data=None, *, x=None, y=None, hue=None, size=None, style=None, units=None, palette=None, hue_order=None, hue_norm=None, sizes=None, size_order=None, size_norm=None, dashes=True, markers=None, style_order=None, estimator='m

seaborn.pydata.org

Timeseries plot with error bands — seaborn 0.12.0 documentation (pydata.org)

 

Timeseries plot with error bands — seaborn 0.12.0 documentation

Timeseries plot with error bands seaborn components used: set_theme(), load_dataset(), lineplot() import seaborn as sns sns.set_theme(style="darkgrid") # Load an example dataset with long-form data fmri = sns.load_dataset("fmri") # Plot the responses for d

seaborn.pydata.org


Lineplot?

두 변수 간의 관계를 보여주기에 적합한 plot (수치형 변수 - 수치형 변수, 범주형 변수 - 수치형 변수)

hue, size, styple 파라미터 등 사용 가능


1. 라이브러리 및 데이터셋 로드

사용할 데이터셋: flights

  - 10년 간 월 별 승객 수 데이터

import seaborn as sns

flights = sns.load_dataset("flights")
flights.head()

 

2. 기본 line plot

nov_flights = flights.query("month == 'Nov'")
sns.lineplot(data=nov_flights, x="year", y="passengers")

위는 수치형 변수와 - 범주형 변수를 양 축으로 하여 그린 것이다.

수치형 변수와 범주형 변수간에 적용하기에도 적합해보인다.

 

그러나, 범주형 변수가 적은 경우에는 부적합한 것 같다.

sns.lineplot(data=fmri, x = "timepoint", y = "region")

범주형-범주형은 당연히 의미가 없다.

 

flights dataset wide-form 으로 변환

flights_wide = flights.pivot("year", "month", "passengers")
flights_wide.head()

 

sns.lineplot(data=flights_wide["Nov"])

sns.lineplot(data=flights_wide)

 

3. hue 지정

월 별로 색깔을 지정해보겠다.

sns.lineplot(data=flights, x="year", y="passengers", hue="month")

 

4. style 지정

sns.lineplot(data=flights, x="year", y="passengers", hue="month", style="month")

style에 month를 지정해줌으로써 월 별로 선의 스타일이 달라짐을 확인할 수 있다.

동일한 변수(열)에 여러 옵션을 지정함으로써 접근성을 높여준다..!

 

4-1. 라인 스타일 지정

sns.lineplot(data=flights_wide["Nov"], linestyle = ":")

sns.lineplot(data=flights_wide["Nov"], linestyle = "-.")

4-2. set_style (그리드 스타일)

set_style을 사용하면 grid의 스타일을 지정해줄 수 있다.

# whitegrid, darkgrid, white, dark, ticks

sns.set_style("whitegrid")
sns.lineplot(data=flights, x="year", y="passengers", hue="month", style="month")

4-3. color(색깔)와 alpha(투명도)

sns.lineplot(data=fmri, x="timepoint", y="signal", ci = None, color = "red", alpha =0.5)

 


fmri = sns.load_dataset("fmri")
fmri.head()

sns.lineplot(data=fmri, x="timepoint", y="signal", hue="event")

물론, hue와 style에 다른 변수를 지정할 수도 있다.

sns.lineplot(data=fmri, x="timepoint", y="signal", hue="region", style="event")


style을 사용할 경우, dash를 대신하여 markers를 사용하도록 옵션을 지정할 수도 있다.

sns.lineplot(
    data=fmri,
    x="timepoint", y="signal", hue="event", style="event",
    markers=True, dashes=False
)

4-4. marker

marker를 통해 마커 옵션을 지정할 수 있다.

sns.lineplot(
    data=fmri,
    x="timepoint", y="signal", hue="event", style="event", marker = '+'
)

marker = "+"

marker = "o"로 하면, dot 로 표시된다.

 

5. error bar

sns.lineplot(
    data=fmri, x="timepoint", y="signal", hue="event", err_style="bars", errorbar=("se", 2),
)

6. units

units을 지정하면 의미매핑을 사용하지 않고도 여러 줄로 plot을 그릴 수 있다.

sns.lineplot(
    data=fmri.query("region == 'frontal'"),
    x="timepoint", y="signal", hue="event", units="subject",
    estimator=None, lw=1,
)


7. 수치형 변수의 그룹핑

dots = sns.load_dataset("dots").query("align == 'dots'")
dots.head()

hue와 스타일 적용

sns.lineplot(
    data=dots, x="time", y="firing_rate", hue="coherence", style="choice",
)

8. palette

palette 지정과 함께 matplotlib.colors.Normalize 옵션도 함께 지정해주었다.

sns.lineplot(
    data=dots.query("coherence > 0"),
    x="time", y="firing_rate", hue="coherence", style="choice",
     palette="flare", hue_norm=mpl.colors.LogNorm(),
)

palette = sns.color_palette("mako_r", 6)
sns.lineplot(
    data=dots, x="time", y="firing_rate",
    hue="coherence", style="choice",
    palette=palette
)

9. size

sns.lineplot(
    data=dots, x="time", y="firing_rate",
    size="coherence", hue="choice",
    legend="full"
)

size는 선의 굵기를 의미하는 것 같다.(선의 굵기를 어떤 기준으로 분류할지?)

 

sizes를 사용하면 size의 범위를 지정할 수 있다.

sns.lineplot(
    data=dots, x="time", y="firing_rate",
    size="coherence", hue="choice",
    sizes=(.25, 2.5)
)

10. relplot에서 line plot 

relplot은 lineplot과 facetgrid를 합치기 위해서 사용할 수 있다.

replot은 부가적인 범주형 변수로 그룹핑할 수 있게끔 도와주며, facet grid를 직접적으로 사용하는 것보다 안전하다.

sns.relplot(
    data=fmri, x="timepoint", y="signal",
    col="region", hue="event", style="event",
    kind="line"
)

'Python > Seaborn' 카테고리의 다른 글

[Python] Seaborn 3 - scatterplot  (0) 2022.10.27
[Python] seaborn 2 - lmplot  (0) 2022.10.27
[Python] seaborn 1 - 기본개념  (0) 2022.10.27

댓글