質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

Q&A

1回答

5954閲覧

Rで等高線図を描きたい

col87

総合スコア4

R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

0グッド

0クリップ

投稿2020/01/13 13:40

編集2022/01/12 10:55

前提・実現したいこと

Rを用いて、等高線図を描きたいと思っています。
以下の3つの方法を試したのですが、何れも上手くいかず、何を修正すればよいのかわかりません。

以下の何れかの手法で等高線図を描く方法をご教示いただけませんでしょうか。

1.plotlyを用いる
2.geom_contour plotを用いる
3.akimaを用いて線形補間を行い、contourで描く

発生している問題・エラーメッセージ

1.plotlyを用いる
x,y軸だけしか表示されない。

2.geom_contour plotを用いる
以下のエラーが表示される。
stat_contour requires the following missing aesthetics: x, y, z

3.akimaを用いて線形補間を行い、contourで描く
以下のエラーが表示される。
Error in interp.old(x, y, z, xo, yo, ncp = 0, extrap = FALSE, duplicate = duplicate,     : Lengths of x, y, and z do not match

ソースコード

R
ソースコード

・plotlyを用いる

library(plotly)
p<- plot_ly(x=data$X,y=data$Y,z=data$z,type="contour")
p

・geom_contour plotを用いる

df<- data.frame(data$X,data$Y,data$Z)
p <- ggplot(df, aes(x=df$x, y=df$y, z=df$z)) +
stat_contour() +
scale_fill_distiller(palette = "Spectral", direction = -1)
p <- ggplotly(p)
p

・akimaを用いて、線形補間を行い、contourで描く

library(akima)
data("akima")
akima.T <- interp(data$X,data$Y,data$Z)
image(akima.T$x,akima.T$y,akima.T$z)
contour(akima.T$x,akima.T$y,akima.T$z,add=TRUE,levels = seq(0,3,by=0.05))

data
X Y Z
1 529.17 163.17 1.31
2 466.00 169.17 1.45
3 248.50 187.50 1.79
4 168.50 193.33 2.01
5 138.67 195.17 2.03
6 121.83 198.17 2.13
7 101.00 200.50 2.17
8 77.00 203.33 2.20
9 63.50 206.67 2.32
10 84.33 234.50 3.78
11 107.83 229.67 3.17
12 127.00 227.33 2.91
13 154.67 223.33 2.45
14 179.33 220.17 2.30
15 213.33 217.00 2.27
16 239.17 214.83 2.15
17 261.67 212.67 2.08
18 278.83 210.67 2.04
19 322.00 207.50 1.95
20 354.83 205.50 1.91
21 411.33 204.33 1.79
22 460.17 203.50 1.69
23 506.50 202.17 1.64
24 531.83 200.50 1.60
25 550.00 199.17 1.56
26 561.17 199.17 1.62
27 571.00 220.17 1.81
28 517.83 217.00 1.73
29 494.67 216.67 1.76
30 451.17 217.00 1.81
31 433.00 217.50 1.87
32 407.33 220.50 1.97
33 389.50 220.83 1.97
34 356.67 223.67 2.10
35 329.50 224.00 2.21
36 303.50 225.17 2.25
37 271.00 226.67 2.31
38 244.00 228.00 2.38
39 216.83 229.67 2.51
40 191.67 231.33 2.57
41 165.17 233.50 2.60
42 141.17 235.00 2.70
43 121.00 235.83 2.88
44 94.33 238.00 2.77
45 124.67 250.33 2.83
46 147.50 250.50 2.86
47 169.50 250.67 2.85
48 198.17 249.50 2.65
49 205.33 250.33 2.63
50 270.50 247.33 2.44
51 288.00 246.17 2.46
52 335.33 245.33 2.38
53 359.83 246.00 2.29
54 411.33 243.67 2.21
55 451.33 241.33 2.08
56 496.33 240.00 2.03
57 529.83 240.17 2.04
58 538.33 238.67 2.08
59 523.00 249.50 2.27
60 461.17 249.50 2.19

#試したこと
検索をかけて、色々試してみたのですが、新たなエラーが発生するばかりで何をしたら良いのか分からなくなってしまいました。

#追記
元データは全角英語Zで、Rでは半角英語Zを用いており、参照先に指示された記号がなかったためエラーが起きていたようです。
元データの方を半角英語Zに変更したところ、1.3の方はグラフが描けたため、とりあえず等高線を描くという目標は達することができました。
記号の使い方の間違いでお騒がせしました。

しかし、2.の方法については、以下のエラーが表示されてしまっている状態です。
Error: stat_contour requires the following missing aesthetics: z
一つだけ上手くいかないのが納得できず、解決方法があれば、ご教示いただけますと幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

p<- plot_ly(x=data$X,y=data$Y,z=data$z,type="contour")

とりあえず、z=data$zではダメでz=data$Zでしょうね。

投稿2020/01/13 18:53

KojiDoi

総合スコア13669

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

col87

2020/01/14 03:16

素早いご返信ありがとうございます。 とても初歩的な部分が誤っていたんですね…。 KojiDoi様のご指摘を受け、変更してみたのですが、やはりX,Y軸しか表示されませんでした。 X,Y全ての値に対してZの値(行列)が与えられていない事が原因となっているのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問