実際に必要なのは序数スケールだけです! あとは軸がやってくれます。
ここでチェックしてください。
基本的に私は変更しました:
x.domain(dimensions = d3.keys(cars[0]).filter(function(d) {
  return d != "name" && (y[d] = d3.scale.linear()
      .domain(d3.extent(cars, function(p) { return +p[d]; }))
      .range([h, 0]));
}));
に:
x.domain(dimensions = d3.keys(cars[0]).filter(function(d) {
    if(d === "name") return false;
    if(d === "colour") {
        y[d] = d3.scale.ordinal()
          .domain(cars.map(function(p) { return p[d]; }))
          .rangePoints([h, 0]);
    }
    else {
        y[d] = d3.scale.linear()
          .domain(d3.extent(cars, function(p) { return +p[d]; }))
          .range([h, 0]);
    }
    return true;
}));
そして、1 つの文字列値のカテゴリ列をデータに追加しました。どのプロパティが文字列値であるかをハードコーディングするのが少し面倒でした。