散布図のポイント内にラベルを追加するにはどうすればよいですか?

Krithika Raghavendran

私は次のように散布図内に州の略語を追加しようとしています: ラベル付きの散布図

これが私が扱っているCSVファイルのスニペットです:

id   abbr healthcare  poverty
 1   AL   13.9        19.3
 2   AK   15          11.2      
 3   AZ   14.4        18.2
 4   AR   16.3        18.9
 5   CA   14.8        16.4
 6   CO   12.8        12
 7   CT   8.7         10.8
 8   DE   8.7         12.5

これが私のJavaScriptコードです:

// @TODO: YOUR CODE HERE!
var svgWidth = 750;
var svgHeight = 500;

var margin = {
    top: 20,
    right: 40,
    bottom: 60, 
    left: 100
};

var width = svgWidth - margin.left - margin.right;
var height = svgHeight - margin.top - margin.bottom;

// Create an SVG wrapper, append an SVG group that will hold our chart and shift the latter by left and top margins
var svg = d3.select("#scatter")
  .append("svg")
  .attr("width", svgWidth)
  .attr("height", svgHeight);

var chartGroup = svg.append("g")
  .attr("transform", `translate(${margin.left}, ${margin.top})`);

// Import Data
d3.csv("data.csv").then(function(censusData) {

    // Parse Data & Cast as numbers
    censusData.forEach(function(data) {
        data.healthcare = +data.healthcare;
        data.poverty = +data.poverty;
    });

    // Create scale functions
    var xLinearScale = d3.scaleLinear()
      .domain(d3.extent(censusData, d => d.poverty))
      .range([0, width]);

    var yLinearScale = d3.scaleLinear()
      .domain([0, d3.max(censusData, d => d.healthcare)])
      .range([height, 0]);

    // Create axis functions
    var bottomAxis = d3.axisBottom(xLinearScale);
    var leftAxis = d3.axisLeft(yLinearScale);

    // Append axes to the chart
    chartGroup.append("g")
      .attr("transform", `translate(0, ${height})`)
      .call(bottomAxis);

    chartGroup.append("g")
      .call(leftAxis);

    // Create circles
    var circlesGroup = chartGroup.selectAll("Circle")
      .data(censusData)
      .enter()
      .append("circle")
      .attr("cx", d => xLinearScale(d.poverty))
      .attr("cy", d => yLinearScale(d.healthcare))
      .attr("r", "15")
      .attr("fill", "rgb(117, 145, 197)") 
      .attr("opacity", "0.5");

    // Add state labels to the points
    var circleLabels = circlesGroup.selectAll("text").data(censusData).enter().append("text");

    circleLabels
      .attr("x", function(d) { return d.poverty; })
      .attr("y", function(d) { return d.healthcare; })
      .text(function(d) { return d.abbr; })
      .attr("font-family", "sans-serif")
      .attr("font-size", "5px")
      .attr("fill", "white");

    // Create axes labels
    chartGroup.append("text")
      .attr("transform", "rotate(-90)")
      .attr("y", 0 - margin.left + 40)
      .attr("x", 0 - (height / 2))
      .attr("dy", "1em")
      .attr("class", "axisText")
      .style("text-anchor", "middle")
      .text("Lacks Healthcare (%)");

    chartGroup.append("text")
      .attr("transform", `translate(${width / 2}, ${height + margin.top + 30})`)
      .attr("class", "axisText")
      .style("text-anchor", "middle")
      .text("In Poverty (%)");

    // Initialize tooltip
    var toolTip = d3.tip() 
      .attr("class", "tooltip")
      .offset([80, -60])
      .html(function(d) {
        return  `${d.state}<br>Poverty: ${d.poverty}<br>Healthcare: ${d.healthcare}<br>`; 
    });

    // Create tooltip in the chart
    chartGroup.call(toolTip);

    // Create event listeners to display and hide the tooltip
    circlesGroup.on("mouseover", function(data) {
      toolTip.show(data, this);
    })
      // onmouseout event
      .on("mouseout", function(data, index) {
        toolTip.hide(data);
      });

});

circleLabelsコード一部にそれらを追加しようとしましたが、役に立ちませんでした。この部分で私が間違っていることを誰かに教えてもらえますか?

// Add state labels to the points
    var circleLabels = circlesGroup.selectAll("text").data(censusData).enter().append("text");

    circleLabels
      .attr("x", function(d) { return d.poverty; })
      .attr("y", function(d) { return d.healthcare; })
      .text(function(d) { return d.abbr; })
      .attr("font-family", "sans-serif")
      .attr("font-size", "5px")
      .attr("fill", "white");

提案や変更は大歓迎です。

ジェラルド・フルタド

あなたには3つの問題があります:

  1. circlesGroupサークルの選択です。<text>要素に<circle>要素を追加することはできませんしたがって、次のように変更しchartGroupます。

    var circleLabels = chartGroup.selectAll("text")//etc...
    

    そしてそれは私たちに2番目の問題をもたらします:

  2. その選択にはテキスト要素があります。したがって、データが既存の要素にバインドされないようにするには(Enter選択のサイズが小さくなります)、次を使用しますselectAll(null

    var circleLabels = chartGroup.selectAll(null)//etc...
    

    詳細についてはselectAll(null)、ここで私のQ / Aペアを読んでください:nullの選択:D3.jsの「selectAll(null)」の背後にある理由は何ですか?

  3. テキストの配置にスケールを使用していません。

最後text-anchor: middleに、テキストの入力に使用します。

これらの変更を加えたコードは次のとおりです。

var csv = `id,abbr,healthcare,poverty
1,AL,13.9,19.3
2,AK,15,11.2,
3,AZ,14.4,18.2
4,AR,16.3,18.9
5,CA,14.8,16.4
6,CO,12.8,12
7,CT,8.7,10.8
8,DE,8.7,12.5`;

const censusData = d3.csvParse(csv)

var svgWidth = 960;
var svgHeight = 500;

var margin = {
  top: 20,
  right: 40,
  bottom: 60,
  left: 100
};

var width = svgWidth - margin.left - margin.right;
var height = svgHeight - margin.top - margin.bottom;

// Create an SVG wrapper, append an SVG group that will hold our chart and shift the latter by left and top margins
var svg = d3.select("#scatter")
  .append("svg")
  .attr("width", svgWidth)
  .attr("height", svgHeight);

var chartGroup = svg.append("g")
  .attr("transform", `translate(${margin.left}, ${margin.top})`);


// Parse Data & Cast as numbers
censusData.forEach(function(data) {
  data.healthcare = +data.healthcare;
  data.poverty = +data.poverty;
});

// Create scale functions
var xLinearScale = d3.scaleLinear()
  .domain(d3.extent(censusData, d => d.poverty))
  .range([0, width]);

var yLinearScale = d3.scaleLinear()
  .domain([0, d3.max(censusData, d => d.healthcare)])
  .range([height, 0]);

// Create axis functions
var bottomAxis = d3.axisBottom(xLinearScale);
var leftAxis = d3.axisLeft(yLinearScale);

// Append axes to the chart
chartGroup.append("g")
  .attr("transform", `translate(0, ${height})`)
  .call(bottomAxis);

chartGroup.append("g")
  .call(leftAxis);

// Create circles
var circlesGroup = chartGroup.selectAll("Circle")
  .data(censusData)
  .enter()
  .append("circle")
  .attr("cx", d => xLinearScale(d.poverty))
  .attr("cy", d => yLinearScale(d.healthcare))
  .attr("r", "15")
  .attr("fill", "blue")
  .attr("opacity", "0.5");

var circleLabels = chartGroup.selectAll(null).data(censusData).enter().append("text");

circleLabels
  .attr("x", function(d) {
    return xLinearScale(d.poverty);
  })
  .attr("y", function(d) {
    return yLinearScale(d.healthcare);
  })
  .text(function(d) {
    return d.abbr;
  })
  .attr("font-family", "sans-serif")
  .attr("font-size", "10px")
  .attr("text-anchor", "middle")
  .attr("fill", "white");

// Create axes labels
chartGroup.append("text")
  .attr("transform", "rotate(-90)")
  .attr("y", 0 - margin.left + 40)
  .attr("x", 0 - (height / 2))
  .attr("dy", "1em")
  .attr("class", "axisText")
  .text("Lacks Healthcare (%)");

chartGroup.append("text")
  .attr("transform", `translate(${width / 2}, ${height + margin.top + 30})`)
  .attr("class", "axisText")
  .text("In Poverty (%)");
<head>
  <meta charset="UTF-8">
  <title>D3Times</title>
  <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
  <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
  <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
  <link rel="stylesheet" href="assets/css/style.css">
  <link rel="stylesheet" href="assets/css/d3Style.css">

</head>

<body>
  <div class="container">
    <div class="row">
      <div class="col-xs-12 col-md-12">
        <h1>D3Times</h1>
      </div>
    </div>
    <div class="row">
      <div class="col-xs-12  col-md-9">
        <div id="scatter">
          <!-- We append our chart here. -->
        </div>
      </div>
    </div>
  </div>

  <!-- Footer-->
  <div id="footer">
    <p>The Coding Boot Camp&copy;2016</p>
  </div>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.5.0/d3.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/d3-tip/0.9.1/d3-tip.js"></script>
  <script type="text/javascript" src="assets/js/app.js"></script>

</body>

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

散布図の各ドットにラベルを追加するにはどうすればよいですか?Matplotlib

分類Dev

R散布図のデータポイントにggplotでより適切にラベルを付けるにはどうすればよいですか?

分類Dev

散布図の点の平均にラベルを追加するにはどうすればよいですか?

分類Dev

ダッシュ散布図散布図で手動でポイントカラーを設定するにはどうすればよいですか?

分類Dev

Altair散布図の最大点に単一のテキストラベルを追加するにはどうすればよいですか?

分類Dev

CanvasJSの散布図に最適な線(トレンドライン)を追加するにはどうすればよいですか?

分類Dev

Rの散布図のプロットポイントシンボルの値を使用するにはどうすればよいですか?

分類Dev

散布図のグラフ内でタイトルの位置を設定するにはどうすればよいですか?

分類Dev

散布図のトレンドラインがx軸の境界を尊重するようにするにはどうすればよいですか?

分類Dev

Rの数値変数によってggplot2散布図のポイントと対応するラベルを並べ替えるにはどうすればよいですか?

分類Dev

Python / Plotly:散布図の各データポイントが中央値を表すようにするにはどうすればよいですか?

分類Dev

ラベル付き散布図を作成するにはどうすればよいですか?

分類Dev

matplotlibの散布図の各ポイントの色の異なる色合いをプロットするにはどうすればよいですか?

分類Dev

R Plotly散布図のすべてのポイントに一意の色を明示的に割り当てるにはどうすればよいですか?

分類Dev

R Plotly散布図のすべてのポイントに一意の色を明示的に割り当てるにはどうすればよいですか?

分類Dev

Matlab:各データポイントが異なる色になる散布図で凡例の色を設定するにはどうすればよいですか?

分類Dev

Python:散布図の各ポイントのアイテム数を見つけてリストを作成するにはどうすればよいですか?

分類Dev

グラフのすべてのポイントに値の付いたラベルを追加するにはどうすればよいですか?

分類Dev

Pythonで他のラベルと重複することなく、散布図ラベルを自動調整するにはどうすればよいですか?

分類Dev

Pythonで単一のデータポイントを含む複数の散布図を作成するにはどうすればよいですか?

分類Dev

Python-散布図に単一のデータポイントを表示するにはどうすればよいですか?

分類Dev

Rの3D散布図のデータポイントの色を変更するにはどうすればよいですか?

分類Dev

SVGの図形内にクリックイベントを追加するにはどうすればよいですか?

分類Dev

Swiftでラベルにアウトラインを追加するにはどうすればよいですか?

分類Dev

seabornを使用して、異なる色のデータポイントを散布図に追加したり、最後のデータポイントの色に変更したりするにはどうすればよいですか?

分類Dev

各ポイントに個別に指定された色で散布図を作成するにはどうすればよいですか?

分類Dev

海のポイントプロットにデータラベルを追加するにはどうすればよいですか?

分類Dev

R ggplotで、stat_qqのポイントにラベルを追加するにはどうすればよいですか?

分類Dev

openLayersのポリラインにスタイルを追加するにはどうすればよいですか?

Related 関連記事

  1. 1

    散布図の各ドットにラベルを追加するにはどうすればよいですか?Matplotlib

  2. 2

    R散布図のデータポイントにggplotでより適切にラベルを付けるにはどうすればよいですか?

  3. 3

    散布図の点の平均にラベルを追加するにはどうすればよいですか?

  4. 4

    ダッシュ散布図散布図で手動でポイントカラーを設定するにはどうすればよいですか?

  5. 5

    Altair散布図の最大点に単一のテキストラベルを追加するにはどうすればよいですか?

  6. 6

    CanvasJSの散布図に最適な線(トレンドライン)を追加するにはどうすればよいですか?

  7. 7

    Rの散布図のプロットポイントシンボルの値を使用するにはどうすればよいですか?

  8. 8

    散布図のグラフ内でタイトルの位置を設定するにはどうすればよいですか?

  9. 9

    散布図のトレンドラインがx軸の境界を尊重するようにするにはどうすればよいですか?

  10. 10

    Rの数値変数によってggplot2散布図のポイントと対応するラベルを並べ替えるにはどうすればよいですか?

  11. 11

    Python / Plotly:散布図の各データポイントが中央値を表すようにするにはどうすればよいですか?

  12. 12

    ラベル付き散布図を作成するにはどうすればよいですか?

  13. 13

    matplotlibの散布図の各ポイントの色の異なる色合いをプロットするにはどうすればよいですか?

  14. 14

    R Plotly散布図のすべてのポイントに一意の色を明示的に割り当てるにはどうすればよいですか?

  15. 15

    R Plotly散布図のすべてのポイントに一意の色を明示的に割り当てるにはどうすればよいですか?

  16. 16

    Matlab:各データポイントが異なる色になる散布図で凡例の色を設定するにはどうすればよいですか?

  17. 17

    Python:散布図の各ポイントのアイテム数を見つけてリストを作成するにはどうすればよいですか?

  18. 18

    グラフのすべてのポイントに値の付いたラベルを追加するにはどうすればよいですか?

  19. 19

    Pythonで他のラベルと重複することなく、散布図ラベルを自動調整するにはどうすればよいですか?

  20. 20

    Pythonで単一のデータポイントを含む複数の散布図を作成するにはどうすればよいですか?

  21. 21

    Python-散布図に単一のデータポイントを表示するにはどうすればよいですか?

  22. 22

    Rの3D散布図のデータポイントの色を変更するにはどうすればよいですか?

  23. 23

    SVGの図形内にクリックイベントを追加するにはどうすればよいですか?

  24. 24

    Swiftでラベルにアウトラインを追加するにはどうすればよいですか?

  25. 25

    seabornを使用して、異なる色のデータポイントを散布図に追加したり、最後のデータポイントの色に変更したりするにはどうすればよいですか?

  26. 26

    各ポイントに個別に指定された色で散布図を作成するにはどうすればよいですか?

  27. 27

    海のポイントプロットにデータラベルを追加するにはどうすればよいですか?

  28. 28

    R ggplotで、stat_qqのポイントにラベルを追加するにはどうすればよいですか?

  29. 29

    openLayersのポリラインにスタイルを追加するにはどうすればよいですか?

ホットタグ

アーカイブ