首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >交互式条形图域问题

交互式条形图域问题
EN

Stack Overflow用户
提问于 2022-06-15 19:59:13
回答 1查看 28关注 0票数 0

我正试图创建福布斯百强公司的互动条形图,并在销售和利润之间做出调整。

我遇到的第一个问题是域:

代码语言:javascript
运行
复制
x.domain([0, d3.max(data, d => d[xValue])])

错误说“数据未定义”

但我在这里定义了:

代码语言:javascript
运行
复制
d3.csv("data/data_clean.csv").then(data => {
    data.forEach(d => {
    d.sales_usd_billion = Number(d.sales_usd_billion)
    d.profit_usd_billion = Number(d.profit_usd_billion)
})

数据快照:

代码语言:javascript
运行
复制
rank,company,country,sales_usd_billion,sales_unit,profit_usd_billion,profit_unit,assets_usd_billion,market_usd_billion,sales_usd,profit_usd,assets_usd
1,Berkshire Hathaway,United States,276.09,B,89.8,B,958.78,741.48,276.09,89.8,958.78
2,ICBC,China,208.13,B,54.03,B,5518.51,214.43,208.13,54.03,5518.51
3,Saudi Arabian Oil Company (Saudi Aramco),Saudi Arabia,400.38,B,105.36,B,576.04,2292.08,400.38,105.36,576.04
4,JPMorgan Chase,United States,124.54,B,42.12,B,3954.69,374.45,124.54,42.12,3954.69
5,China Construction Bank,China,202.07,B,46.89,B,4746.95,181.32,202.07,46.89,4746.95
6,Amazon,United States,469.82,B,33.36,B,420.55,1468.4,469.82,33.36,420.55
7,Apple,United States,378.7,B,100.56,B,381.19,2640.32,378.7,100.56,381.19
8,Agricultural Bank of China,China,181.42,B,37.38,B,4561.05,133.38,181.42,37.38,4561.05
9,Bank of America,United States,96.83,B,31,B,3238.22,303.1,96.83,31,3238.22
10,Toyota Motor,Japan,281.75,B,28.15,B,552.46,237.73,281.75,28.15,552.46
11,Alphabet,United States,257.49,B,76.03,B,359.27,1581.72,257.49,76.03,359.27
12,Microsoft,United States,184.9,B,71.19,B,340.39,2054.37,184.9,71.19,340.39
13,Bank of China,China,152.43,B,33.57,B,4192.84,117.83,152.43,33.57,4192.84
14,Samsung Group,South Korea,244.16,B,34.27,B,358.88,367.26,244.16,34.27,358.88

完整代码:

代码语言:javascript
运行
复制
//Forbes companies bar chart 

//set up chart area
const MARGIN = { LEFT: 250, RIGHT: 10, TOP: 50, BOTTOM: 100 }
const WIDTH = 1000 - MARGIN.LEFT - MARGIN.RIGHT
const HEIGHT = 1100 - MARGIN.TOP - MARGIN.BOTTOM



const svg = d3.select("#chart-area").append("svg")
    .attr("width", WIDTH + MARGIN.LEFT + MARGIN.RIGHT)
    .attr("height", HEIGHT + MARGIN.TOP + MARGIN.BOTTOM)

const g = svg.append("g")
    .attr("transform", `translate(${MARGIN.LEFT}, ${MARGIN.TOP})`)

// X label
g.append("text")
  .attr("class", "x axis-label")
  .attr("x", WIDTH / 2)
  .attr("y", HEIGHT + 50)
  .attr("font-size", "20px")
  .attr("text-anchor", "middle")

// Y label
const yLabel = g.append("text")
  .attr("class", "y axis-label")
  .attr("x", - (HEIGHT / 2))
  .attr("y", -200)
  .attr("font-size", "20px")
  .attr("text-anchor", "middle")
  .attr("transform", "rotate(-90)")
  .text("Company")

//scales
const x = d3.scaleLinear()
    .range([0, WIDTH])
const y = d3.scaleBand()
    .range([HEIGHT, 0])

//axis generators
const xAxisCall = d3.axisBottom()
const yAxisCall = d3.axisLeft()

//axis groups
const xAxisGroup = g.append("g")
    .attr("class", "x axis")
    .attr("transform", `translate(0, ${HEIGHT})`)
const yAxisGroup = g.append("g")
    .attr("class", "y axis")

//event listeners
$("#var-select").on("change", update)

d3.csv("data/data_clean.csv").then(data => {
    data.forEach(d => {
    d.sales_usd_billion = Number(d.sales_usd_billion)
    d.profit_usd_billion = Number(d.profit_usd_billion)
})


update()
})

function update() {
   
    const t = d3.transition().duration(750)

    //filter based on selections
    const xValue = $("#var-select").val()


    x.domain([0, d3.max(data, d => d[xValue])])
    y.domain(data.map(d => d.company))

   
data.sort(function(a, b) {
    return  b.rank - a.rank;
  })


//update axes
xAxisCall.scale(x)
xAxis.transition(t).call(xAxisCall)
yAxisCall.scale(y)
yAxis.transition(t).call(yAxisCall)

//***Tooltips */


//*** --- */

rects.enter().append("rect")
.attr("y", d => y(d.company) +3)
.attr("x", 0)
.attr("width", d => x(d[value]))
.attr("height", d => 4)
EN

回答 1

Stack Overflow用户

发布于 2022-06-17 04:34:50

您需要在update方法中传递数据,并将函数定义更改为函数更新( data )。这是一个简单的范围问题,我建议尝试调试代码,然后请求帮助here.To了解有关调试的更多信息,请遵循javascript调试教程。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72637183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档