2016-10-05 6 views
0

プロットに色を割り当てる関数が必要です。私はプロットするデータ点数が244で、データ点数1〜86は"coral1"、点数87〜160は"steelblue2"、点数161〜244は"steelblue4"とします。色を割り当てる関数(二変量データのRプロット)

sunflowerplot(x, y) 

色:私のデータポイントはベクトルとして示されている1つのxおよびつのY値を有するよう

はまた、私は、唯一の二変量データをプロットすることができgraphicsパッケージからsunflowerplotを使用しますこの場合、明らかにdata.frame(typmed5)から取り出せない第3の情報です - data=typmed5を追加すると機能しませんので、dfの追加情報を使用する関数を使用することはできません。このように:

cols <- character(nrow(typmed5)) 
    cols[typmed5[,1] == "meto"] <- "coral1"   
    cols[typmed5[,1] == "metT"] <- "steelblue2"  
    cols[typmed5[,1] == "meop"] <- "steelblue4" 

DFはこのようになります(nrow = 244):2〜5はx軸とyベクトルことになっている

 Typ bek_Med vst_Med verw_Med woe_Med color2 
    1 meto  2  3  2  5 coral1 
    2 meto  3  3  2  5 coral1 
    3 meto  3  3  3  4 coral1 
    4 meto  3  3  3  4 coral1 
    5 meto  2  3  3  3 coral1 
    6 meto  2  3  3  4 coral1 

私のコラムなので、持っている良いでしょうので、私は、いくつかのプロットを必要とします一般化可能なカラー関数 多くのありがとう

+0

うん、かなりの数の重複があります。私はそれが各データ点= 1花弁の間に対応する色で各データポイントをプロットすると思った。それで 'c(1,3、" meto ")は1つのサンゴ色の花びらを与え、" c(1,3、 "metT")はスチールブルー2色を与えます。しかし、 "どのような色がポイントですか?"あなたは花びらの中心(?)を意味し、それらを別々に定義します。私はエレガントではない解決策を見つけました。それぞれのサブセットに1つの色を定義し、3つのプロットを互いに重ねてプロットします。それはかなりうまくいく。 – jira

答えて

0

sunflowerplot(x, y)(1)ソート(xが優先)、(2)非花データ(重複データではない)、(3)花データを扱う。したがって、同じ方法でデータを処理した後、適切な色を得ることができます。

## example data 
typmed5 <- cbind(iris[,c(5,1:4)], rep(c("coral1", "steelblue2", "steelblue4"), each=50)) 
names(typmed5) <- c("Typ", "bek_Med", "vst_Med", "verw_Med", "woe_Med", "color2") 
typmed5[,-c(1, 6)] <- round(typmed5[,-c(1, 6)]) 
typmed5$color2 <- as.character(typmed5$color2) 


    ## (1) sort by x and y, (2) keep only flower data (duplicated data), (3) get colors 
petal.func <- function(x, y, df) { 
    temp <- df[order(df[,x], df[,y]),] 
    colv <- temp[duplicated(temp[,c(x, y)]) | duplicated(temp[,c(x, y)], fromLast=T),]$color2 
    return(as.character(colv)) 
} 

    ## use 
col.v <- petal.func("bek_Med", "vst_Med", typmed5) 

with(typmed5, sunflowerplot(bek_Med, vst_Med, seg.col = col.v)) 
legend("bottomright", levels(typmed5$Typ), lty=1, col=c("coral1", "steelblue2", "steelblue4"), bty="n") 

    ## to check 
with(typmed5, table(Typ, bek_Med, vst_Med))[,,1] # vst_Med = 2 data 
#    bek_Med 
# Typ   4 5 6 7 8 
# setosa  1 0 0 0 0 
# versicolor 0 4 9 0 0 
# virginica 0 1 3 1 0 

enter image description here

関連する問題