データ駆動型d3チャートからデータを含む2番目のツールチップを追加する方法

キース

私は、データ駆動型のこの D3 チャートを使用しています。それは機能していますが、2 番目のツールチップを追加すると、両方が表示されなくなり、コンソールでエラーが発生します。

私が取り組んでいるオリジナルはここにあります: http://bl.ocks.org/Caged/6476579

これは、mouseover イベントで呼び出された関数がデータにアクセスできないことを意味すると思います。

 svg7-2.html:105  Uncaught TypeError: Cannot read property 'frequency2'
 of undefined
     at Function.<anonymous> (svg7-2.html:105)
     at Function.tip.show (d3.tip.v0.6.3.js:33)
     at SVGRectElement.<anonymous> (svg7-2.html:155)
     at SVGRectElement.__onmouseover (d3.v3.min.js:1)

そして、ここに私の完全なコードがあります:

<style>

body {
  font: 10px sans-serif;
}

.axis path,
.axis line {
  fill: none;
  stroke: #000;
  shape-rendering: crispEdges;
}

.bar {
  fill: orange;
}

.bar:hover {
  fill: orangered ;
}

.x.axis path {
  display: none;
}

.d3-tip {
  line-height: 1;
  font-weight: bold;
  padding: 12px;
  background: rgba(0, 0, 0, 0.8);
  color: #fff;
  border-radius: 2px;
}

/* Creates a small triangle extender for the tooltip */
.d3-tip:after {
  box-sizing: border-box;
  display: inline;
  font-size: 10px;
  width: 100%;
  line-height: 1;
  color: rgba(0, 0, 0, 0.8);
  content: "\25BC";
  position: absolute;
  text-align: center;
}

/* Style northward tooltips differently */
.d3-tip.n:after {
  margin: -1px 0 0 0;
  top: 100%;
  left: 0;
}
</style>
<body>
<script src="//d3js.org/d3.v3.min.js"></script>
<script src="d3.tip.v0.6.3.js"></script>
<script>

var margin = {top: 40, right: 20, bottom: 30, left: 40},
    width = 960 - margin.left - margin.right,
    height = 500 - margin.top - margin.bottom;

var data = 
    [
        {letter:"A", frequency2:.08167},
        {letter:"B", frequency2:.01492},
        {letter:"C", frequency2:.02780},
        {letter:"D", frequency2:.04253},
        {letter:"E", frequency2:.12702},
        {letter:"F", frequency2:.02288},
        {letter:"G", frequency2:.02022},
        {letter:"H", frequency2:.06094},
        {letter:"I", frequency2:.06973},
        {letter:"J", frequency2:.00153},
        {letter:"K", frequency2:.00747},
        {letter:"L", frequency2:.04025},
        {letter:"M", frequency2:.02517},
        {letter:"N", frequency2:.06749}
    ];

var formatPercent = d3.format(".0%");

var x = d3.scale.ordinal()
    .rangeRoundBands([0, width], .1);

var y = d3.scale.linear()
    .range([height, 0]);

var xAxis = d3.svg.axis()
    .scale(x)
    .orient("bottom");

var yAxis = d3.svg.axis()
    .scale(y)
    .orient("left")
    .tickFormat(formatPercent);

var tip = d3.tip()
  .attr('class', 'd3-tip')
  .offset([-10, 0])
  .html(function(d) {
    return "<strong>Frequency2:</strong> <span style='color:red'>" + d.frequency2 + "</span>";
  })

var tip2 = d3.tip()
  .attr('class', 'd3-tip')
  .offset([-40, 0])
  .html(function(d) {
    return "<strong>Other Variables:</strong> <span style='color:red'>" + d.frequency2 + "</span>";
  })

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 + ")");

svg.call(tip);
svg.call(tip2);

data.forEach(d=>{
  d.frequency = +d.frequency;
});

  x.domain(data.map(function(d) { return d.letter; }));
  y.domain([0, d3.max(data, function(d) { return d.frequency2; })]);

  svg.append("g")
      .attr("class", "x axis")
      .attr("transform", "translate(0," + height + ")")
      .call(xAxis);

  svg.append("g")
      .attr("class", "y axis")
      .call(yAxis)
    .append("text")
      .attr("transform", "rotate(-90)")
      .attr("y", 6)
      .attr("dy", ".71em")
      .style("text-anchor", "end")
      .text("Frequency 2");

  svg.selectAll(".bar")
      .data(data)
    .enter().append("rect")
      .attr("class", "bar")
      .attr("x", function(d) { return x(d.letter); })
      .attr("width", x.rangeBand())
      .attr("y", function(d) { return y(d.frequency2); })
      .attr("height", function(d) { return height - y(d.frequency2); })
      .on("mouseover", function() {
          tip.show();
          tip2.show();
        }).on("mouseout", function() {
          tip.hide();
          tip2.hide();
        });

function type(d) {
  d.frequency2 = +d.frequency2;
  return d;
}

</script>
ジェラルド・フルタド

テキストが修正された以前の回答とは異なり、datumツールチップにを渡す必要があります

.on("mouseover", function(d) {
    tip.show(d);
    tip2.show(d);
}).on("mouseout", function(d) {
    tip.hide();
    tip2.hide();
});

作業コードは次のとおりです。

var margin = {
    top: 40,
    right: 20,
    bottom: 30,
    left: 40
  },
  width = 960 - margin.left - margin.right,
  height = 500 - margin.top - margin.bottom;

var data = [{
  letter: "A",
  frequency2: .08167
}, {
  letter: "B",
  frequency2: .01492
}, {
  letter: "C",
  frequency2: .02780
}, {
  letter: "D",
  frequency2: .04253
}, {
  letter: "E",
  frequency2: .12702
}, {
  letter: "F",
  frequency2: .02288
}, {
  letter: "G",
  frequency2: .02022
}, {
  letter: "H",
  frequency2: .06094
}, {
  letter: "I",
  frequency2: .06973
}, {
  letter: "J",
  frequency2: .00153
}, {
  letter: "K",
  frequency2: .00747
}, {
  letter: "L",
  frequency2: .04025
}, {
  letter: "M",
  frequency2: .02517
}, {
  letter: "N",
  frequency2: .06749
}];

var formatPercent = d3.format(".0%");

var x = d3.scale.ordinal()
  .rangeRoundBands([0, width], .1);

var y = d3.scale.linear()
  .range([height, 0]);

var xAxis = d3.svg.axis()
  .scale(x)
  .orient("bottom");

var yAxis = d3.svg.axis()
  .scale(y)
  .orient("left")
  .tickFormat(formatPercent);

var tip = d3.tip()
  .attr('class', 'd3-tip')
  .offset([-10, 0])
  .html(function(d) {
    return "<strong>Frequency2:</strong> <span style='color:red'>" + d.frequency2 + "</span>";
  })

var tip2 = d3.tip()
  .attr('class', 'd3-tip')
  .offset([-40, 0])
  .html(function(d) {
    return "<strong>Other Variables:</strong> <span style='color:red'>" + d.frequency2 + "</span>";
  })

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 + ")");

svg.call(tip);
svg.call(tip2);

data.forEach(d => {
  d.frequency = +d.frequency;
});

x.domain(data.map(function(d) {
  return d.letter;
}));
y.domain([0, d3.max(data, function(d) {
  return d.frequency2;
})]);

svg.append("g")
  .attr("class", "x axis")
  .attr("transform", "translate(0," + height + ")")
  .call(xAxis);

svg.append("g")
  .attr("class", "y axis")
  .call(yAxis)
  .append("text")
  .attr("transform", "rotate(-90)")
  .attr("y", 6)
  .attr("dy", ".71em")
  .style("text-anchor", "end")
  .text("Frequency 2");

svg.selectAll(".bar")
  .data(data)
  .enter().append("rect")
  .attr("class", "bar")
  .attr("x", function(d) {
    return x(d.letter);
  })
  .attr("width", x.rangeBand())
  .attr("y", function(d) {
    return y(d.frequency2);
  })
  .attr("height", function(d) {
    return height - y(d.frequency2);
  })
  .on("mouseover", function(d) {
    tip.show(d);
    tip2.show(d);
  }).on("mouseout", function(d) {
    tip.hide();
    tip2.hide();
  });

function type(d) {
  d.frequency2 = +d.frequency2;
  return d;
}
body {
  font: 10px sans-serif;
}

.axis path,
.axis line {
  fill: none;
  stroke: #000;
  shape-rendering: crispEdges;
}

.bar {
  fill: orange;
}

.bar:hover {
  fill: orangered;
}

.x.axis path {
  display: none;
}

.d3-tip {
  line-height: 1;
  font-weight: bold;
  padding: 12px;
  background: rgba(0, 0, 0, 0.8);
  color: #fff;
  border-radius: 2px;
}


/* Creates a small triangle extender for the tooltip */

.d3-tip:after {
  box-sizing: border-box;
  display: inline;
  font-size: 10px;
  width: 100%;
  line-height: 1;
  color: rgba(0, 0, 0, 0.8);
  content: "\25BC";
  position: absolute;
  text-align: center;
}


/* Style northward tooltips differently */

.d3-tip.n:after {
  margin: -1px 0 0 0;
  top: 100%;
  left: 0;
}
<script src="https://d3js.org/d3.v3.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3-tip/0.7.1/d3-tip.min.js"></script>

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

MSチャートにさまざまなデータを含むツールチップを表示する方法

分類Dev

ツールチップd3のデータからコンテンツを表示する

分類Dev

2番目の配列の要素を含む配列からデータをフェッチします

分類Dev

HighMaps:ツールチップに2番目のデータ系列を追加します

分類Dev

ツールチップ付きの円をd3チャートに追加する方法

分類Dev

Apexchartsツールチップ-ローソク足チャートにデータを追加する方法は?

分類Dev

2つの関連するテーブルからデータをフェッチして3番目のテーブルに配置する方法

分類Dev

データベースからのデータを含むGoogleチャート

分類Dev

タプルしかない場合にJSONからD3チャートにデータをロードする方法

分類Dev

C#からの動的データを含むモリスチャート

分類Dev

d3のツールチップにチャートを追加

分類Dev

動的データを含むハイチャートバブルチャート

分類Dev

2つのテーブルからデータをフェッチし、PHPの3番目のテーブルに入力するコード

分類Dev

Chartjs-チャートのツールチップに追加のデータを挿入します

分類Dev

C3.js 散布図 - 3 番目のデータ (追加値) を元の列データの一部として関連付け、半径を設定してツールチップに表示する方法

分類Dev

2番目のチャネルが前のチャネルからデータを受信しない理由

分類Dev

グーグルチャートカスタムhtmlツールチップのphpデータテーブルにプロパティを追加する

分類Dev

グーグルチャートで縦棒グラフのツールチップデータを取得する

分類Dev

D3ツールチップにテキストを追加する方法は?

分類Dev

3番目のループからデータをプルするJSONAngular Array

分類Dev

チャートjsツールチップ表示されるデータを制御する方法

分類Dev

SQLデータベースからの時間を含むJFreechartチャート

分類Dev

既存のmatplotlibチャートに2番目のプロットを追加する

分類Dev

MySQLの2番目のテーブルからデータを印刷する方法

分類Dev

データをSVGツールチップにバインドするD3

分類Dev

動的x軸カテゴリのハイチャートのツールチップにデータを追加します

分類Dev

D3にホバー(ツールチップ)を追加する方法。バブルモーションチャート?

分類Dev

jQueryツールチップ-セルデータから動的コンテンツを表示する

分類Dev

ツールチップのハイチャート追加データ

Related 関連記事

  1. 1

    MSチャートにさまざまなデータを含むツールチップを表示する方法

  2. 2

    ツールチップd3のデータからコンテンツを表示する

  3. 3

    2番目の配列の要素を含む配列からデータをフェッチします

  4. 4

    HighMaps:ツールチップに2番目のデータ系列を追加します

  5. 5

    ツールチップ付きの円をd3チャートに追加する方法

  6. 6

    Apexchartsツールチップ-ローソク足チャートにデータを追加する方法は?

  7. 7

    2つの関連するテーブルからデータをフェッチして3番目のテーブルに配置する方法

  8. 8

    データベースからのデータを含むGoogleチャート

  9. 9

    タプルしかない場合にJSONからD3チャートにデータをロードする方法

  10. 10

    C#からの動的データを含むモリスチャート

  11. 11

    d3のツールチップにチャートを追加

  12. 12

    動的データを含むハイチャートバブルチャート

  13. 13

    2つのテーブルからデータをフェッチし、PHPの3番目のテーブルに入力するコード

  14. 14

    Chartjs-チャートのツールチップに追加のデータを挿入します

  15. 15

    C3.js 散布図 - 3 番目のデータ (追加値) を元の列データの一部として関連付け、半径を設定してツールチップに表示する方法

  16. 16

    2番目のチャネルが前のチャネルからデータを受信しない理由

  17. 17

    グーグルチャートカスタムhtmlツールチップのphpデータテーブルにプロパティを追加する

  18. 18

    グーグルチャートで縦棒グラフのツールチップデータを取得する

  19. 19

    D3ツールチップにテキストを追加する方法は?

  20. 20

    3番目のループからデータをプルするJSONAngular Array

  21. 21

    チャートjsツールチップ表示されるデータを制御する方法

  22. 22

    SQLデータベースからの時間を含むJFreechartチャート

  23. 23

    既存のmatplotlibチャートに2番目のプロットを追加する

  24. 24

    MySQLの2番目のテーブルからデータを印刷する方法

  25. 25

    データをSVGツールチップにバインドするD3

  26. 26

    動的x軸カテゴリのハイチャートのツールチップにデータを追加します

  27. 27

    D3にホバー(ツールチップ)を追加する方法。バブルモーションチャート?

  28. 28

    jQueryツールチップ-セルデータから動的コンテンツを表示する

  29. 29

    ツールチップのハイチャート追加データ

ホットタグ

アーカイブ