R heatmap com paleta de cores divergente

Eu estou tentando criar um mapa de calor simples em R, usando uma paleta de cores divergente. Eu quero usar um gradiente para que todos os números abaixo de um limite N sejam designados como uma cor (digamos, roxo), e todos os números acima do limite sejam designados por outra cor (digamos, laranja). Quanto mais longe o número estiver do limiar, mais escura a cor deve ser.

Aqui está um conjunto de dados de amostra:

Division,COL1,COL2,COL3,COL4,COL5,COL6,COL7
Division 1,31.9221884012222,75.8181694429368,97.0480443444103,96.295954938978,70.5677134916186,63.0451830103993,93.0396212730557
Division 2,85.7012346852571,29.0621076244861,16.9130333233625,94.6443660184741,19.9103083927184,61.9562198873609,72.3791105207056
Division 3,47.1665125340223,99.4153356179595,8.51091076619923,79.1276383213699,41.915355855599,7.45079894550145,24.6946100145578
Division 4,66.0743870772421,24.6163331903517,78.694460215047,42.04714265652,50.2694897353649,73.0409651994705,87.3745442833751
Division 5,29.6664374880493,35.4036891367286,19.2967326845974,5.48460693098605,32.4517334811389,15.5926876701415,76.0523204226047
Division 6,95.4969164915383,8.63230894319713,61.7535551078618,24.5590241160244,25.5453423131257,56.397921172902,44.4693325087428
Division 7,87.5015622004867,28.7770316936076,56.5095080062747,34.6680747810751,28.1923673115671,65.0204187724739,13.795713102445
Division 8,70.1077231671661,72.4712177179754,38.4903231170028,36.1821102909744,97.0875509083271,17.184783378616,78.2292529474944
Division 9,47.3570406902581,90.2257485780865,65.6037972308695,77.0234781783074,25.6294377148151,84.900529962033,82.5080851092935
Division 10,58.0811711959541,0.493217632174492,58.5604055318981,53.5780876874924,9.12552657537162,20.313960686326,78.1371118500829
Division 11,34.6708688884974,76.711881859228,22.6064443588257,22.1724311355501,5.48891355283558,79.1159523651004,56.8405059166253
Division 12,33.6812808644027,44.1363711375743,70.6362190190703,3.78900407813489,16.6075889021158,9.12654218263924,39.9711143691093

Aqui está um trecho simples para produzir um mapa de calor a partir dos dados acima

data <- read.csv("dataset.csv", sep=",")
row.names(data) <- data$Division
data <- data[,2:7]
data_matrix <- data.matrix(data) 
heatmap(data_matrix, Rowv=NA, Colv=NA, col = heat.colors(256), scale="column", margins=c(5,10))

Como posso modificar o código acima para produzir:

um gradiente de cor (laranja) para todos os números ACIMA 50 (mais escuro quanto mais o número for de 50)um gradiente de cor (roxo) para todos os números ABAIXO 50 (mais escuro quanto mais o número for de 50)É bom ter (mas opcional) gravar o valor numérico na célula da gradeÉ bom ter (mas opcional), use uma cor diferente para a célula da grade que é EXATAMENTE o número limite (50 neste caso)

[[Editar]]

Acabei de ver issopergunta sobre SO, o que parece ser muito parecido. A resposta usa ggplot (que não tenho experiência), e até agora não consegui adaptar a solução ggplot aos meus dados um pouco mais complicados.