アプリ版:「スタンプのみでお礼する」機能のリリースについて

統計解析フリーソフトRを使って散布図を作成しています。
添付画像の青まる1と赤まる1、青まる1と黄まる1、
以下同様に各数字の青まると赤まる、青まると黄まるを線で結ぶ方法を模索しています。

作図した際のスクリプトは以下です。

s.dist<-dist(Dataset[2:17])
s.cmd<-cmdscale(s.dist)
P<-c(16,16,16)[unclass(Dataset[,18])]
C<-c("blue","red","orange")[unclass(Dataset[,18])]
plot(s.cmd,pch=P,col=C,xlim=c(-37,17), ylim=c(-13,13))
text(s.cmd, labels=Dataset[,19], pos=1, offset=.5, cex=.8)

Datasetの19行目が識別番号(1〜6)となっています。

希望している作図ができるのかどうかもわかりませんので、
その辺りもご指摘いただけると助かります。
また、情報が足りなかったり、質問ジャンルを間違えているようでしたら
重ねてご指摘ください。

よろしくお願いいたします。

「統計解析Rを使った作図」の質問画像

質問者からの補足コメント

  • うーん・・・

    現在、質問のに添付したデータが手元にないので、
    別のデータを基に作図し直しました。

    今回の作図スクリプトとデータを投稿します。

    s.dist <- dist(Dataset[2:15])
    s.cmd <- cmdscale(s.dist)
    P <- c(16,16,16)[unclass(Dataset[,16])]
    C <- C <- c("blue","red","orange")[unclass(Dataset[,16])]
    plot(s.cmd, pch=P, col=C)
    text(s.cmd, labels=Dataset[,17], pos=1, offset=.5, cex=.8)

      補足日時:2016/02/11 15:20
  • 文字数の関係で投稿できなかったので、データはこちらになります。

    name A B C D E F G H I J K L M N group no.
    d153 0.45 0.47 0.00 1.79 1.85 32.97 16.49 0.00 19.01 1.21 5.90 3.12 0.00 9.04 1 1
    d154 8.94 0.35 0.00 1.07 4.81 18.04 14.82 0.00 7.40 1.74 6.84 11.75 0.00 13.64 1 2
    d155 0.91 0.31 0.00 1.15 2.85 29.69 0.00 0.00 6.26 2.18 1.94 19.98 0.00 19.09 1 3

      補足日時:2016/02/11 15:22
  • d156 0.42 0.30 0.00 0.88 7.57 20.58 0.00 0.00 9.12 4.30 2.70 20.65 0.34 16.10 1 4
    d157 0.53 0.50 0.00 1.95 0.74 56.25 0.00 0.00 3.10 1.52 6.98 5.45 0.22 16.26 2 1
    d158 0.18 0.27 0.00 0.63 3.32 23.78 0.00 0.00 9.69 2.04 10.56 25.05 0.27 8.46 2 2
    d159 0.30 0.29 0.00 0.95 4.50 31.34 0.00 0.00 8.70 1.98 3.29 21.36 0.30 12.33 2 3

      補足日時:2016/02/11 15:22
  • d160 0.37 0.31 0.00 1.14 4.27 34.53 0.00 0.00 5.86 3.10 0.89 21.93 0.00 11.85 2 4
    d161 0.35 0.55 0.16 2.70 0.00 24.86 19.65 0.00 2.32 0.93 11.37 0.87 0.48 31.39 3 1
    d162 0.27 0.54 0.13 1.93 0.22 9.96 29.81 0.00 4.86 0.88 17.00 1.62 0.39 27.17 3 2
    d163 0.21 0.34 0.00 1.17 3.01 33.68 0.00 0.00 7.28 3.36 12.40 9.17 0.29 21.40 3 3

      補足日時:2016/02/11 15:22
  • d164 0.41 0.19 0.19 1.30 2.25 18.75 0.00 0.11 22.54 1.75 2.18 5.21 1.46 38.91 3 4

    その他、「こうしたい」という作図例です。
    今回投稿したスクリプトとデータを基に作図しました。
    図に記載されている線は「ペイント」で結びました。
    いざとなったら、このようなソフトで手書きすることになるのかもしれません。

    「統計解析Rを使った作図」の補足画像5
      補足日時:2016/02/11 15:26
  • ご提案いただいた

    for(n in 1:5){polygon(s.cmd[Dataset[,19]==n,1],s.smd[Dataset[,19]==n,2]])}

    をRスクリプトの最後に実行してみたのですが、
    「エラー:<text>」となってしまいました。

    関数(?)「polygon」で少し検索してみます。

    No.1の回答に寄せられた補足コメントです。 補足日時:2016/02/11 16:10
  • カンマ区切りのデータです。

    name,A,B,C,D,E,F,G,H,I,J,K,L,M,N,group,no.
    d153,0.45 ,0.47 ,0.00 ,1.79 ,1.85 ,32.97 ,16.49 ,0.00 ,19.01 ,1.21 ,5.90 ,3.12 ,0.00 ,9.04 ,1,1
    d154,8.94 ,0.35 ,0.00 ,1.07 ,4.81 ,18.04 ,14.82 ,0.00 ,7.40 ,1.74 ,6.84 ,11.75 ,0.00 ,13.64 ,1,2
    d155,0.91 ,0.31 ,0.00 ,1.15 ,2.85 ,29.69 ,0.00 ,0.00 ,6.26 ,2.18 ,1.94 ,19.98 ,0.00 ,19.09 ,1,3

      補足日時:2016/02/12 08:31
  • d156,0.42 ,0.30 ,0.00 ,0.88 ,7.57 ,20.58 ,0.00 ,0.00 ,9.12 ,4.30 ,2.70 ,20.65 ,0.34 ,16.10 ,1,4
    d157,0.53 ,0.50 ,0.00 ,1.95 ,0.74 ,56.25 ,0.00 ,0.00 ,3.10 ,1.52 ,6.98 ,5.45 ,0.22 ,16.26 ,2,1
    d158,0.18 ,0.27 ,0.00 ,0.63 ,3.32 ,23.78 ,0.00 ,0.00 ,9.69 ,2.04 ,10.56 ,25.05 ,0.27 ,8.46 ,2,2
    d159,0.30 ,0.29 ,0.00 ,0.95 ,4.50 ,31.34 ,0.00 ,0.00 ,8.70 ,1.98 ,3.29 ,21.36 ,0.30 ,12.33 ,2,3

      補足日時:2016/02/12 08:32
  • d160,0.37 ,0.31 ,0.00 ,1.14 ,4.27 ,34.53 ,0.00 ,0.00 ,5.86 ,3.10 ,0.89 ,21.93 ,0.00 ,11.85 ,2,4
    d161,0.35 ,0.55 ,0.16 ,2.70 ,0.00 ,24.86 ,19.65 ,0.00 ,2.32 ,0.93 ,11.37 ,0.87 ,0.48 ,31.39 ,3,1
    d162,0.27 ,0.54 ,0.13 ,1.93 ,0.22 ,9.96 ,29.81 ,0.00 ,4.86 ,0.88 ,17.00 ,1.62 ,0.39 ,27.17 ,3,2
    d163,0.21 ,0.34 ,0.00 ,1.17 ,3.01 ,33.68 ,0.00 ,0.00 ,7.28 ,3.36 ,12.40 ,9.17 ,0.29 ,21.40 ,3,3

      補足日時:2016/02/12 08:32
  • d164,0.41 ,0.19 ,0.19 ,1.30 ,2.25 ,18.75 ,0.00 ,0.11 ,22.54 ,1.75 ,2.18 ,5.21 ,1.46 ,38.91 ,3,4

    どうぞよろしくお願いいたします。

      補足日時:2016/02/12 08:33

A 回答 (4件)

#1です。



下記、追加部分を実行して下さい。
矢印の傘が不要ならarrowsの引数のlengthを=0にして下さい。

groupの番号ですが、色や線を振る順に並べた方がいいですよ。
今回は、ifelse(g==1,3,1)で対処しています。
問題が単純だから、これで対処しましたが、
複雑であれば、番号を振り直した方が早いです。

Dataset <- read.csv("Dataset.csv")
s.dist <- dist(Dataset[2:15])
s.cmd <- cmdscale(s.dist)
P <- c(16,16,16)[unclass(Dataset[,16])]
C <- c("blue","red","orange")[unclass(Dataset[,16])]
plot(s.cmd,pch=P,col=C)
text(s.cmd,labels=Dataset[,17],pos=4,offset=0.5,cex=0.8)
#
# 追加部分
#
for(n in 1:4){
for(g in 1:2){
start <- s.cmd[Dataset[,16]==g & Dataset[,17]==n,]
end <- s.cmd[Dataset[,16]==ifelse(g==1,3,1) & Dataset[,17]==n,]
arrows(start[1],start[2],end[1],end[2],code=2,length=0.1)
}}
    • good
    • 0
この回答へのお礼

ご教授いただきありがとうございます。

Rコマンダーでスクリプトを入力してみたところエラーが返されましたが、
R自体に入力したら矢印付きの作図が確認できました。

ありがとうございました。

重ねてお尋ねしますが、

for(n in 1:4){

こちらは1 groupのno.が4つ振られているからだと思いますが、

for(g in 1:2){

こちらの意味合いはどういったものなのでしょう…。

> 今回は、ifelse(g==1,3,1)で対処しています。
> 問題が単純だから、これで対処しましたが、

ほとんど専門ではないので、追加いただいたスクリプトを理解するのはなかなか難しいです。
実際のデータと照らし合わせて、理解できるものは解明してみたいと思います。

この度はご親切にお付き合いいただきありがとうございました。
とても感謝しております。

お礼日時:2016/02/13 11:45

#1,#2です。



スクリプトは簡単ですので、事例を示しますが、
入力データをカンマ区切りに直して、再投稿願います。
今の状態でもいいですが、こっちで直すのは、ちょっと面倒なので。
    • good
    • 0
この回答へのお礼

ご協力ありがとうございます。
カンマ区切りのデータを補足いたしました。

どうぞよろしくお願いいたします。

お礼日時:2016/02/12 08:35

#1です。



polygon() は多角形を描く関数ですので、
私の勘違いですから、以下を考えて下さい。

線を引くだけなら、
lines() か
arrows() を使います。

arrows は矢印を描きますが、傘の部分を無しにすることもできます。

私は、時系列グラフを線でどんどんつなぐときにlines()を、
今のような分析(例えば主成分分析)のサンプル間の関係
例えば、2013年→2014年→2015年と結ぶ時はarrows()を使います。
    • good
    • 0
この回答へのお礼

お付き合いいただきありがとうございます。

今回のような主座標や主成分分析の場合、プロットされる座標は作図されないと確認できない気がしています。

客観的に見て、「ペイントで線が引けるならそれでいいじゃん」と思われればそれまでなのですが、
作図に関していくつかヒントはいただけた気がしています。

もし、更なるご協力をいただけるようでしたら、
arrows()を含めたスクリプトをお教えいただけると助かります。
ですが、元々そこまで求めるようなサイトではないとも考えますので、
私自身は「もし、お付き合いいただけるのであれば」といった心情です。

ご協力、ありがとうございました。

お礼日時:2016/02/11 21:46

多次元尺度構成法を試したのですね。


であれば、数学のところで聴くのが良いと思います。

三角形を描くのですか?

polygon(x,y)

を使います。

for(n in 1:5){ # 6が欠損のため、5まで
polygon(s.cmd[Dataset[,19]==n,1],s.smd[Dataset[,19]==n,2]])
}

かなあ。(もしかすると、起点に戻れないかもしれない)
実際のデータが無いので検証できません。
また、Dataset[,19]がfactorなら、==n では動かないかもしれません。

あと、スクリプトの軸の指定と添付図はまったく違います。
この回答への補足あり
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

> 数学のところで聴くのが良いと思います。

ご指摘ありがとうございます。
適したジャンルに投稿できていたようで安心しました。
群集生物学(のつもり)だし、スクリプトの質問だったので、
どこに質問したらいいのか迷っていました。

> 三角形を描くのですか?

三角形というよりは、さくらんぼやアメリカンクラッカーのように結合させたいと考えています。

> スクリプトの軸の指定と添付図はまったく違います。

確かに。失礼いたしました。
コピペしたスクリプトと添付した画像を間違えました。

現在、手元には添付したファイルもデータもありませんので、
再度、データ作成いたしました。

補足にて、投稿させていただきます。

追記ですが、スクリプトって難しいですね。
回答いただけて、とても感謝しています。

お礼日時:2016/02/11 15:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!