web-dev-qa-db-ja.com

Excelの座標を使用して長方形をプロットする

左下と右上の2つの座標のみを使用して、Excelグラフを使用して長方形をプロットしたいと思います。 Microsoft Office 365ProとExcelのバージョンを使用して定義できる方法はありますか。

enter image description here


例えば:

Element_name   X_low    Y_low   X_high  Y_high
CM124_BK124    4       4        16      64
CM124_BK8      4       4        16      64

これは、Excelチャートオプションからtreemapを使用する私の試みです。それはあまり役に立ちません。 enter image description here

3
JigarGandhi

ネイティブExcelでそれを行うことはできないと思いますが、アドインを使用する場合は可能です。 Funfunアドインを使用すると、ExcelでJavascriptを使用してこの種のグラフを作成できます。

これが私があなたのために書いた実用的なコードです:

https://www.funfun.io/1/#/edit/5a69ddc9ee0b8c3283c653e

必要な形式を使用しました。データを変更して、2つの異なる長方形を作成しました。どちらも2つの座標しかありません。

このリンクからわかるように、埋め込みスプレッドシートにテーブルを入力したFunfunのオンラインエディターを使用しました。

JSONファイルを使用して、スプレッドシートからJavaScriptコードにデータを取得します。

{
    "data": "=A1:E3"
}

次に、データをローカル変数に格納し、次のように正しい座標で長方形を作成します。

/* we store the data from the spreadsheet in local variables */
var label = [];
var x = [];
var y = [];

for (var i = 1; i < $internal.data.length; i++)
{
  label.Push($internal.data[i][0]);
  x.Push([parseInt($internal.data[i][1]), parseInt($internal.data[i][3])]);
  y.Push([parseInt($internal.data[i][2]), parseInt($internal.data[i][4])]);  
}

/* create all the shapes you want with the data stored */
var shapes = [];
var traces = [];
for (var i = 0; i < $internal.data.length - 1; i++) {
  shapes.Push({
    type: 'rectangle',
      xref: 'x',
      yref: 'y',
      fillcolor: 'rgba(50, 171, 96, 0.7)',
      x0: x[i][0],
      y0: y[i][0],
      x1: x[i][1],
      y1: y[i][1],
      line: {
        color: 'rgba(50, 171, 96, 1)'
      }
  });
  traces.Push({
    x: [x[i][0] + 3.5],
    y: [y[i][0] - 2],
    text: label[i],
    mode: 'text'
  });
}

shapes配列は長方形用であり、traceは各長方形にラベルを付けるためのものです。

利用可能なオプションがたくさんあるので、チャートをカスタマイズできます。それは、javascriptとその強力なライブラリの美しさです。この例では、 plotly.js を使用しました

Funfun Excelアドイン にURLを貼り付けることで、Excelに読み込むことができます。これが私の例でどのように見えるかです:

final

編集

図形内にテキストを書き込みたい場合は、値が格納されている別のローカル変数が必要であり、そのように正しい座標を見つけます。

var textInRectangles = ["First", "second"];

...

 traces.Push({
    x: [x[i][0] + 2.5],
    y: [y[i][0] + 4],
    text: textInRectangles[i],
    textfont: {
    color: 'black',
    size: 9,
    family: 'Arial'
  },
    mode: 'text'
  });

edit

先に例のリンクを変更しました。

開示:私はFunfunの開発者です。

2
nicolas dejean

散布図でそれを行うことができますが、すべてのコーナーの座標を入力する必要があります。

enter image description here

1
Máté Juhász