からっぽのしょこ

読んだら書く!書いたら読む!読書読読書読書♪同じ事は二度調べ(たく)ない

R用ハロプロのメンバーカラー色見本

〇はじめに

 Rでカラーコードを指定する時用に作りました。単にカラーコード一覧として使ってもいいのですが、メンバーカラーを指定したら対応表からカラーコードを返す用のスクリプトも書きました。
 メンバーカラー相当のカラーコードはWikipediaを参考にしました。(現在追加中ベリキュー辺りまではまとめる予定です。)


〇Rで使える色コード表

・メンバーカラー,カラーコード変換

まずは対応表を読み込む。(csvファイル作成用の対応表は下に掲載しています。)

correspondence_table <- read.csv("hellocolors.csv", stringsAsFactors = FALSE) #Factor型にならず文字列型にするため
correspondence_table

#直接書き込むならこちら
member_color <- c("hotpink","kimidori","honey","royalblue","emeraldgreen","orange","lavender","seablule","purple","lightpink","lightporange","italianred","goldyellow","shiro","red","lightpink","blue","orange","lightblue","yellow","aquablue","hotpink","lightgreen","lightpurple","peach","ringo","lemon","grape","melon","mediumblue","orange","hotpink","pink","lime","italianred","orange","mediumblue","purple","yellow","turquoiseblue","royalblue","pink","green","purple","lightgreen","lightorange","lightblue","lightpurple","yellow","lightpink","emeraldgreen","peach","lightred")
web_color    <- c("","GreenYellow","","","","Orange","Plum","","Purple","","","","","","","","","Orange","","Gold","Aquamarine","hotpink","","Plum","Pink","Red","Yellow","Violet","Chartreuse","","Orange","","","","","","","","","","","","","","","","","","","","","","")
color_code   <- c("#E5007F","#ADFF2F","#FFF33F","#0233CB","#00B379","#FFA500","#DDA0DD","#56BED9","#800080","#F1D1D4","#F5B48C","#F31C3B","#FFDF00","#FFFFFF","#FF0000","#FF80FF","#0F2D9E","#FFA500","#007EC7","#FFD700","#7FFFD4","#FF69B4","#ACDD4D","#DDA0DD","#FFC0CB","#FF0000","#FFFF00","#EE82EE","#7FFF00","#0000CD","#FFA500","#E5007F","#FF99FF","#ACDD5D","#FF3333","#FF9902","#3366FF","#9966FF","#FFFF33","#02DCFF","#0402FD","#FC72EB","#099800","#6400B2","#BDF53A","#FD9556","#90F2FB","#E0ADFC","#FDEB3F","#FEC1BE","#1BC6AE","#FEB4F8","#FF6361")
correspondence_table <- data.frame(member_color = member_color, web_color = web_color, color_code = color_code, stringsAsFactors = FALSE)
correspondence_table

f:id:anemptyarchive:20181207162718p:plain
対応表
自分が欲しい色を指定する。(正確に!"honey"だったり"shiro","ringo"だったりするよ)

color1 <- c("honey", "royalblue", "emeraldgreen", "orange") #欲しいメンバーカラーを指定してね

対応表から検索して、Rで使える色コード返す。(R以外でももちろん使えます。)

tmp <- match(color1, correspondence_table$member_color)     #対応表から行番号を検索
color2 <- correspondence_table$color_code[tmp]              #検索した行番号からカラーコードを抽出
color2

f:id:anemptyarchive:20181207030456p:plain
カラーコード
返ってきた色を試しに見てみる。

barplot(rep(1, length(color2)), names = color2, col = color2)

f:id:anemptyarchive:20181207030842p:plain
色見本
以上です!

  • 試行錯誤の副産物1
tmp0 <- ""
for(i in 1:length(color1)){
  tmp1 <- subset(correspondence_table, member_color == color1[i], select = color_code) #subset()だと検索列と抽出列を別で選べて、完全一致&重複&データフレーム形式で返すよ
  tmp2 <- tmp1[1, 1]                                                                   #なのでtmp1[1,1]で指定するよ
  tmp0 <- c(tmp0, tmp2)
}
color2 <- tmp0[-1]
  • 試行錯誤の副産物2
tmp0 <- ""
for(i in 1:length(color1)){
  tmp1 <- grep(color1[i], correspondence_table$member_color) #grep()だと部分一致&重複で返すよ
  tmp2 <- correspondence_table$color_code[tmp1[1]]           #なので一応tmp1[1]で指定してるけど、1つ目が部分一致だったらダメ
  tmp0 <- c(tmp0, tmp2)
}
color2 <- tmp0[-1]

 

〇おわりに

 Excelではよくindex(match(),match())を使ってこういうことをしてたのでRでもやってみたくなったのですが、かなりの時間を取られてしまいました。そんなに難しい事してないのになぁ。使ったことのあったgrep(),subset()でもうまくいかず、match()に辿り着いた時の気持ちといったら、、、うまくいかなかったのはFactor型になってたからなのですけどね。一番時間を取られたのが、Excelでのテーブルのように行列名を検索して両方マッチする値を返そうと調べてたら、行名という言葉自体中々見つからなかったことですね。Rって行名を操作に使わないのかな??結果1列目で検索して3列目の同じ行の値を返すとなった訳ですが、段々そちらの方が素直な気もしてきました。Factorの件は、各関数を使う時に気を付けるべき点を記憶に残すのもそうですが、何か変な時に怪しいところを探す嗅覚を鍛えたいものです。経験ですね。
 
 対応表については、色自体の微調整をしたいのですが何を参考にしたものか悩んでいます。あとは名前で検索できるようにしたいですね。

 最後まで読んでいただきありがとうございました!またよろしくお願いします。

・対応表

member_color web_color color_code
hotpink #E5007F
kimidori GreenYellow #ADFF2F
honey #FFF33F
royalblue #0233CB
emeraldgreen #00B379
orange Orange #FFA500
lavender Plum #DDA0DD
seablule #56BED9
purple Purple #800080
lightpink #F1D1D4
lightporange #F5B48C
italianred #F31C3B
goldyellow #FFDF00
shiro #FFFFFF
red #FF0000
lightpink #FF80FF
blue #0F2D9E
orange Orange #FFA500
lightblue #007EC7
yellow Gold #FFD700
aquablue Aquamarine #7FFFD4
hotpink hotpink #FF69B4
lightgreen #ACDD4D
lightpurple Plum #DDA0DD
peach Pink #FFC0CB
ringo Red #FF0000
lemon Yellow #FFFF00
grape Violet #EE82EE
melon Chartreuse #7FFF00
mediumblue #0000CD
orange Orange #FFA500
hotpink #E5007F
pink #FF99FF
lime #ACDD5D
italianred #FF3333
orange #FF9902
mediumblue #3366FF
purple #9966FF
yellow #FFFF33
turquoiseblue #02DCFF
royalblue #0402FD
pink #FC72EB
green #099800
purple #6400B2
lightgreen #BDF53A
lightorange #FD9556
lightblue #90F2FB
lightpurple #E0ADFC
yellow #FDEB3F
lightpink #FEC1BE
emeraldgreen #1BC6AE
peach #FEB4F8
lightred #FF6361

(編集用メモ)="|"&A1&"|"&B1&"|"&C1&"|"