javascript - 如何使钢筋的上部变圆?
问题描述
下面是显示条形图的代码。
如何使每个条的顶部边缘变圆?即每个条的顶部都应该像圆顶形状一样圆一些半径。
我尝试了'rx' attr,但它正在塑造顶部和底部。还有其他方法吗?我保留了下面的代码片段以供运行和检查。
var data = [
{
model_name: "f1",
field1: 40,
},
{
model_name: "f2",
field1: 19,
},
{
model_name: "f3",
field1: 49,
},
];
var margin = { top: 10, right: 10, bottom: 10, left: 50 },
width = 500,
height = 400,
barPadding = 0.2,
axisTicks = { outerSize: 0 };
var svg = d3
.select("body")
.append("svg")
.attr("viewBox", [0, 0, width, height]);
var xscale = d3
.scaleBand()
.range([margin.left, width - margin.right])
.padding(barPadding);
xscale.domain(data.map((d) => d.model_name));
var yScale = d3
.scaleLinear()
.range([height - margin.top - margin.bottom, margin.top]);
yScale.domain([0, d3.max(data, (d) => d.field1)]);
var xaxis = d3.axisBottom(xscale).tickSizeOuter(axisTicks.outerSize);
var yaxis = d3
.axisLeft(yScale)
.tickSize(5)
.tickFormat(function (d) {
return d;
});
svg
.append("g")
.attr("class", "x axis")
.attr(
"transform",
`translate(0,${height - margin.top - margin.bottom})`
)
.call(xaxis);
svg
.append("g")
.attr("class", "y axis")
.attr("transform", `translate(${margin.left},0)`)
.call(yaxis);
var model_name = svg
.selectAll(".model_name")
.data(data)
.enter()
.append("g")
.attr("class", "model_name")
.attr("transform", (d) => `translate(${xscale(d.model_name)},0)`);
model_name
.selectAll(".bar.field1")
.data((d) => [d])
.enter()
.append("rect")
.attr("class", "bar field1")
.style("fill", "skyblue")
.attr("x", () => xscale("field1"))
.attr("y", (d) => yScale(d.field1))
.attr("width", xscale.bandwidth())
.attr("height", (d) => {
return height - margin.bottom - margin.top - yScale(d.field1);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>
我正在努力实现的示例图片
解决方案
您可以使用 HTML div 来实现它,它可以采用 CSS 属性border-radius-top-left
和...-top-right
. 或者,您可以缩短矩形并在其顶部放置圆形或椭圆形。
推荐阅读
- python - nan values pandas的条件数据摄取
- vba - 来自 Curl 的 VBa 发布请求
- java - 如何在普通Java项目中使用Eclipse的IWorkspace ws=ResourcesPlugin.getWorkspace()?
- python - 将无类型转换为字符串
- python - 表格中的嵌套循环结果,Python
- docker - Elasticsearch docker慢日志文件位置设置
- mysql - 如何选择不同的行但同时添加原始列
- javascript - 在框架中显示打开的 chrome 选项卡
- reactjs - React 组件中异步代码(indexedDB)的单元测试
- android - 如何摆脱 react-native 开发中的 enoent 错误?