我正在嘗試創建一個曼哈頓的情節,類似於下面所看到的情節。到目前爲止,我所擁有的都是遵循的。有沒有一種方法可以創建具有子域的域的比例?
這就是我試圖創建:
這是我到目前爲止已經編寫了(笑):
有決定的兩個因素x
點的位置。 (1)染色體指數範圍從[1, 22]
,(2)位置座標範圍從[1, 10,000,000]
。染色體指數越大,位置座標越大。
現在的問題是:如何設置位置座標的域,以便像第一張圖片中所示的那樣將點保留在染色體索引邊界內。
下面是一些相關的代碼:
var x0 = d3.scale.linear().range([0, width]),
x1 = d3.scale.linear().range([0, width]),
y = d3.scale.linear().range([height, 0]),
xAxis = d3.svg.axis().scale(x0).orient("bottom"),
yAxis = d3.svg.axis().scale(y).orient("left").tickPadding(6),
color = d3.scale.category20c();
var positions = [],
pvalues = [];
this.data.forEach(function (d) {
d.values.forEach(function (v) {
positions.push(v.position);
pvalues.push(v.pvalue);
});
});
var xMax = d3.max(positions),
ymax = d3.max(pvalues);
x0.domain([1, 22]);
x1.domain([0, xMax]);
y.domain([0, ymax]);
svg.append("g")
.attr("class", "x axis")
.attr("transform", "translate(0," + height + ")")
.call(xAxis);
svg.append("g")
.attr("class", "y axis")
.call(yAxis)
.append("text")
.attr("class", "label")
.attr("transform", "rotate(-90)")
.attr("y", 8)
.attr("dy", ".71em")
.style("text-anchor", "end")
.text("p-value");
var chromosome = svg.selectAll(".chr")
.data(this.data)
.enter().append("g")
.attr("class", "chr")
.attr("x", function (d) {
return x0(d.chr);
})
.attr("width", width/22)
.style("fill", function (d) {
return color(d.chr);
});
chromosome.selectAll("circle")
.data(function (d) {
return d.values;
})
.enter().append("circle")
.attr("r", 3)
.attr("cx", function (d) {
return x1(d.position);
})
.attr("cy", function (d) {
return y(d.pvalue);
});
更新:所以我切換到下面的grouped barchart example使用d3.scale.ordinal()
兩個x
尺度。我想我接近了,但現在,我應該如何防止在同一個x
的位置上畫點?
數據格式:
this.data
:
[
{
chr: 1,
values: [
{
snp: rs182799,
position: 1478180,
pvalue: 3.26E-05
},
{
snp: rs182349,
position: 1598180,
pvalue: 3.26E-05
},
...
]
},
chr: 2,
values: [
{
snp: rs199799,
position: 2678180,
pvalue: 3.26E-05
},
{
snp: rs182349,
position: 2998180,
pvalue: 3.26E-05
},
...
]
},
...
]
我已經使用示例數據更新了帖子。 –
如果將'xAxis = d3.svg.axis()。scale(x0)'更改爲'xAxis = d3.svg.axis()。scale(x1)'?會發生什麼? – Joey
這隻會改變可見軸。我認爲這與規模領域以及價值觀如何映射到這個領域沒有任何關係。 –