반응형

vs.xlsx
다운로드

 

vital sign 파일은 위에 것을 사용하시거나,

원하는 엑셀 파일을 불러오십시오~

 

수치는 그냥 적당히 지어냈습니다.

아래에서 범위로 표시된 게 이완기~수축기 혈압, 

삼각형이 Oxygen saturation,

점모양이 Heart rate 입니다.

 

(미리 사족으로 말씀드리면,

R studio 사용 시 plotting 은 디스플레이 해상도가 어느 정도 되는 상황에서 그리는 걸 추천드립니다.

우측하단에 plot 창에서 미리 그래프가 그려지는데

해상도가 구리면 legend가 터무니 없이 크게 그려지거나 

그래프 테두리가 안그려지는 등 문제가 생기더라고요...

Export를 할 때도 말입니다!!

windows() 명령어로 해결할래면 새 창에 그려지긴 하는데

개인적으로는 가능하면 그냥 고해상도 환경에서 작업하시는 걸 권하고 싶습니다.)

 

일단 plot을 만들어봅니다.

 

plot(vs$time, vs$PR, ylim=c(40,160), pch=16, xlab = "Time(min.)", ylab = "")

arrows(vs$time, vs$SBP, vs$time, vs$DBP, code=3, length = 0.07, 

       angle=135)

points(vs$time, vs$SpO2, pch=6)

 

일단, 처음 plot 함수에 의해 x축과 y축이 결정됩니다.

(명령어 설명: x축 변수는 vs이라는 data에서 time이라는 열을 가져온다, y축 변수는 vs이라는 data에서 PR을 가져온다)

 

Y축 범위를 40~160으로 잡은 것은 추후 혈압을 나타내는 그래프도 저 바탕에 그려질 것이기 때문입니다

pch = 16은 heart rate의 기호를 R에서 미리 지정한 16번 기호로 하겠다는 것입니다.

이건 뭐 그때그때 찾아보시는 수 밖에. 엄청 자주 하시면 어느 정도 외우시겠죠.

 

 

xlab은 x축 라벨을 따옴표 안의 내용으로 하겠다는 것입니다. 

xlab, ylab을 지정하지 않으면 명령어의 열 이름으로 그대로 들어가는데 안이쁘겠죠? (e.g. vs$time이런 식으로 출력)

"Time(min.)"이나 "Time(sec.)" 등 원하시는대로 하십시오

ylab = ""로 해준 건 vs$PR이 안 예뻐서, 아예 나타나지 말고 빈 칸으로 나오라고 넣어줬습니다.

 

게다가 Y축에 BPM, mmHg, %라는 복합적 단위가 적용되는 것이므로,

한 가지만 labeling 하는 것도 상기 그래프에선 적당치 않습니다.

 

Arrows는 원래 화살표를 그리는 함수인데 혈압을 표시하는데 씁니다.

첫번째 x,y 좌표에서 두번째 x,y 좌표로 화살표를 긋는 명령어입니다.

code=3은 양쪽으로 arrowhead가 있는 화살표를 고른 것입니다.

length 0.07은 arrowhead 길이가 너무 길면 보기 안좋아서 좀 쳐준 겁니다. 

Angle 135도는 보통 바이탈 표시할 때 위쪽 SBP를 화살표 머리를 아래로,

아래쪽 DBP 화살표 머리를 위로 하기 때문에 들어갔습니다.

 

산소포화도는 points라는 함수를 통해 그리고, pch 6번을 활용했습니다.

 


 

뭐 이것만해도 충분한 vital sign graph일 수도 있겠지만

x축 tick 간격이 너무 잦아 다시 그리고 싶을 수 있죠

그럼 처음 plot에서 xaxt와 yaxt를 n으로 하여 새로 뽑읍시다.

 

plot(vs$time, vs$PR, ylim=c(40,160), pch=16, xlab = "Time(min.)", ylab = "",xaxt="n", yaxt="n")

arrows(vs$time, vs$SBP, vs$time, vs$DBP, code=3, length = 0.07, 

       angle=135)

points(vs$time, vs$SpO2, pch=6)

 

 

축이 비었으니 x축 y축 그려내는 명령어를 먹입니다.

 
 
# Changing x axis

 

xtick<-seq(0, 120, by=60)
axis(side=1, at=xtick, labels = FALSE)
text(x=xtick,  par("usr")[3], 
     labels = xtick, srt = 45, pos = 1, xpd = TRUE)
 
# Changing y axis

 

ytick<-seq(40, 140, by=20)
axis(side=2, at=ytick, labels = FALSE)
text(par("usr")[1], ytick,  
     labels = ytick, srt = 45, pos = 2, xpd = TRUE)

 

 

그럼 이제 '아, 대강 한 시간 지나서 이 정도 수치였다' 하고 활력 징후 보기는 편해지셨을 겁니다.

 

마무리로 수치 읽기를 편하게 하는 명령어 한 두개 더 쓰고 끝낼게요

 


#보조선 그리기

abline(h=seq(40,140,20), v=seq(0,120,30), col="gray", lty=3)

 

h : height 에 대한 보조선. 40~140mmHg의 범위에서 20mmHg마다 선 넣어달라

v : vertical 방향 보조선 0~120분 범위에서 30분마다 줄 그어달라.

보조선이 튀면 산만해져서 gray 색이 좋고, lty는 line type 고르는 거. 3번은 점선.

 

 

 



 

#범례

legend("topright", legend = c("NBP","HR",expression('SpO'[2])), pch=c(NA, 19, 6) )

 

범례 만들기는 포스팅 따로 했으니 참고하세요~

 

 

P.S. 많이 도와주신 ㄱㅎㅇ 선생님 감사드려요 ㅎㅎㅎ

반응형

'의료 > R Statistics' 카테고리의 다른 글

Vital sign 범례 그리기  (0) 2020.10.08
반응형

의학 논문을 낼 때

많은 분들이 vital sign을 그려낼 일이 있으실 겁니다. 

Vital sign의 범례(legend)를 그리는 법을 공유합니다.



legend("topright", legend = c("NBP","HR",expression('SpO'[2])), pch=c(NA, 19, 6) )


여기서 "topright" 부분에는 위치를 지정하는 것으로,

“bottomright”, “bottom”, “bottomleft”, “left”, “topleft”, “top”, “topright”, “right”, “center” 등이 가능합니다.


legend = c(... 에서는 범례에 들어갈 변수들을 열거합니다.

중간에 expression('SpO'[2]) 는 아래첨자를 꼭 넣고 싶어서

근데 뭐 과학적으로 엄밀할 필요가 없으면 꼭 아래첨자가 아니어도 되지 싶습니다.


pch = 는 범례 기호를 지정해줍니다.

NA는 비워 놓는 건데..

BP는 Arrows 함수로 그렸는데,

SBP-DBP의 범위를 표시하는 위아래 역방향 화살표가 당연하다면 당연할까,

기호 목록에 없는 거 같아서

저거는 그냥 그림판에서 그래프의 일부를 잘라서 붙여 만들었습니다.


더 좋은 방법이 있을지도 모르지요~~

반응형

'의료 > R Statistics' 카테고리의 다른 글

Vital sign(활력 징후) 그래프 그리기  (0) 2020.10.09

+ Recent posts