Lens Experiment

Author

waterfirst

실험 설명

MLA에650nm 레이져를 통과시킨 후 초점거리를 달리하여 투과율 측정한 내용을 시각화함

실험 결과

  • 패키지불러오기
Code
rm(list=ls())

library(tidyverse)
library(tidyr)
library(lubridate)  #helps wrangle date attributes
library(data.table) #for loading and mapping data
library(htmlwidgets)
library(plotly)
library(patchwork)
library(stringr)
  • 폴더에 있는 여러 csv 파일 불러오기
Code
dir <- getwd()

## 여러 csv 파일 불러오기 
path <- paste0(dir, "./data/")  ## Working directory setting

list.files(path) ## file list
[1] "z_50_650.csv" "z_53_650.csv" "z_56_650.csv"
Code
file_list<-list.files(path,pattern = "csv") ## file list
file_list
[1] "z_50_650.csv" "z_53_650.csv" "z_56_650.csv"
Code
for (i in 1:length(file_list)){
  print(i)
  assign(paste0(substr(file_list[i], 1, 8)),
         read_csv(paste0(path,file_list[i]), skip = 1, col_names = F))

}
[1] 1
[1] 2
[1] 3
  • Poltly 로 3d 그래프로 보기
Code
fig <- plot_ly(showscale = FALSE)

fig <- fig %>% add_surface(z = ~ as.matrix(z_50_650))
fig <- fig %>% add_surface(z = ~as.matrix(z_53_650+20), opacity = 0.7)
fig<- fig %>% add_surface(z = ~as.matrix(z_56_650+40), opacity = 0.7)


fig
  • 3d 그래프 html로 저장하기
Code
saveWidget(ggplotly(fig), file = "myplot.html")

2D 이미지로 그리기

  • 패키지 불러오기/ 그래프 지우고 초기화 하기
Code
require(akima)
require(rgl)


plot.new()
frame()

Code
options(warn=-1) # 경고메세지 무시하기

par("mar")
[1] 5.1 4.1 4.1 2.1
Code
par(mar = c(1,1,1,1))
par(fg = NA,col="black")

dev.off()
null device 
          1 
  • 한개만 그래프 그리기
Code
#| echo = T

tdn<-c(1:nrow(z_50_650))
rdn<-c(1:ncol(z_50_650))


filled.contour(x=tdn,
               y=rdn,
               z=as.matrix(z_50_650),
               color.palette=colorRampPalette(c("blue","yellow","red")),
               plot.title=title(main=paste0("Transmittance as wavelength, λ = 650nm") , sub="Z = 5.0, 5.3, 5.6mm",
                                xlab="", ylab=""),
               nlevels=50,
               plot.axes = { axis(side = 1, at = tdn, labels = tdn, col.lab="white")
                 axis(side = 2, at = rdn, labels = rdn, col.lab="white") },
               key.title=title(main="T(%)"),
               key.axes = axis(4, seq(0, 8, by = 0.1)))

Code
png(paste0(dir,"/images/",  substr(file_list[i], 1, 8), ".png"), pointsize=10, width=3800, height=3400, res=600)
  • 3개 그래프 연속으로 그리기
Code
for (i in c(1:3)){

  filled.contour(x=tdn,
                   y=rdn,
                   z=as.matrix(eval(parse(text=paste0("z_", 47+3*i, "_650")))),
  color.palette=colorRampPalette(c("blue","yellow","red")),
  plot.title=title(main=paste0("Transmittance as z, z=", substr(file_list[i], 3, 4), "mm") ,
                   sub= paste0("λ =",substr(file_list[i], 6, 8) ) ,
                   xlab="", ylab=""),
  nlevels=50,
  plot.axes = { axis(side = 1, at = tdn, labels = tdn, col.lab="white")
    axis(side = 2, at = rdn, labels = rdn, col.lab="white") },
  key.title=title(main="T(%)"),
  key.axes = axis(4, seq(0, 8, by = 0.1)))


  print(paste0("z_", 47+3*i, "_650"))
}

[1] "z_50_650"

[1] "z_53_650"

[1] "z_56_650"