2017-07-01 151 views
0

現在、カテゴリ軸を持つPlotlyヒートマップがあります。Plotlyヒートマップの色指定

This is what it looks like.

ヒートマップは、その対に割り当てられた整数値(ヒートマップ上にプロットされているものであるZ値)を有する個体の各ペアと、自身に対するグラフの個体をプロット(それは我々のペアのどれくらい公正に離れているかの尺度です)。現在、ヒートマップ上の色が自動的に割り当てられています。

残念ながら、私はこのようなヒートマップの配色をどのように指定するのかよく分かりません。各z値に使用される色を指定することは可能ですか?たとえば、1 =青、2 =赤、3 =緑などを設定できますか?

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

+1

ようこそ。 Rタグの上にカーソルを置いてください - コピー&ペーストを使って問題を再現できるa)minimal&b)再現可能な例を求めます。 1つを入力してください。ありがとう。 – lukeA

+0

ああ、私はそれを見ていない - まだここでかなり新しい。 – Arun

答えて

0

私はまったく同じ問題を抱えていましたが、私はいくつかの小さなハックでそれを理解することができました。この質問は答えを投稿するのに最も関連があるようです。今のところ、Plotlyは明示的に、つまりカテゴリ(離散)ヒートマップ値に正確な色を指定することはできません。これはthis githubの問題に記載されています。純粋なJSソリューションがそこにリンクされており、それをRで再現するのに時間がかかりました(Plotly 4.7.1を使用)。

最初に、すべてのデータを保持する1つのマトリックスの代わりに、1つのカテゴリごとに1つのマトリックスが必要です。それぞれは1とNAで埋められます。各マトリックスは同じサイズでなければなりません。いくつかのデータを作りましょう。

greenSeriesData <- matrix(c(1,1,NA,NA,1,NA,NA,NA,1), nrow = 3) 
redSeriesData <- matrix(c(NA,NA,1,1,NA,NA,NA,NA,NA), nrow = 3) 
blueSeriesData <- matrix(c(NA,NA,NA,NA,NA,1,1,1,NA), nrow = 3) 

各カテゴリについて、特定のカテゴリに別のdata.frame保持色を設定する必要があります。重要なのは、それらのdata.framesには、colnamesが必要ないということです。

greenColor <- data.frame(x = c(0,1), y = c("#63a803", "#63a803")) 
colnames(greenColor) <- NULL 

redColor <- data.frame(x = c(0,1), y = c("#a80b03", "#a80b03")) 
colnames(redColor) <- NULL 

blueColor <- data.frame(x = c(0,1), y = c("#035da8", "#035da8")) 
colnames(blueColor) <- NULL 

そして、あなたは別のトレースとして、各カテゴリを指定してプロットする準備が整いました:

plot_ly(
    type = "heatmap" 
) %>% add_trace(
    z = greenSeriesData, 
    colorscale = greenColor 
) %>% add_trace(
    z = redSeriesData, 
    colorscale = redColor 
) %>% add_trace(
    z = blueSeriesData, 
    colorscale = blueColor 
) 

あなたがさらに良く見えるように伝説を調整したい場合は、あなたがcolorbar引数を追加する必要があります各トレース:

plot_ly(
    type = "heatmap" 
) %>% add_trace(
    z = greenSeriesData, 
    colorscale = greenColor, 
    colorbar = list(
     len = 0.3, 
     y = 1, 
     yanchor = 'top', 
     title = 'Green series', 
     tickvals = '' 
    ) 
) %>% add_trace(
    z = redSeriesData, 
    colorscale = redColor, 
    colorbar = list(
     len = 0.3, 
     y = 1, 
     yanchor = 'top', 
     title = 'Red series', 
     tickvals = '' 
    ) 
) %>% add_trace(
    z = blueSeriesData, 
    colorscale = blueColor, 
    colorbar = list(
     len = 0.3, 
     y = 1, 
     yanchor = 'top', 
     title = 'Blue series', 
     tickvals = '' 
    ) 
) 
関連する問題