- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想将第一个刻度与原点隔开,但也想用一条线连接它们。我想我可以附加一个 svg 来为我做这件事,但必须有一个更简单的方法,我在文档中丢失了。可以找到我的目标图像示例 here
这是我遇到的问题的示例:
var margin = {
top: 20,
right: 10,
bottom: 40,
left: 40
};
var padding = 20;
var height = 100;
var width = 400
var xAxisTimeScale = [];
for(var i = 8; i < 21; i++) {
xAxisTimeScale.push(i);
}
// scales
var xScale = d3.scaleLinear()
.domain([0, 12])
.range([padding, width - padding]);
var yScale = d3.scaleLinear()
.domain([0, 10])
.range([height, 0]);
function convertTimeToString(time) {
if(time > 12) {
return (time - 12) + "PM";
} else {
return time + "AM";
}
}
var xAxis = d3.axisBottom(xScale)
.ticks(13)
.tickFormat(function(d,i){ return convertTimeToString(xAxisTimeScale[i]);});
var yAxis = d3.axisLeft(yScale);
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 + ")");
// add axes
svg.append('g')
.call(yAxis);
svg.append('g')
.attr('transform', 'translate(0, ' + height + ')')
.call(xAxis);
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/4.6.0/d3.min.js"></script>
最佳答案
以下是我想出的方法:
将 x 轴的 path
的 d
属性更改为 'M0,0.5V0.5H'+(width-padding)
.相关代码改动:
svg.select('.x.axis path.domain').attr('d', function() {
return 'M0,0.5V0.5H'+(width-padding);
});
我是怎么想出 0.5
的?我分析了d3.js并遇到了用于创建 X 轴域的 V0.5
(在 d3-version3 中是 V0
。有关如何使用的更多详细信息路径已形成,查看 SVG path d attribute 。使用此偏移量,这是实现相同的代码片段:
var margin = {
top: 20,
right: 10,
bottom: 40,
left: 40
};
var padding = 20;
var height = 100;
var width = 400
var xAxisTimeScale = [];
for(var i = 8; i < 21; i++) {
xAxisTimeScale.push(i);
}
// scales
var xScale = d3.scaleLinear()
.domain([0, 12])
.range([padding, width - padding]);
var yScale = d3.scaleLinear()
.domain([0, 10])
.range([height, 0]);
function convertTimeToString(time) {
if(time > 12) {
return (time - 12) + "PM";
} else {
return time + "AM";
}
}
var xAxis = d3.axisBottom(xScale)
.ticks(13)
.tickFormat(function(d,i){ return convertTimeToString(xAxisTimeScale[i]);});
var yAxis = d3.axisLeft(yScale);
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 + ")");
// add axes
svg.append('g')
.call(yAxis);
svg.append('g').classed('x axis', true)
.attr('transform', 'translate(0, ' + height + ')')
.call(xAxis);
svg.select('.x.axis path.domain').attr('d', function() {
return 'M0,0.5V0.5H'+(width-padding);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/4.6.0/d3.min.js"></script>
使用简单的行代码从 X 轴的 origin 明确添加一条线到 start-point。相关代码改动:
svg.append('line').classed('connecting-line', true)
.attr('y1', height+0.5).attr('y2', height+0.5).attr('x1', 0).attr('x2', padding).style('stroke', '#000');
0.5
道理同上。其余属性仅基于高度和宽度。这是实现此功能的代码片段:
var margin = {
top: 20,
right: 10,
bottom: 40,
left: 40
};
var padding = 20;
var height = 100;
var width = 400
var xAxisTimeScale = [];
for(var i = 8; i < 21; i++) {
xAxisTimeScale.push(i);
}
// scales
var xScale = d3.scaleLinear()
.domain([0, 12])
.range([padding, width - padding]);
var yScale = d3.scaleLinear()
.domain([0, 10])
.range([height, 0]);
function convertTimeToString(time) {
if(time > 12) {
return (time - 12) + "PM";
} else {
return time + "AM";
}
}
var xAxis = d3.axisBottom(xScale)
.ticks(13)
.tickFormat(function(d,i){ return convertTimeToString(xAxisTimeScale[i]);});
var yAxis = d3.axisLeft(yScale);
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 + ")");
// add axes
svg.append('g')
.call(yAxis);
svg.append('g').classed('x axis', true)
.attr('transform', 'translate(0, ' + height + ')')
.call(xAxis);
svg.append('line').classed('connecting-line', true)
.attr('y1', height+0.5).attr('y2', height+0.5).attr('x1', 0).attr('x2', padding).style('stroke', '#000');
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/4.6.0/d3.min.js"></script>
添加一个叠加矩形作为框 或作为使用stroke-dasharray
样式化的矩形。但我认为这不会那么有用,因为它会有点压倒一切。
希望以上任何一种方法都能达到目的。我真的很抱歉没有按时回来(周五晚上让我):)
关于javascript - d3.js 将底部轴线延伸至原点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48027481/
我发现很多关于使用而不是关于定义 future 在 Dart 。假设我有 letsWait()这需要相当长的时间。如何使用 Future类(class)? import 'dart:async'; v
有什么区别: Class和 Class ? 谢谢 最佳答案 实际上是一样的 关于java - 反射java?延伸,我们在Stack Overflow上找到一个类似的问题: https://stacko
我想在下面的 jackson 反序列化中添加多个类。但我该怎么做呢?下面是示例代码。 XmlMapper mapper = new XmlMapper(); JaxbAnnotationModule
我正在使用 NetBeans 和 Glassfish 从现有 WSDL 构建 Web 服务。NetBeans 已从给定的 WSDL 创建了所需的类。WSDL 定义了一些基本数据类型(例如 BaseTy
我有一个获取这种类型参数的方法: NSArray 现在,当我获取此数组的一个元素时,我得到一个 ClassCastException。我的方法: public static List getWrapp
在使用泛型时,我遇到了声明 .如果我以集合接口(interface)的 addAll 方法为例。 它的声明是这样的: interface Collection { public b
我对集合中使用的通用通配符表示法有一些(违反直觉的)观察。通配符的目的 List是允许列表(T 的子类型)的赋值到“?”列表的引用的 T'。它的目的不是特别允许将 T 的子类型的元素添加到列表中( o
Closed. This question needs details or clarity。它当前不接受答案。 想改善这个问题吗?添加详细信息,并通过editing this post阐明问题。 2
你能帮我一个泛型吗?我有一个要求,我有一个 UI 表单,但根据类型,表单会完全更改。我为每种类型的表单创建了具有公共(public)字段的父 DTO 和子 DTO。使用 vaadin 进行验证。我该如
我有一个 list List generics; 我们如何对此进行排序?是否可以在 Comparator 实现上比较子类对象? 谢谢 最佳答案 参见Collections.sort ,其中T必须imp
尝试在 android 中创建一个内存游戏而不使用 xml 布局,本质上我现在想做的是在网格上的不同位置创建两张相同的卡片。所以我在这里问的是如何将这些卡片随机放置在网格上。我首先创建了随机整数数组,
所以我得到了一个接口(interface),其中我需要实现的一个方法为我提供了一个集合,并希望我将集合中的数据“全部添加”到我的对象中。我仍然不确定集合到底是什么。它是一个数组列表吗?我不相信它是,但
有没有办法强制最后一列延伸到 DataGrid WPF 的宽度? 因为在某些情况下,当 DataGrid 的宽度大于所有列的累积宽度时,DataGrid 的行为就像包含最后一个空列。 public
我在对象中有一个变量: private final Map bElementsToAdd = new HashMap<>(); 使用Builder模式中的方法我想完成这个 map 。 public B
这个问题已经有答案了: Can't add value to the Java collection with wildcard generic type (4 个回答) 已关闭 9 年前。 为什么我
我的问题正是我的标题所说的。 我有以下类(class) public class StoreItem { //Lots of irrelevant information! :) }
这个问题在这里已经有了答案: Why adding an element (of correct type) into a List through a method of is a compil
我正在准备 Java 期末考试。我遇到一道题,需要填空。 需要填空的相关代码 ____ ____ C {} ____ B extends ____ , C {} 问题是:我可以插入所有这些空白来编译我
我有一个.page 围绕着里面的所有内容。当内容延伸时,.page 也会延伸。 . 我的主要问题是 .leftBannerBackground 不使用 .page 扩展. 我能做些什么来调整 .l
有时,很多次我在文档中看到这种情况。这让我想知道要输入什么。有人可以用清晰的简化文字向我解释这句话的意思吗:D。这是怎么回事: ArrayList(Collection c) 最终被用作: new A
我是一名优秀的程序员,十分优秀!