'adding horizontal lines'에 해당되는 글 1건

  1. 2021.10.06 [Python matplotlib] 그래프에 수평선, 수직선 추가하기 (adding horizontal, vertical lines) (5)

이번 포스팅에서는 Python의 matplotlib 모듈을 사용해서 

 

  (1) 그래프에 수평선 추가하기 (adding horizontal lines)

  (2) 그래프에 수직선 추가하기 (adding vertical lines) 

 

하는 3가지 방법을 소개하겠습니다. 

 

예제로 사용할 샘플 데이터셋을 정규분포로부터 난수를 생성해서 100개 샘플을 추출하고, 점 그래프를 그려보겠습니다. 

이 기본 점 그래프에 수평선과 수직선을 차례대로 추가해보겠습니다. 

 

import numpy as np
import matplotlib.pyplot as plt

## generating random numbers
np.random.seed(1004)
x = np.random.normal(0, 1, 100)

## plotting the original data
plt.figure(figsize = (10, 6))
plt.plot(x, linestyle='none', marker='o', color='gray')
plt.show()

 

 

 (1) 그래프에 수평선 추가하기 (adding horizontal lines)

 

(a) plt.axhline(y, xmin, xmax) : 축을 따라서 수평선을 추가, xmin 과 xmax 는 0~1 사이의 값을 가짐

(b) plt.hlines(y, xmin, xmax) : xmin ~ xmax 까지 각 y 값의 수평선을 추가

(c) plt.plot((x1, x2), (y1, y2)) : (x1, x2), (y1, y2) 좌표를 연결하는 선 추가

 

(a) 번의 plt.axhline() 은 y축에서 부터 수평선이 시작하고, xmin~xmax 로 0~1 사이의 비율 값을 가지는 반면에, (b)번의 plt.hlines() 는 xmin 값 위치에서 부터 수평선이 시작하고, xmin~xmax 값으로 좌표값을 받는다는 차이점이 있습니다. 

(c) 번의 plt.plot() 은 단지 수평선, 수직선 뿐만이 아니라 범용적으로 두 좌표를 연결하는 선을 추가할 수 있습니다. 

 

plt.figure(figsize = (10, 6))
plt.plot(x, linestyle='none', marker='o', color='gray')
plt.title("Plot with Horizontal Lines", fontsize=16)

## (1) adding a horizontal line across the axis
## xmin and xmax should be b/w 0 and 1
plt.axhline(y=3, xmin=0, xmax=1, color='blue', linestyle='solid')
plt.axhline(y=2, xmin=0.1, xmax=0.9, color='blue', linestyle='dashed')

## (2) adding a horizontal line at each y from xmin to xmax
plt.hlines(y=0, xmin=0, xmax=50, color='red', linestyle='dotted')

## (3) adding a horizontal line using (x1, x2), (y1, y2) coordinates
plt.plot((50, 100), (-2, -2), color='black', linestyle='dashdot')

plt.show()

 

horizontal lines using matplotlib

 

 

(2) 그래프에 수직선 추가하기 (adding vertical lines) 

 

(a) plt.axvline(x, ymin, ymax) : 축을 따라서 수직선을 추가, ymin 과 ymax 는 0~1 사이의 값을 가짐

(b) plt.vlines(x, ymin, ymax) : ymin ~ ymax 까지 각 x 값의 수평선을 추가

(c) plt.plot((x1, x2), (y1, y2)) : (x1, x2), (y1, y2) 좌표를 연결하는 선 추가

 

(a) 번의 plt.axvline() 은 x축에서 부터 수평선이 시작하고, ymin~ymax 로 0~1 사이의 비율 값을 가지는 반면에, (b)번의 plt.vlines() 는 ymin 값 위치에서 부터 수평선이 시작하고, ymin~ymax 값으로 좌표값을 받는다는 차이점이 있습니다. 

(c) 번의 plt.plot() 은 단지 수평선, 수직선 뿐만이 아니라 범용적으로 두 좌표를 연결하는 선을 추가할 수 있습니다. 

 

plt.figure(figsize = (10, 6))
plt.plot(x, linestyle='none', marker='o', color='gray')
plt.title("Plot with vertical Lines", fontsize=16)

## (1) adding a vertical line across the axis
## ymin and ymax should be b/w 0 and 1
plt.axvline(x=0, ymin=0, ymax=1, color='blue', linestyle='solid')
plt.axvline(x=10, ymin=0.1, ymax=0.9, color='blue', linestyle='dashed')

## (2) adding a vertical line at each y from xmin to xmax
plt.vlines(x=50, ymin=0, ymax=3, color='red', linestyle='dotted')

## (3) adding a vertical line using (x1, x2), (y1, y2) coordinates
plt.plot((100, 100), (0, -3), color='black', linestyle='dashdot')

plt.show()

 

vertical lines using matplotlib

 

 

이번 포스팅이 많은 도움이 되었기를 바랍니다. 

행복한 데이터 과학자 되세요!  :-)

 

반응형
Posted by Rfriend

댓글을 달아 주세요

  1. gamma 2021.10.07 00:48 신고  댓글주소  수정/삭제  댓글쓰기

    범례를 표시하고 싶은데, 이리 저리 해봐도 범례가 표시되지 않는데,
    범례를 표시하는 방법이 있을까요?
    *아래 코딩으로 plot은 정상적으로 그려집니다.


    # """재배면적별_적합_부적합_농가수1"""로 이중축 차트

    재배면적별_적합_부적합_농가수1 <- as.data.frame(재배면적별_적합_부적합_농가수1)
    str(재배면적별_적합_부적합_농가수1)
    g1 <- ggplot2::ggplot(재배면적별_적합_부적합_농가수1, aes(x=재배면적), group=1) +
    geom_line(aes(y=Freq_적합), color = "blue", size = 2, group=1) +
    geom_line(aes(y=Freq_부적합), color = "black", size = 2, group=1) +

    # theme(legend.position = "topleft") +
    # theme(legend.title = element_text(face = "bold", size = 13, color = "darkblue")) +
    theme(legend.position = c(0.5, 0.5))
    g1

    max_ratio_적합vs부적합률 <- max(재배면적별_적합_부적합_농가수1$Freq_적합)/(max(재배면적별_적합_부적합_농가수1$부적합률))

    g2 <- g1 + geom_line(aes(y = 부적합률*max_ratio_적합vs부적합률*0.8), group=1, color="red") +
    scale_y_continuous(sec.axis = sec_axis(~./(max_ratio_적합vs부적합률), name="부적합률")) +
    ggtitle("< 적합(Blue), 부적합(Black) 농가수(좌측 y축) vs 부적합률(Red)(우측 y축) >")
    # ggplot2::theme(legend.position = "left")

    g2

    • Rfriend 2021.10.07 00:54 신고  댓글주소  수정/삭제

      https://rfriend.tistory.com/316 참고하세요.

      R 과 Python 카테고리가 따로 있습니다. R질문을 걔속 Python 포스팅한 글에 남기시고 았어요. >_<

  2. gamma 2021.10.07 00:51 신고  댓글주소  수정/삭제  댓글쓰기

    제가 전에 질문했던 것을 다시 볼려고 하는데 찾을 수가 없네요.
    https://rfriend.tistory.com//3, https://rfriend.tistory.com//648번 같았는데,
    가보니까 보이지 않는데, 찾을 수 있는 방법이 있을까요?