【R】ggplot:対応のあるデータの推移図 + 2つの座標点の角度を求める

対応のあるデータを線でつないで増減をみるグラフを作りたくなったのでメモ。

サンプルデータ


library(tidyverse)

ads <- data.frame(id=(1:5)
                  ,x=c(9,6,3,8,7)
                  ,y=c(5,1,2,4,1)
                  ,z=c(8,7,9,5,2))

ads2 <- data.frame()
for (i in (2:4)) {
  ads2 <- union_all(ads2
                   ,data.frame(id=ads[1]
                               ,param=rep(colnames(ads[i]),nrow(ads))
                               ,aval =c(ads[,i])))
}
ads2$param <- factor(ads2$param, level=c("x","y","z"))
ads2$id <- factor(ads2$id)


作図


ggplot(data=ads2, mapping=aes(x=param, y=aval, group=id, color=id)) +
  geom_vline(xintercept="x", lty=1) +
  geom_vline(xintercept="y", lty=1) +
  geom_vline(xintercept="z", lty=1) +
  geom_line(size=1.2) +
  annotate("text", x="x", y=ads2[ads2$param=="x","aval"]
           ,label=ads2[ads2$param=="x","id"], hjust=2, size=8) +
  labs(title="対応のあるデータの変化の推移", x="時期", y="値") +
  scale_x_discrete(labels=c("時期1","時期2","時期3")) +
  theme(plot.title  = element_text(size=20)
        ,axis.title = element_text(size=20)
        ,axis.text  = element_text(size=20)
        ,legend.title = element_text(size=20)
        ,legend.text  = element_text(size=20)
        )


f:id:cochineal19:20210415003350p:plain:w500

2つの座標点の角度を求める


角度により増減の度合いを判断したいとする。
すると、コサインを知りたい。
弧度法による計算は次のとおり。atan2(アークタンジェント2)関数を用いる。度数法への変換もできる。
atan2 - Wikipedia

 弧度法 : ラジアン = atan2(y, x)
 度数法 : 度 = ラジアン × 180 ÷ 円周率

> #-- ここでは、y=関心のある値の差、x=1として、yの違いを角度で表す。
> ads$ラジアンxy <- atan2(y = ads$y - ads$x, x = 1)
> ads$度xy <- ads$ラジアンxy * 180 / pi
> 
> ads$ラジアンyz <- atan2(y = ads$z - ads$y, x = 1)
> ads$度yz <- ads$ラジアンyz * 180 / pi
> ads
 
  id x y z ラジアンxy      度xy ラジアンyz     度yz
1  1 9 5 8 -1.3258177 -75.96376  1.2490458 71.56505
2  2 6 1 7 -1.3734008 -78.69007  1.4056476 80.53768
3  3 3 2 9 -0.7853982 -45.00000  1.4288993 81.86990
4  4 8 4 5 -1.3258177 -75.96376  0.7853982 45.00000
5  5 7 1 2 -1.4056476 -80.53768  0.7853982 45.00000
本ブログは個人メモです。 本ブログの内容によって生じた損害等の一切の責任を負いかねますのでご了承ください。