Я пытаюсь перевернуть график в JS без изменения оси. JavaScript не является моей специальностью, и после поиска в Интернете в течение 4 часов я начинаю думать, что это невозможно. Может кто-нибудь указать мне в правильном направлении, пожалуйста?Зеркало d3 графа горизонтально в JavaScript/html
var width = 960,
height = 500;
d3.json("data2.json", function(error, heatmap) {
var dx = heatmap[0].length,
dy = heatmap.length;
// Fix the aspect ratio.
// var ka = dy/dx, kb = height/width;
// if (ka < kb) height = width * ka;
// else width = height/ka;
var x = d3.scale.linear()
.domain([0, dx])
.range([0, width]);
var y = d3.scale.linear()
.domain([0, dy])
.range([height, 0]);
var color = d3.scale.linear()
.domain([null, 0, 30, 60, 90, 120])
.range(["#FFFFFF", "#FF0000", "#FF9933", "#FFFF00", "#99FF33", "#00FF00"]);
var xAxis = d3.svg.axis()
.scale(x)
.orient("top")
.ticks(20);
var yAxis = d3.svg.axis()
.scale(y)
.orient("right");
d3.select("body").append("canvas")
.attr("width", dx)
.attr("height", dy)
.style("width", width + "px")
.style("height", height + "px")
.call(drawImage);
var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height);
svg.append("g")
.attr("class", "x axis")
.attr("transform", "translate(0," + height + ")")
.call(xAxis)
.call(removeZero);
svg.append("g")
.attr("class", "y axis")
.call(yAxis)
.call(removeZero);
function drawImage(canvas) {
var context = canvas.node().getContext("2d"),
image = context.createImageData(dx, dy);
for (var y = 0, p = -1; y < dy; ++y) {
for (var x = 0; x < dx; ++x) {
var c = d3.rgb(color(heatmap[y][x]));
image.data[++p] = c.r;
image.data[++p] = c.g;
image.data[++p] = c.b;
image.data[++p] = 255;
}
}
context.putImageData(image, 0, 0);
}
function removeZero(axis) {
axis.selectAll("g").filter(function(d) { return !d; }).remove();
}
});
Ввод и вывод графика будут довольно массивными, это научные данные. Мои единственные требования заключаются в следующем: - Вход и выход должны быть .json - Выход должен быть горизонтально зеркальным. (например, вверх становится вниз :)) - В будущем мы пытаемся сделать график интерактивным с помощью всплывающей подсказки, отображающей значение. В этом случае лучше выбрать «все-холст»? И что это лучший способ сделать это? – Camelaria
Если вы хотите, чтобы подсказки отображали вашу жизнь, разработчик будет намного проще, если вы визуализируете диаграмму с помощью SVG, так как отдельные элементы SVG имеют регулярное поведение наведения DOM. Чтобы получить тот же эффект на холсте, вам нужно будет вычислить относительную позицию мыши и, вероятно, столкнуться с проблемами кросс-браузера, чтобы распутать. – couchand
Кроме того, я считаю, что термин для зеркалирования при переключении вверх и вниз (то есть по горизонтальной оси), как правило, является зеркальным отражением по вертикали. http://ux.stackexchange.com/questions/18082/horizontal-and-vertical-flipping-mirroring – couchand