- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 D3.js 版本 4。我正在处理两个问题。首先,我通过 XMLHTPRequest 检索到数据,其中包含名称、标识该名称的数字,然后是数据。在我的 ajax 请求之后,它看起来像这样:
function initialize() {
var xhr = new XMLHttpRequest();
var url = "/get_daily";
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
var data = JSON.parse(xhr.response);
buildCard(data);
}
}
xhr.open('GET', url, true);
xhr.send();
}
[…]
0: {…}
daily_available: 73621931016302
daily_total: 74463845381120
daily_used: 841914364818
date: "11-30-2017"
__proto__: Object { … }
1: {…}
daily_available: 73620537623773
daily_total: 74463845381120
daily_used: 843307757347
date: "11-29-2017"
__proto__: Object { … }
2: {…}
daily_available: 73620626989231
daily_total: 74463845381120
daily_used: 843218391890
date: "11-28-2017"
__proto__: Object { … }
如何在图表上显示三行,每一行代表 daily_used、daily_total 和 daily_available?
另一个问题与 x 轴有关。下面是我的 xAxis 代码。
var xScale = d3.scaleTime()
.domain([
d3.min(dataset, function (d) {
return new Date(d.date.replace(/-/g, "/"));
}),
d3.max(dataset, function (d) {
return new Date(d.date.replace(/-/g, "/"));
})
])
.range([padding, w]);
var xAxis = d3.axisBottom()
.scale(xScale)
.ticks(dataset.length)
.tickFormat(formatTime);
但是日期对齐已关闭。第一个日期/刻度太靠近 y 轴,最后一个刻度的日期被剪掉。
非常感谢任何帮助。书籍和教程似乎总是有非常简单的示例和简单的数据。
最佳答案
这里有一个完整的解决方案和评论,希望它有用
var dataset = [
{
daily_available: 73621931016302,
daily_total: 74463845381120,
daily_used: 841914364818,
date: "11-30-2017"
},
{
daily_available: 73620537623773,
daily_total: 74463845381120,
daily_used: 843307757347,
date: "11-29-2017"
},
{
daily_available: 73620626989231,
daily_total: 74463845381120,
daily_used: 843218391890,
date: "11-28-2017"
}
];
// Size and margin
// You can change the values directly in an object
var margin = {top: 10, right: 50, bottom: 50, left: 100},
width = 500 - margin.left - margin.right,
height = 200 - margin.top - margin.bottom;
// you apply the scale from the size
var x = d3.scaleTime().range([0, width]);
var y = d3.scaleLinear().range([height, 0]);
// xDom
// With a scaleTime you use a Date
var xDom = [
d3.min(dataset, function (d) {
return new Date(d.date);
}),
d3.max(dataset, function (d) {
return new Date(d.date);
})
];
// yDom
// concat the value to retreive the max and min in the same array
var concat = []
dataset.forEach(function(d) {
concat.push(d.daily_available);
concat.push(d.daily_total);
});
var spacing = 1.05; // spacing, adjust the lines at the middle with a higher domain interval
var yDom = [
d3.min(concat) / spacing, // here, you can also put 0 or whatever to start at this one
d3.max(concat) * spacing
];
// apply domains
x.domain(xDom);
y.domain(yDom);
// init line daily_available
var line1 = d3.line()
.x(function(d) { return x(new Date(d.date)); })
.y(function(d) { return y(d.daily_available); });
// init line daily_total
var line2 = d3.line()
.x(function(d) { return x(new Date(d.date)); })
.y(function(d) { return y(d.daily_total); });
// oops, daily_used is out of screen :(
// so you will use a trick, add the lowest value to daily_used
// (i don't know if it's what you want)
var line3 = d3.line()
.x(function(d) { return x(new Date(d.date)); })
.y(function(d) { return y(d.daily_used + (d3.min(concat) / spacing)); }); // it's kind of magic :)
// Now, draw the svg
// append svg in the body
var svg = d3.select("body").append("svg")
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.append("g")
.attr("transform","translate(" + margin.left + "," + margin.top + ")");
// draw lines
// line1
svg.append("path")
.data([dataset])
.attr("class", "line")
.style("stroke", "green")
.attr("d", line1);
// line 2
svg.append("path")
.data([dataset])
.attr("class", "line")
.style("stroke", "blue")
.attr("d", line2);
// line 3
svg.append("path")
.data([dataset])
.attr("class", "line")
.style("stroke", "red")
.attr("d", line3);
// Add the x Axis
var formatTime = d3.timeFormat("%m/%d/%Y");
var axisBottom = d3.axisBottom(x).ticks(dataset.length-1).tickFormat(formatTime)
svg.append("g")
.attr("transform", "translate(0," + height + ")")
.call(axisBottom);
// Add the y Axis
var axisLeft = d3.axisLeft(y).ticks(5)
svg.append("g")
.call(axisLeft);
// And voila !
.line {
fill: none;
stroke: gray;
stroke-width: 0.5px;
}
<script src="https://d3js.org/d3.v4.min.js"></script>
注意:您可以使用 d3.request()
进行 ajax https://github.com/d3/d3/blob/master/API.md#requests-d3-request
关于javascript - D3.js v4.10 x 轴时间刻度和 XMLHttpRequest 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47611479/
如何使用 plot() 在 XY 图中绘制第二条线,以不同的比例(如本例(紫色线))? 第一行(红色)我的 R 代码是这样的: p <- sqlQuery(ch,"SELECT wl,param1 F
我正在寻找一种将折线图步骤设置为仅完整数字步骤的方法,例如 1,2,3,4,5..... 目前它看起来像这样: 这些是我的选择。我搜索了很多但找不到解决方案。 let options = {
我的问题是如何将 Y 轴刻度的间隔从 0.2 更改为 0.1?我已经尝试了一切,但我很困!帖子底部堆叠条形图的图片 dpi=600 #pixels per square inch A <- c(
有没有办法根据当前数据集在 D3 轴上动态设置 ticks。我遇到的问题是我的时间范围(x 轴)可能变化很大。对于一些数据集来说,它是几年的值(value),对于其他数据集来说是几个月,在某些情况下只
我已经使用默认参数创建了一个 dojo 蜘蛛图。我需要隐藏轴标签(刻度上的数据值,而不是轴标题)。 我已经尝试过'ticks: false',但是它不适用于蜘蛛图。 require(["dojo/_b
有没有一种简单的方法可以在绘图 Axis 上获得自定义缩放比例? 例如,semilogy 函数提供 {x, log10(y)} 缩放比例,这样就可以自动放大/缩小并自动调整刻度和标签。我想对 {x,
如何修改图形和图表的 y Axis 刻度?我想要这样的东西:my_figure.y_range.end = my_figure.y_range.end * 1.3 所以我想要更高一点的y轴。谢谢! 最
我正在尝试使用 recharts 添加图表一些货币的最新汇率。数据显示正确,但图表始终从 0 开始并略高于最大值。 图表是正确的,但它不需要从 0 开始,因为这样做,它几乎是一条线。 这是图表的图片:
我有一个 SWT Scale 小部件,我需要在刻度上的刻度上添加标签。 有没有办法做到这一点?也许在 slider 小部件上? 谢谢 最佳答案 这可能不是您所要求的,但您可以在 Scale 小部件旁边
这是一个从 .xlsx 文件中读取数据并利用 Plotly 库绘制气泡图的程序。这是 .xlsx 文件的原始数据: 1991 1992 1993 1994 1995
我这里有一个代码笔 - https://codepen.io/anon/pen/yvgJKB 我有一个简单的堆积条形图。 我想将其制作成一个组件,因此我需要传入值以使其可重用 x 缩放函数返回d.da
让我们看一个基本的演示折线图: jsfiddle $(function () { $('#container').highcharts({ //all the code there 我想强制
是否可以在 t-sql 中获得像 DateTime.Ticks 这样的 C# 内容? 感谢帮助 最佳答案 您不太可能从 SQL 中获得与 DateTime.Ticks 相同的精度,因为 SQL 不能以
我正在使用 Bokeh 生成散点图,每个 X 值具有不同的 Y 值。当 Bokeh 生成绘图时,它会根据绘制的值的数量自动填充 x 轴间距。我希望 x 轴上的所有值均匀分布,无论单个数据点的数量如何。
我使用下面的代码使用谷歌图表生成折线图 google.charts.load('current', {packages: ['corechart', 'line']});
我正在尝试在 d3 中构建堆积条形图。 这是我的 jsfiddle: http://jsfiddle.net/maneesha/gwjkgruk/4/ 我正在尝试修复它,使 y 轴从零开始。 我认为这
我有一个 d3 时间刻度图表。目前,轴刻度为每个数据对象呈现一个日期。例如,数据的范围可以是 1 天的数据、1 个月内 2 周的数据、5 个月的数据甚至更多。 理想情况下,我们希望显示带有周数的刻度,
当使用“Cassic”折线图时,我可以为 hAxis 分配刻度,还有这样的格式和标题: var options = { hAxis: { format:'h a', title
我的累积折线图没有正确构建 yScale。 给定要构建图表的数据: var data = [{ key: "Page view", values: [ ["2013-07-01 00:
在 y 轴上使用两个具有正常整数值的 DateAxisSeries(x 轴)我的 jqPlot 将 y 刻度呈现两次。 像这样: 2| 2| 1| 1| 0|_____________________
我是一名优秀的程序员,十分优秀!