ShinyのRのプロットを使ってヒートマップのグリッドを印刷しようとしています。私は彼らにカスタムカラースケールを与えたいと思っていますが、私はそれをしたいとは思えません。私がプロットチャートを作成するときにcolors =オプションを使用すると、色を割り当てるために与えたzminとzmaxではなく、値の分布が使われているようです。ヒートマップの色がプロットしていません
私の例のコードでは、colors =オプションを使用して各プロットに同じcolorscale(colorScale)を与えることがわかります。これは、第1行、第2行、第4行のプロットのように、よく分散されたデータセットを持っているときに、私が期待する方法で動作します。
ただし、プロットのデータが非常に歪んでいる3行目では、縮尺が他のすべてのものと異なって見えることがあります。青と赤がありますが、中央の白をスキップします。
私の実際のコードでは、中央付近に大きな値があり、両端にいくつかの極端な値があるグラフの場合、大きな問題が発生しています。中間にある値を白で表示したい変更はありませんでしたが、代わりに紫色で、重要な値(極端な値)を選ぶのが難しくなりました。
カラーアサインメントを強制的に動作させる方法はありますか?
私はRでColorScaleのplotlyヒートマップと同様の問題に遭遇したおかげで、 クリフ
server.R
if (!require("pacman")) install.packages("pacman")
pacman::p_load(shiny,data.table,plotly)
colorScale <- colorRamp(c("darkblue","cornflowerblue","white","sandybrown","firebrick"))
nCodeNames <- c("a","b","c","d","e","f","g","h","i","j","k","l")
means = c(rnorm(600,0,2.5),runif(600,-5,5),runif(130,-4,-3.9),runif(70,4.5,5),rnorm(150,-3),rnorm(50,4),rnorm(180,-2.5),runif(20,4.93,4.98),runif(300,-4,3),rnorm(300,3.5))
dt <- data.table(age=rep(rep(c(11:20),times=20),times=12),composite=rep(rep(c(81:100),each=10),times=12),mean=means,n_code=rep(nCodeNames,each=200))
sub<-dt[n_code=="a"]
shinyServer(function(input, output) {
for(Ncode in nCodeNames){
local({
ncode = Ncode
output[[paste0("grid",ncode)]] <- renderPlotly({
sub <- dt[n_code == ncode]
p <- plot_ly(data=sub, x=~age, y=~composite, z=~mean, type="heatmap", zmin=-5,zmax=5,
colors = colorScale, colorbar=list(thickness="15"))%>%
layout(title=ncode,xaxis=list(type="category",tickvals=c(11,15,20)),yaxis=list(title="",ticks=""))
})
})
}
})
ui.R
if (!require("pacman")) install.packages("pacman")
pacman::p_load(shiny, plotly)
nCodeNames <- c("a","b","c","d","e","f","g","h","i","j","k","l")
shinyUI(navbarPage(
"E-N Matrics: Proportion of E-Code Resulting in each N-Code",
tabPanel("Grid",
lapply(c(1:4), function(i) fluidRow(
lapply(c(1:3), function(j) column(4, plotlyOutput(paste0("grid",nCodeNames[(i-1)*3+j]))))
))
#fluidRow(column(4,plotlyOutput(paste0("grid",nCodeNames[(1-1)*3+1]))),column(4,plotly))
)
))