Edit in JSFiddle

/*
    simplification of a larger scheme to generate life zones for a game
*/

    'use strict';
var grid = [];
var _width = 75;
var _height = 100;
var _climate = [
    'deep sea',
    'sea',
    'shallow sea',
    'ice',
    'polar',
    'tundra',
    'taiga',
    'savannah',
    'shrubland',
    'forest',
    'swamp',
    'desert',
    'plains',
    'seasonal forest',
    'rain forest',
    'mountain',
    'snowy mountain']

window.run = function (land) {
    var grid = geography();
    var b = document.getElementById("island");
    b.innerHTML = '';
    b.style.display = 'inline-block';
    for (var x = 0; x < grid.length; x++) {
        var e = document.createElement('div');
        for (var y = 0; y < grid[0].length; y++) {
            var d = document.createElement('div');
            d.style.fontSize = '8px';
            var n = grid[x][y];
            d.dataset.height = n.height;
            d.dataset.temp = n.temp;
            d.dataset.rain = n.rain;
            d.dataset.climate = _climate[n.climate]

            switch (n.climate) {
                case 0:
                    d.style.backgroundColor = '#00198a';
                    break;
                case 1:
                    d.style.backgroundColor = '#142ea6';
                    break;
                case 2:
                    d.style.backgroundColor = '#2743c2';
                    break;
                case 3:
                    d.style.backgroundColor = '#fff';
                    break;
                case 4:
                    d.style.backgroundColor = '#eee';
                    break;
                case 5:
                    d.style.backgroundColor = '#ccdbc3';
                    break;
                case 6:
                    d.style.backgroundColor = '#c3dadb';
                    break;
                case 7:
                    d.style.backgroundColor = '#d3de00';
                    break;
                case 8:
                    d.style.backgroundColor = '#8ee600';
                    break;
                case 9:
                    d.style.backgroundColor = '#33b500';
                    break;
                case 10:
                    //nothing...
                    d.style.backgroundColor = '#eee';
                    break;
                case 11:
                    d.style.backgroundColor = '#ffbf00';
                    break;
                case 12:
                    d.style.backgroundColor = '#d4ff00';
                    break;
                case 13:
                    d.style.backgroundColor = '#00a300';
                    break;
                case 14:
                    d.style.backgroundColor = '#006900';
                    break;
                case 15:
                    d.style.backgroundColor = '#333';
                    break;
                case 16:
                    d.style.backgroundColor = '#aaa';
                    break;
            }

            d.innerHtml = '&nbps;'
            d.style.width = '5px';
            d.style.height = '5px';
            d.style.float = 'left'
            e.appendChild(d);
        }
        b.appendChild(e);
        //b.innerHtml += '<br>'
    }
}

    function geography() {
        var a = height();
        var p = rain();
        var t = heat();

        var grid = [];
        for (var x = 0; x < a.length; x++) {
            grid[x] = [];
            for (var y = 0; y < a[x].length; y++) {
                grid[x][y] = {
                    climate: climate(t[x][y], p[x][y], a[x][y]),
                    temp: t[x][y] - ~~(a[x][y] * 0.00065),
                    height: a[x][y],
                    rain: p[x][y]
                }
            }
        }

        return grid;
    }
    //temp, precip, alt
    function climate(t, p, a) {
        // water
        if (a < -6000) return 0; //deep sea
        if (a < -750 && t < -5) return 3; //ice
        if (a < -1250) return 1; //sea
        if (a < 0 && t < 0) return 3; //ice
        if (a < 0) return 2; //shallow sea

        //mountains
        if (a > 7500 && p > 4000 && t < 5) return 16; //snowy mountain
        if (a > 7500 && p > 0) return 15; //mountain

        // colder climates. trees struggle under 7c ,taiga's and tundra's. 
        // taiga's are wetter and support coniferious forests
        if (t < 7 && t >= 2 && p > 5000) return 6; //taiga
        if (t < -5) return 4; //polar
        if (t < 0) return 5; //tundra

        //hot climates, various levels of wetness
        if (t > 20 && p > 12000) return 14; // rain forest
        if (t > 20 && p > 8000) return 13; // seasonal forest
        if (t > 20 && p > 4000) return 12; // plains
        if (t > 20 && p > 0) return 11; // desert

        //moderate climates
        if (p > 9000) return 9; //forest
        if (p > 4500) return 8; //sprubland
        if (p > 0) return 7; //savannap
    }

    function heat() {
        var n = noise();
        var grid = [];
        for (var x = 0; x < _width; x++) {
            grid[x] = [];
            for (var y = 0; y < _height; y++) {
                var a = 1 - (Math.abs(_height / 2 - x) / (_height / 1.1));
                grid[x][y] = a * n[x][y];
            }
        }
        return normalizeHeat(grid);
    }

    function rain() {
        return normalizeRain(noise());
    }

    function height() {
        var r = radial();
        var n = noise();
        var grid = [];
        for (var x = 0; x < r.length; x++) {
            grid[x] = [];
            for (var y = 0; y < r[x].length; y++) {
                var rn = r[x][y] * n[x][y] * 1.3
                grid[x][y] = (rn > 1) ? 1 : rn;
            }
        }

        return normalizeHeight(grid);
    }

    function normalizeHeight(grid) {
        var r = Math.random() * 0.6 + 1
        for (var x = 0; x < grid.length; x++) {
            for (var y = 0; y < grid[x].length; y++) {
                //between -10000 and 9000
                grid[x][y] = ~~ (((grid[x][y] * 19000) - 10000) * r)
            }
        }

        return grid;
    }


    function normalizeRain(grid) {
        var r = Math.random() * 0.2 + 0.8
        for (var x = 0; x < grid.length; x++) {
            for (var y = 0; y < grid[x].length; y++) {
                //between 100 and 16000
                grid[x][y] = ~~ (((grid[x][y] * 15900) + 100) * r)
            }
        }

        return grid;
    }


    function normalizeHeat(grid) {
        var r = Math.random() * 0.6 + 1
        for (var x = 0; x < grid.length; x++) {
            for (var y = 0; y < grid[x].length; y++) {
                //between -50 and 50
                grid[x][y] = ~~ (((grid[x][y] * 80) - 30) * r)
            }
        }

        return grid;
    }

    function noise() {
        var grid = [];
        var reps = 1
        var lvl = 0.0045;
        var simplex = new SimplexNoise({
            octaves: 20,
            persistence: 0.4
        });
        for (var x = 0; x < _width; x++) {
            grid[x] = [];
            for (var y = 0; y < _height; y++) {
                var fRds = _width / reps;
                var fNX = x / fRds;
                var fNY = y / fRds;
                var fRdx = fNX * 2 * Math.PI;
                var fRdy = fNY * 2 * Math.PI;
                var a = fRds * Math.sin(fRdx);
                var b = fRds * Math.cos(fRdx);
                var c = fRds * Math.sin(fRdy);
                var d = fRds * Math.cos(fRdy);
                grid[x][y] = 1.1 * simplex.noise(a * lvl, b * lvl, c * lvl, d * lvl);
            }
        }

        return grid;
    }

    function radial() {
        var grid = [];
        var _its = 2000;
        var _life = 20;
        var _edgex = _width * 0.15;
        var _edgey = _height * 0.15;
        var _blur1 = 0.85;
        var _blur2 = 0.77;

        for (var x = 0; x < _width; x++) {
            grid[x] = [];
            for (var y = 0; y < _height; y++) {
                grid[x][y] = 0;
            }
        }

        for (var i = 0; i < _its; i++) {
            var x = ~~ (Math.random() * (_width - (_edgex * 2)) + _edgex);
            var y = ~~ (Math.random() * (_height - (_edgey * 2)) + _edgey);

            for (var j = 0; j < _life; j++) {
                x += Math.round(Math.random() * 2 - 1);
                y += Math.round(Math.random() * 2 - 1);

                if (x < 1 || x > _width - 2 || y < 1 || y > _height - 2) continue;

                var hood = _next(x, y);

                for (var k = 0; k < hood.length; k++) {
                    if (grid[hood[k][0]][hood[k][1]] < grid[x][y]) {
                        x = hood[k][0];
                        y = hood[k][1];
                        continue;
                    }
                }

                grid[x][y]++;
            }
        }

        return _normalize(grid);

        function _range(min, max) {
            return~~ ((max - min) * Math.random() + min);
        }

        function _next(x, y) {
            var result = [];

            for (var a = -1; a <= 1; a++) {
                for (var b = -1; b <= 1; b++) {
                    if (a || b && (x + a >= 0 && x + a < _width && y + b >= 0 && y + b < _height)) {
                        result.push([x + a, y + b]);
                    }
                }
            }

            return _shuffle(result);
        };

        function _shuffle(o) { //v1.0
            for (var j, x, i = o.length; i; j = Math.floor(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
            return o;
        };

        function _normalize(grid) {
            var max = 0;
            var min = 10000000;
            for (var x = 0; x < grid.length; x++) {
                for (var y = 0; y < grid[0].length; y++) {
                    if (x == 0 || x == _width - 1 || y == 0 || y == _height - 1) grid[x][y] *= 0.77;
                    else if (x == 1 || x == _width - 2 || y == 1 || y == _height - 2) grid[x][y] *= 0.85;
                    var g = grid[x][y];
                    if (g > max) max = g;
                    if (g < min) min = g;
                }
            }

            for (var x = 0; x < grid.length; x++) {
                for (var y = 0; y < grid[0].length; y++) {
                    grid[x][y] = (grid[x][y] - min) / (max - min);
                }
            }
            return grid;
        }
    }

document.getElementById('island').addEventListener('mouseover', function (e) {
    document.getElementById('data').innerHTML = JSON.stringify(e.target.dataset);
    //console.log(e.target.dataset);
});

run();

function SimplexNoise(t){var e=t||{};e.rng=e.rng||Math,e.octaves=e.octaves||5,e.persistence=e.persistence||.2,e.level=t.level||.005,this.level=e.level;var n,r,o,i,s,a,f,h,l,u,c,M,v,p,g,d,m,b,q,S,w,x,N,k,D,G,R,j,y,T,z,A,B,C,E,F,H,I,J,K,L,O,P,Q,U,V,W,X,Y,Z,$,_,te,ee,ne,re,oe,ie,se,ae,fe,he,le,ue,ce,Me,ve,pe=.5*(Math.sqrt(3)-1),ge=(3-Math.sqrt(3))/6,de=2*ge-1,me=1/3,be=1/6,qe=(Math.sqrt(5)-1)/4,Se=(5-Math.sqrt(5))/20,we=2*Se,xe=3*Se,Ne=4*Se-1,ke=[[1,1,0],[-1,1,0],[1,-1,0],[-1,-1,0],[1,0,1],[-1,0,1],[1,0,-1],[-1,0,-1],[0,1,1],[0,-1,1],[0,1,-1],[0,-1,-1]],De=[[0,1,1,1],[0,1,1,-1],[0,1,-1,1],[0,1,-1,-1],[0,-1,1,1],[0,-1,1,-1],[0,-1,-1,1],[0,-1,-1,-1],[1,0,1,1],[1,0,1,-1],[1,0,-1,1],[1,0,-1,-1],[-1,0,1,1],[-1,0,1,-1],[-1,0,-1,1],[-1,0,-1,-1],[1,1,0,1],[1,1,0,-1],[1,-1,0,1],[1,-1,0,-1],[-1,1,0,1],[-1,1,0,-1],[-1,-1,0,1],[-1,-1,0,-1],[1,1,1,0],[1,1,-1,0],[1,-1,1,0],[1,-1,-1,0],[-1,1,1,0],[-1,1,-1,0],[-1,-1,1,0],[-1,-1,-1,0]],Ge=[[0,1,2,3],[0,1,3,2],[0,0,0,0],[0,2,3,1],[0,0,0,0],[0,0,0,0],[0,0,0,0],[1,2,3,0],[0,2,1,3],[0,0,0,0],[0,3,1,2],[0,3,2,1],[0,0,0,0],[0,0,0,0],[0,0,0,0],[1,3,2,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[1,2,0,3],[0,0,0,0],[1,3,0,2],[0,0,0,0],[0,0,0,0],[0,0,0,0],[2,3,0,1],[2,3,1,0],[1,0,2,3],[1,0,3,2],[0,0,0,0],[0,0,0,0],[0,0,0,0],[2,0,3,1],[0,0,0,0],[2,1,3,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[2,0,1,3],[0,0,0,0],[0,0,0,0],[0,0,0,0],[3,0,1,2],[3,0,2,1],[0,0,0,0],[3,1,2,0],[2,1,0,3],[0,0,0,0],[0,0,0,0],[0,0,0,0],[3,1,0,2],[0,0,0,0],[3,2,0,1],[3,2,1,0]],Re=Math,je=1,ye=.5,Te=function(){var t,e;ce=[],Me=[],ve=0;for(var n=0;je>n;n++)t=Math.pow(2,n),e=Math.pow(ye,n),ve+=e,ce.push(t),Me.push(e);ve=1/ve},ze=function(t,e,n){return t[0]*e+t[1]*n},Ae=function(t,e,n,r){return t[0]*e+t[1]*n+t[2]*r},Be=function(t,e,n,r,o){return t[0]*e+t[1]*n+t[2]*r+t[3]*o},Ce=function(){var t,e=[];for(t=0;256>t;t++)e[t]=Math.floor(256*Re.random());for(n=[],t=0;512>t;t++)n[t]=e[255&t]},Ee=function(t,e){return h=(t+e)*pe,c=Math.floor(t+h),M=Math.floor(e+h),g=(c+M)*ge,d=t-(c-g),m=e-(M-g),d>m?(S=1,w=0):(S=0,w=1),A=d-S+ge,B=m-w+ge,F=d+de,H=m+de,X=255&c,Y=255&M,oe=.5-d*d-m*m,0>oe?o=0:(oe*=oe,_=n[X+n[Y]]%12,o=oe*oe*ze(ke[_],d,m)),ie=.5-A*A-B*B,0>ie?i=0:(ie*=ie,te=n[X+S+n[Y+w]]%12,i=ie*ie*ze(ke[te],A,B)),se=.5-F*F-H*H,0>se?s=0:(se*=se,ee=n[X+1+n[Y+1]]%12,s=se*se*ze(ke[ee],F,H)),70*(o+i+s)},Fe=function(t,e,r){return h=(t+e+r)*me,c=Math.floor(t+h),M=Math.floor(e+h),v=Math.floor(r+h),g=(c+M+v)*be,d=t-(c-g),m=e-(M-g),b=r-(v-g),d>=m?m>=b?(S=1,w=0,x=0,k=1,D=1,G=0):d>=b?(S=1,w=0,x=0,k=1,D=0,G=1):(S=0,w=0,x=1,k=1,D=0,G=1):b>m?(S=0,w=0,x=1,k=0,D=1,G=1):b>d?(S=0,w=1,x=0,k=0,D=1,G=1):(S=0,w=1,x=0,k=1,D=1,G=0),A=d-S+be,B=m-w+be,C=b-x+be,F=d-k+me,H=m-D+me,I=b-G+me,K=d-.5,L=m-.5,O=b-.5,X=255&c,Y=255&M,Z=255&v,oe=.6-d*d-m*m-b*b,0>oe?o=0:(oe*=oe,_=n[X+n[Y+n[Z]]]%12,o=oe*oe*Ae(ke[_],d,m,b)),ie=.6-A*A-B*B-C*C,0>ie?i=0:(ie*=ie,te=n[X+S+n[Y+w+n[Z+x]]]%12,i=ie*ie*Ae(ke[te],A,B,C)),se=.6-F*F-H*H-I*I,0>se?s=0:(se*=se,ee=n[X+k+n[Y+D+n[Z+G]]]%12,s=se*se*Ae(ke[ee],F,H,I)),ae=.6-K*K-L*L-O*O,0>ae?a=0:(ae*=ae,ne=n[X+1+n[Y+1+n[Z+1]]]%12,a=ae*ae*Ae(ke[ne],K,L,O)),32*(o+i+s+a)},He=function(t,e,r,he){return h=(t+e+r+he)*qe,c=Math.floor(t+h),M=Math.floor(e+h),v=Math.floor(r+h),p=Math.floor(he+h),g=(c+M+v+p)*Se,d=t-(c-g),m=e-(M-g),b=r-(v-g),q=he-(p-g),l=0,d>m&&(l=32),d>b&&(l|=16),m>b&&(l|=8),d>q&&(l|=4),m>q&&(l|=2),b>q&&(l|=1),u=Ge[l],S=u[0]>=3?1:0,w=u[1]>=3?1:0,x=u[2]>=3?1:0,N=u[3]>=3?1:0,k=u[0]>=2?1:0,D=u[1]>=2?1:0,G=u[2]>=2?1:0,R=u[3]>=2?1:0,j=u[0]>=1?1:0,y=u[1]>=1?1:0,T=u[2]>=1?1:0,z=u[3]>=1?1:0,A=d-S+Se,B=m-w+Se,C=b-x+Se,E=q-N+Se,F=d-k+we,H=m-D+we,I=b-G+we,J=q-R+we,K=d-j+xe,L=m-y+xe,O=b-T+xe,P=q-z+xe,Q=d+Ne,U=m+Ne,V=b+Ne,W=q+Ne,X=255&c,Y=255&M,Z=255&v,$=255&p,oe=.6-d*d-m*m-b*b-q*q,0>oe?o=0:(oe*=oe,_=n[X+n[Y+n[Z+n[$]]]]%32,o=oe*oe*Be(De[_],d,m,b,q)),ie=.6-A*A-B*B-C*C-E*E,0>ie?i=0:(ie*=ie,te=n[X+S+n[Y+w+n[Z+x+n[$+N]]]]%32,i=ie*ie*Be(De[te],A,B,C,E)),se=.6-F*F-H*H-I*I-J*J,0>se?s=0:(se*=se,ee=n[X+k+n[Y+D+n[Z+G+n[$+R]]]]%32,s=se*se*Be(De[ee],F,H,I,J)),ae=.6-K*K-L*L-O*O-P*P,0>ae?a=0:(ae*=ae,ne=n[X+j+n[Y+y+n[Z+T+n[$+z]]]]%32,a=ae*ae*Be(De[ne],K,L,O,P)),fe=.6-Q*Q-U*U-V*V-W*W,0>fe?f=0:(fe*=fe,re=n[X+1+n[Y+1+n[Z+1+n[$+1]]]]%32,f=fe*fe*Be(De[re],Q,U,V,W)),27*(o+i+s+a+f)};this.noise=function(t,e,n,o){for(he=0,r=0;je>r;r++)switch(le=ce[r],ue=Me[r],arguments.length){case 4:he+=ue*He(le*t,le*e,le*n,le*o);break;case 3:he+=ue*Fe(le*t,le*e,le*n);break;default:he+=ue*Ee(le*t,le*e)}return.5*(he*ve+1)},this.noiseDetail=function(t,e){je=t||je,ye=e||ye,Te()},this.setRng=function(t){Re=t,Ce()},this.toString=function(){return"[object SimplexNoise "+je+" "+ye+"]"},this.getGrid=function(t,e){var n=[];e=e||t;for(var r=0;t>r;r++){n[r]=[];for(var o=0;e>o;o++)n[r][o]=this.noise*this.level}},this.getTileableGrid=function(){},Ce(),this.setRng(e.rng),this.noiseDetail(e.octaves,e.persistence,e.level)}"undefined"!=typeof define&&define([],function(){"use strict";return SimplexNoise});
<button type="button" onclick="run(false)">Another one!</button>
<br>
<br>
<div id="island"></div>
<div id="data">hover on the map to see details</div>