如何在d3中为坐标轴添加文本标签?例如,我有一个简单的折线图,有x轴和y轴。在我的x轴上,我有从1到10的刻度。我希望“天”这个词出现在它下面,这样人们就知道x轴是在计算天数。类似地,在y轴上,我将数字1-10作为刻度,我希望单词“sandwiches eated”横向显示。有没有一个简单的方法来做到这一点?
kd3sttzy1#
D3的axis component没有内置轴标签,但是你可以通过添加一个SVG text元素来自己添加标签。一个很好的例子是我对Gapminder的动画气泡图The Wealth & Health of Nations的重新创建。x轴标签看起来像这样:
text
svg.append("text") .attr("class", "x label") .attr("text-anchor", "end") .attr("x", width) .attr("y", height - 6) .text("income per capita, inflation-adjusted (dollars)");
字符串Y轴的标签是这样的:
svg.append("text") .attr("class", "y label") .attr("text-anchor", "end") .attr("y", 6) .attr("dy", ".75em") .attr("transform", "rotate(-90)") .text("life expectancy (years)");
型您还可以使用样式表来设置这些标签的样式,无论是一起(.label)还是单独(.x.label,.y.label)。
.label
.x.label
.y.label
q5iwbnjs2#
在新的D3js版本(版本3及以后)中,当您通过d3.svg.axis()函数创建图表轴时,您可以访问两个名为tickValues和tickFormat的方法,这两个方法内置在函数中,以便您可以指定需要哪些值的刻度以及希望文本显示的格式:
d3.svg.axis()
tickValues
tickFormat
var formatAxis = d3.format(" 0"); var axis = d3.svg.axis() .scale(xScale) .tickFormat(formatAxis) .ticks(3) .tickValues([100, 200, 300]) //specify an array here for values .orient("bottom");
字符串
46scxncf3#
如果你想像我一样把y轴的标签放在y轴的中间:1.使用文本锚点中间旋转文本90度
-50
chartHeight / 2
代码示例:
var axisLabelX = -50; var axisLabelY = chartHeight / 2; chartArea .append('g') .attr('transform', 'translate(' + axisLabelX + ', ' + axisLabelY + ')') .append('text') .attr('text-anchor', 'middle') .attr('transform', 'rotate(-90)') .text('Y Axis Label') ;
字符串这防止了旋转整个坐标系,如上文lubar所述。
yjghlzjz4#
如果您使用d3.v4,就像建议的那样,您可以使用这个示例提供您需要的一切。您可能只想用“天”替换X轴数据,但请记住正确解析字符串值,不要应用连接。parseTime也可以用日期格式来处理天数缩放?
d3.json("data.json", function(error, data) { if (error) throw error; data.forEach(function(d) { d.year = parseTime(d.year); d.value = +d.value; }); x.domain(d3.extent(data, function(d) { return d.year; })); y.domain([d3.min(data, function(d) { return d.value; }) / 1.005, d3.max(data, function(d) { return d.value; }) * 1.005]); g.append("g") .attr("class", "axis axis--x") .attr("transform", "translate(0," + height + ")") .call(d3.axisBottom(x)); g.append("g") .attr("class", "axis axis--y") .call(d3.axisLeft(y).ticks(6).tickFormat(function(d) { return parseInt(d / 1000) + "k"; })) .append("text") .attr("class", "axis-title") .attr("transform", "rotate(-90)") .attr("y", 6) .attr("dy", ".71em") .style("text-anchor", "end") .attr("fill", "#5D6971") .text("Population)");
字符串fiddle with global css / js
70gysomp5#
D3提供了一组非常低级别的组件,您可以使用它们来组装图表。您将获得构建块,轴组件,数据连接,选择和SVG。您的工作是将它们组合在一起以形成图表!如果你想要一个传统的图表,即一对轴,轴标签,图表标题和绘图区域,为什么不看看d3fc?它是一个开源的更高级别的D3组件集。它包括一个可能是你需要的图表组件:
var chart = fc.chartSvgCartesian( d3.scaleLinear(), d3.scaleLinear() ) .xLabel('Value') .yLabel('Sine / Cosine') .chartLabel('Sine and Cosine') .yDomain(yExtent(data)) .xDomain(xExtent(data)) .plotArea(multi); // render d3.select('#sine') .datum(data) .call(chart);
字符串你可以在这里看到一个更完整的例子:https://d3fc.io/examples/simple/index.html
9jyewag06#
chart.xAxis.axisLabel('Label here');
字符串或
xAxis: { axisLabel: 'Label here' },
型
wqlqzqxt7#
在D3.js中自定义轴https://ghenshaw-work.medium.com/customizing-axes-in-d3-js-99d58863738b
let xAxisGenerator = d3.axisBottom(xScale); let tickLabels = ['A','B','C']; xAxisGenerator.tickFormat((d,i) => tickLabels[i]);
7条答案
按热度按时间kd3sttzy1#
D3的axis component没有内置轴标签,但是你可以通过添加一个SVG
text
元素来自己添加标签。一个很好的例子是我对Gapminder的动画气泡图The Wealth & Health of Nations的重新创建。x轴标签看起来像这样:字符串
Y轴的标签是这样的:
型
您还可以使用样式表来设置这些标签的样式,无论是一起(
.label
)还是单独(.x.label
,.y.label
)。q5iwbnjs2#
在新的D3js版本(版本3及以后)中,当您通过
d3.svg.axis()
函数创建图表轴时,您可以访问两个名为tickValues
和tickFormat
的方法,这两个方法内置在函数中,以便您可以指定需要哪些值的刻度以及希望文本显示的格式:字符串
46scxncf3#
如果你想像我一样把y轴的标签放在y轴的中间:
1.使用文本锚点中间旋转文本90度
-50
)chartHeight / 2
)匹配代码示例:
字符串
这防止了旋转整个坐标系,如上文lubar所述。
yjghlzjz4#
如果您使用d3.v4,就像建议的那样,您可以使用这个示例提供您需要的一切。
您可能只想用“天”替换X轴数据,但请记住正确解析字符串值,不要应用连接。
parseTime也可以用日期格式来处理天数缩放?
字符串
fiddle with global css / js
70gysomp5#
D3提供了一组非常低级别的组件,您可以使用它们来组装图表。您将获得构建块,轴组件,数据连接,选择和SVG。您的工作是将它们组合在一起以形成图表!
如果你想要一个传统的图表,即一对轴,轴标签,图表标题和绘图区域,为什么不看看d3fc?它是一个开源的更高级别的D3组件集。它包括一个可能是你需要的图表组件:
字符串
你可以在这里看到一个更完整的例子:https://d3fc.io/examples/simple/index.html
9jyewag06#
字符串
或
型
wqlqzqxt7#
在D3.js中自定义轴
https://ghenshaw-work.medium.com/customizing-axes-in-d3-js-99d58863738b
字符串