基本グラフィックのみを使用してスミス チャートを生成するコードを R で記述しました。プロット自体には満足していますが、コードを改善したいと考えています。特に、4 つのlapply
呼び出しについてはよくわかりません。ベース R で線のグループを描画するためのより直接的な方法があるはずです。
以下は、私が使用しているコードと、それが生成するプロットです。私はスタックオーバーフローを初めて使用するので、さらにコメントを含める必要があるか、追加情報を提供する必要があるかどうかをお知らせください。
#!/usr/bin/rscript --vanilla
filename='smith_chart.pdf'
pdf(filename, 6, 6)
# given z = r + jx, calculates complex number gamma = (z-1)/(z+1)
mapping <- function(r, x) {
z <- complex(real = r, imaginary = x); (z-1)/(z+1)}
complex_line <- function(a) {lines(Re(a), Im(a), lwd = 0.5)}
plot.new()
plot.window(c(-1, 1), c(-1, 1), asp = 1)
dd <- c(seq(-100, 100, 1), seq(-10, 10, 0.1), seq(-2, 2, 0.02))
dd <- round(dd, digits = 2)
dd <- sort(unique(dd))
smith_grid <- function (value, step) {
# applies conformal mapping to lines having contast r
r_grid <- lapply(seq(0, value, step),
FUN = function(r){mapping(r, dd[dd >= -value & dd <= value])})
# applies conformal mapping to lines having contast x
x_grid <- lapply(seq(-value, value, step),
FUN = function(x){mapping(dd[dd >= 0 & dd <= value], x)})
lapply(r_grid, FUN=complex_line)
lapply(x_grid, FUN=complex_line)
}
smith_grid(50, 10)
smith_grid(10, 1)
smith_grid(2, 0.2)
smith_grid(0.6, 0.1)
dev.off()