[R]Draw Mt. Fuji in R

はてなをみてたら、過去に静岡大学で出題されたという数学の問題がたくさんブックマークされていた。

f(x)= x^4-x^2+6 (|x| \leq 1), \frac{12}{(|x|+1)} (|x| > 1) \\  g(x)= \frac{1}{2} cos(2 \pi x) + \frac{7}{2}, (|x| <=2)

正しくグラフを描くと富士山が浮かびあがる。
現実逃避に R で書いてみた。

# normal R version

f <- function(x) {
  ifelse (abs(x) <= 1, (x ^ 4 - x ^ 2 + 6), 12 / (abs(x) + 1))
}

g <- function(x) {
  ifelse (abs(x) <= 2, (0.5 * cos( 2 * x * pi) + 7/2), NA)
}
plot(c(-8, 8), c(-4, 8), type='n', main='Mt. Fuji drawn in R')
curve(f, -6, 6, col = 'blue', lwd=2, add=1)
curve(g, -6, 6, col = 'blue', lwd=2, add=1)

# MEMO
“ifelse{base}Conditional Element Selection” を見つけるまで、if-else で分岐するプログラムを書いており、下のようなエラーメッセージ悩まされていた。
Warning message:
In if (abs(x) <= 1) { : the condition has length > 1 and only the first element will be used


# ggplot2 version

Of course, you can!

library(ggplot2)
f <- function(x) {
  ifelse (abs(x) <= 1, (x ^ 4 - x ^ 2 + 6), 12 / (abs(x) + 1))
}
g <- function(x) {
  ifelse (abs(x) <= 2, (0.5 * cos( 2 * x * pi) + 7/2), 12 / (abs(x) + 1))
}

p <-ggplot()+xlim(c(-8,8))+ylim(c(-4,8)) + opts(title='Mt. Fuji drawn with ggplot2', panel.background = theme_rect(fill='royalblue'))
p + stat_function(aes(y=0),  fun = f, geom='density', fill='white', color='white') +
    stat_function(aes(y=0),  fun = g, geom='density', fill='black', color='black')

# MEMO

  • stat_function 関数を初めて使ってみた。
  • iきれいに色を塗り分ける方法がわからず、デフォルト R バージョンの f/g 関数とは定義域によって挙動を変えてごまかしている。(白を塗ったあと、黒を重ねている)入れ子 ifelse とかも考えたのだけど、、、
Advertisements
Tagged with: , , , , ,
Posted in algorithm, R
One comment on “[R]Draw Mt. Fuji in R
  1. foo says:

    plot(c(-8, 8), c(-4, 8), type=’n’, main=’Mt. Fuji drawn in R’)
    x <- seq(-6, 6, length=101)
    f <- (abs(x) 1)*(12 / (abs(x) + 1))
    lines(x, f, col = ‘blue’, lwd=2)
    x <- seq(-2, 2, length=101)
    g <- 0.5 * cos( 2 * x * pi) + 7/2
    lines(x, g, col = 'blue', lwd=2)

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Archives
  • RT @__apf__: How to write a research paper: a guide for software engineers & practitioners. docs.google.com/presentation/d… /cc @inwyrd 4 months ago
  • RT @HayatoChiba: 昔、自然と対話しながら数学に打ち込んだら何かを悟れるのではと思いたち、専門書1つだけ持ってパワースポットで名高い奈良の山奥に1週間籠ったことがある。しかし泊まった民宿にドカベンが全巻揃っていたため、水島新司と対話しただけで1週間過ぎた。 それ… 5 months ago
  • RT @googlecloud: Ever wonder what underwater fiber optic internet cables look like? Look no further than this deep dive w/ @NatAndLo: https… 5 months ago
  • @ijin UTC+01:00 な時間帯で生活しています、、、 10 months ago
  • RT @mattcutts: Google's world-class Site Reliability Engineering team wrote a new book: amazon.com/Site-Reliabili… It's about managing produc… 1 year ago
%d bloggers like this: