- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试制作一个简单的可视化列,其中矩形的高度由比例确定:
var heightScale = d3.scaleLinear()
.domain([150,2500])
.range([10,80]);
我的代码是这样的
var margins = {top:100, left:80, bottom:40, right:20};
var width = 950;
var height = 600;
var totalWidth = width+margins.left+margins.right;
var totalHeight = height+margins.top+margins.bottom;
var svg = d3.select('body')
.append('svg')
.attr('width', totalWidth)
.attr('height', totalHeight);
var graphGroup = svg.append("g")
.attr("transform", "translate(" + margins.left + "," + margins.top + ")");
var q12018Data = [{'fmc': 'UBS', 'value': 2308.78},
{'fmc': 'Fidelity', 'value': 976.76},
{'fmc': 'JP Morgan', 'value': 837.19},
{'fmc': 'Value Partners', 'value': 787.39},
{'fmc': 'BlackRock', 'value': 664.42},
{'fmc': 'Krane', 'value': 445.13},
{'fmc': 'Investec', 'value': 407.40},
{'fmc': 'Nikko', 'value': 356.07},
{'fmc': 'Yuanta', 'value': 202.71},
{'fmc': 'Cathay Securities Invest', 'value': 174.46}];
var q22018Data = [{'fmc': 'UBS', 'value': 2193.05},
{'fmc': 'BlackRock', 'value': 817.24},
{'fmc': 'Yuanta', 'value': 676.87},
{'fmc': 'Fubon', 'value': 660.11},
{'fmc': 'JP Morgan', 'value': 577.26},
{'fmc': 'Investec', 'value': 384.65},
{'fmc': 'Hang Seng', 'value': 289.92},
{'fmc': 'Cathay Securities Invest', 'value': 289.43},
{'fmc': 'Pictet', 'value': 232.74},
{'fmc': 'Nikko', 'value': 224.73}];
var q32018Data = [{'fmc': 'ChinaAMC', 'value': 1074},
{'fmc': 'Fubon', 'value': 466.32},
{'fmc': 'Heungkuk', 'value': 458.23},
{'fmc': 'BlackRock', 'value': 361.34},
{'fmc': 'UBS', 'value': 350.01},
{'fmc': 'CSOP', 'value': 263.60},
{'fmc': 'Legal & General', 'value': 218.79},
{'fmc': 'SSgA', 'value': 188.35},
{'fmc': 'Fidelity', 'value': 134.06},
{'fmc': 'Morgan Stanley', 'value': 112.70}];
var q42018Data = [{'fmc': 'ChinaAMC', 'value': 1994.02},
{'fmc': 'Fubon', 'value': 808.34},
{'fmc': 'Heungkuk', 'value': 676.26},
{'fmc': 'BlackRock', 'value': 668.64},
{'fmc': 'UBS', 'value': 595.27},
{'fmc': 'CSOP', 'value': 424.83},
{'fmc': 'Legal & General', 'value': 380.30},
{'fmc': 'SSgA', 'value': 366.85},
{'fmc': 'Fidelity', 'value': 285.09},
{'fmc': 'Morgan Stanley', 'value': 273.55}];
var q12019Data = [{'fmc': 'UBS', 'value': 938.23},
{'fmc': 'BlackRock', 'value': 474.45},
{'fmc': 'Yuanta', 'value': 385.32},
{'fmc': 'Fubon', 'value': 349.73},
{'fmc': 'JP Morgan', 'value': 246.86},
{'fmc': 'Investec', 'value': 235.12},
{'fmc': 'Hang Seng', 'value': 230.23},
{'fmc': 'Cathay Securities Invest', 'value': 220.02},
{'fmc': 'Pictet', 'value': 213.76},
{'fmc': 'Nikko', 'value': 190.73}];
var heightScale = d3.scaleLinear()
.domain([150,2500])
.range([10,80]);
var column = graphGroup.selectAll("g")
.data(q12018Data)
.enter().append("g");
column.append("rect")
.attr("width", 150)
.attr("height", function(d) {return heightScale(d.value)})
.attr('y', function(d,i) {
if (i!=0) {
var prevData = column.data()[i-1];
var prevHeight = heightScale(prevData.value);
var currentHeight = heightScale(d.value);
return prevHeight;
} else {
return 0;
}
})
.style('fill','gray');
column.append("text")
.attr("x", 75)
.attr('y', function(d,i) {
if (i!=0) {
var prevData = column.data()[i-1];
var prevHeight = heightScale(prevData.value);
var currentHeight = heightScale(d.value);
return prevHeight;
} else {
return 0;
}
})
.attr('text-anchor','middle')
.text(function(d) { return d.fmc; });
<!DOCTYPE html>
<meta charset="utf-8">
<style>
</style>
<body>
<script src="https://d3js.org/d3.v5.min.js"></script>
为什么我的前一个矩形的矩形高度计算不正确?结果在外观上应类似于堆叠条。虽然没有 y 比例尺,但我只想附加后续矩形,以便只有几像素的填充,比如 2 像素。
最佳答案
您没有求和这些值!您只是传递每个对象的单独值……您必须累积它们。
我们可以通过简单地声明两个初始值为零的计数器来做到这一点......
let counterRect = 0,
counterText = 0;
...我们稍后会增加,使用:
.attr('y', function(d, i) {
let previous = counterRect;
return (counterRect += heightScale(d.value), previous)
})
这是您进行更改后的代码(以及矩形的白色边框):
var margins = {
top: 100,
left: 80,
bottom: 40,
right: 20
};
var width = 950;
var height = 600;
var totalWidth = width + margins.left + margins.right;
var totalHeight = height + margins.top + margins.bottom;
var svg = d3.select('body')
.append('svg')
.attr('width', totalWidth)
.attr('height', totalHeight);
var graphGroup = svg.append("g")
.attr("transform", "translate(" + margins.left + "," + margins.top + ")");
var q12018Data = [{
'fmc': 'UBS',
'value': 2308.78
},
{
'fmc': 'Fidelity',
'value': 976.76
},
{
'fmc': 'JP Morgan',
'value': 837.19
},
{
'fmc': 'Value Partners',
'value': 787.39
},
{
'fmc': 'BlackRock',
'value': 664.42
},
{
'fmc': 'Krane',
'value': 445.13
},
{
'fmc': 'Investec',
'value': 407.40
},
{
'fmc': 'Nikko',
'value': 356.07
},
{
'fmc': 'Yuanta',
'value': 202.71
},
{
'fmc': 'Cathay Securities Invest',
'value': 174.46
}
];
var q22018Data = [{
'fmc': 'UBS',
'value': 2193.05
},
{
'fmc': 'BlackRock',
'value': 817.24
},
{
'fmc': 'Yuanta',
'value': 676.87
},
{
'fmc': 'Fubon',
'value': 660.11
},
{
'fmc': 'JP Morgan',
'value': 577.26
},
{
'fmc': 'Investec',
'value': 384.65
},
{
'fmc': 'Hang Seng',
'value': 289.92
},
{
'fmc': 'Cathay Securities Invest',
'value': 289.43
},
{
'fmc': 'Pictet',
'value': 232.74
},
{
'fmc': 'Nikko',
'value': 224.73
}
];
var q32018Data = [{
'fmc': 'ChinaAMC',
'value': 1074
},
{
'fmc': 'Fubon',
'value': 466.32
},
{
'fmc': 'Heungkuk',
'value': 458.23
},
{
'fmc': 'BlackRock',
'value': 361.34
},
{
'fmc': 'UBS',
'value': 350.01
},
{
'fmc': 'CSOP',
'value': 263.60
},
{
'fmc': 'Legal & General',
'value': 218.79
},
{
'fmc': 'SSgA',
'value': 188.35
},
{
'fmc': 'Fidelity',
'value': 134.06
},
{
'fmc': 'Morgan Stanley',
'value': 112.70
}
];
var q42018Data = [{
'fmc': 'ChinaAMC',
'value': 1994.02
},
{
'fmc': 'Fubon',
'value': 808.34
},
{
'fmc': 'Heungkuk',
'value': 676.26
},
{
'fmc': 'BlackRock',
'value': 668.64
},
{
'fmc': 'UBS',
'value': 595.27
},
{
'fmc': 'CSOP',
'value': 424.83
},
{
'fmc': 'Legal & General',
'value': 380.30
},
{
'fmc': 'SSgA',
'value': 366.85
},
{
'fmc': 'Fidelity',
'value': 285.09
},
{
'fmc': 'Morgan Stanley',
'value': 273.55
}
];
var q12019Data = [{
'fmc': 'UBS',
'value': 938.23
},
{
'fmc': 'BlackRock',
'value': 474.45
},
{
'fmc': 'Yuanta',
'value': 385.32
},
{
'fmc': 'Fubon',
'value': 349.73
},
{
'fmc': 'JP Morgan',
'value': 246.86
},
{
'fmc': 'Investec',
'value': 235.12
},
{
'fmc': 'Hang Seng',
'value': 230.23
},
{
'fmc': 'Cathay Securities Invest',
'value': 220.02
},
{
'fmc': 'Pictet',
'value': 213.76
},
{
'fmc': 'Nikko',
'value': 190.73
}
];
let counterRect = 0,
counterText = 0;
var heightScale = d3.scaleLinear()
.domain([150, 2500])
.range([10, 80]);
var column = graphGroup.selectAll("g")
.data(q12018Data)
.enter().append("g");
column.append("rect")
.attr("width", 150)
.attr("height", function(d) {
return heightScale(d.value)
})
.attr('y', function(d, i) {
let previous = counterRect;
return (counterRect += heightScale(d.value), previous)
})
.style('fill', 'gray')
.style("stroke", "white");
column.append("text")
.attr("x", 75)
.attr('y', function(d, i) {
let previous = counterText;
return (counterText += heightScale(d.value), previous + (heightScale(d.value)/2))
})
.attr("dominant-baseline", "central")
.attr('text-anchor', 'middle')
.text(function(d) {
return d.fmc;
});
<script src="https://d3js.org/d3.v5.min.js"></script>
关于javascript - 如何堆叠 rects 各自的前一个 rect 的高度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55718937/
我有下面的图表,它填充了显示器的宽度和高度。高度始终只比屏幕大一点,因此会出现滚动条以显示底部 20 像素左右。 有没有办法让 Kendo UI 显示 100%,而不是 105% 的高度? 在线示例:
这个问题在这里已经有了答案: Why doesn't height: 100% work to expand divs to the screen height? (12 个答案) 关闭 9 年前
此页面 ( http://purcraft.com/madeinla/) 有问题,我正在尝试使用 iframe 元素显示此页面的内容:( http://purcraft.com/madeinla/ho
我在一个父 div 中有 2 个子 div。 Child1 是标题,Child2 是正文。我希望将 Child 2 的高度设置为 Parent - Child1 的高度。 Child2 有内容,所以它
我正在尝试用图像填充窗口。我正在使用 CSS 来尝试解决这个问题,但我想知道是否有一种方法可以最大化图像的宽度/高度,直到所有空白区域都被填满,但又不会破坏质量。 .rel-img-co
这个问题在这里已经有了答案: How to make a div 100% height of the browser window (41 个回答) 关闭 8 年前。
这可能是一个新手问题,但是是否可以将 Sprite 图标添加到带有文本的标签中? 例如: labeltext .icon { width: 30px height: 30px;
我有 3 个 div,分别是 header、content 和 footer。页眉和页脚具有固定的高度,并且它们被设计为 float 在顶部和底部。我想要使用 jquery 自动计算中间的 con
我有一个外部 div,其指定的宽度/高度(以毫米为单位)。 (mm只是赋值,不用于渲染)。 里面有另一个 div,其实际宽度/高度(以 px 为单位)。 两个 div 可以具有不同的比例。 我想要做的
我正在为一个非常简单的画廊 webapp 进行布局排序,但是当我使用 HTML5 文档类型声明时,我的一些 div(100%)的高度会立即缩小,我不能似乎使用 CSS 将它们丰满起来。 我的 HTML
我正在为一个非常简单的画廊 webapp 进行布局排序,但是当我使用 HTML5 文档类型声明时,我的一些 div(100%)的高度会立即缩小,我不能似乎使用 CSS 将它们丰满起来。 我的 HTML
我想更改 UISearchBar。文本字段的高度和宽度。我的问题是如何更改 iphone 中 UISearchBar 中的 UiSearchbar 高度、宽度、颜色 和 Uitextfield 高度?
我想要两个宽度和高度均为 100% 的 div。我知道子 div 不会工作,因为父 div 没有特定的高度,但有没有办法解决这个问题? HTML: CSS: body
我有几个带有“priceText”类的 div,我试图实现如果 div.priceText 高度小于 100px,则隐藏 this div 中的图像。 我无法让它工作。我已成功隐藏所有 .priceT
我正在尝试从 Image 列中列出的图像中获取实际图像尺寸,并将其显示在 Image Size 列中。 我遇到的问题是,我只能获取第一张图片的大小,该图片会添加到 Image Size 列的每个单元格
我正在使用一个插件,它要求我在加载图像后获取图像的宽度和高度,而不管图像的尺寸是如何确定的。
我有一个示例 pdf(已附),它包括一个文本对象和一个高度几乎相同的矩形对象。然后我使用 itextrup 检查了 pdf 的内容,如下所示: 1 1 1 RG 1 1 1 rg 0.12 0 0 0
我是 WPF 新手。我试图解决的一个问题是如何在运行时获得正确的高度。 在我的应用程序中,我将用户控件动态添加到代码隐藏中的 Stackpanel。 Usercontrol 包含一些 Texblock
在自定义 WPF 控件中,我想将控件的宽度设置为高度的函数。例如:Width = Height/3 * x; 实现此目的的最佳方法是什么,以便控件正确且流畅地调整大小(和初始大小)? 最佳答案 您可以
好吧,我本以为这是一个简单的问题,但显然它让我感到困惑。 当我尝试设置 RibbonComboBox 的高度时,它不会移动它的实际大小,而是移动它周围的框。 这是我的 XAML:
我是一名优秀的程序员,十分优秀!