d3とjavascriptは初めてですが、この問題を解決するために4時間ほど費やしましたが、まだ解決策が見つかりません.
使用したい .csv データセットには、文字列と浮動小数点数の両方が含まれています (ここでサンプル セットを参照してください: http://individual.utoronto.ca/lannajin/d3/pcadummyset.csv )。現在、インポートに問題があります。
d3.csv("http://individual.utoronto.ca/lannajin/d3/pcadummyset.csv")
.row(function (d) {
return {
metric: d.metric,
Var: d.Var,
param: d.param,
PC1: +d.PC1, // convert "PC1" column to number
PC2: +d.PC2, // convert "PC2" column to number
Type: d.Type
};
})
.get(function (error, rows) {
console.log(rows);
});
バリエーションを試したところ(7行目と8行目):
PC1: d.parseFloat("PC1"),
PC1: parseFloat(d.PC1),
PC1: d.parseFloat.PC1,
等
主な問題は、float 文字 (PC1 と PC2) が 0.001 ではなく 1.0e-02 の形式になっていることです。つまり、単純に "+" 演算子を使用してデータを float に変換することはできません。代わりに、parseFloat 関数を使用する必要がありますが、残念ながら使用方法がわかりません。
Importing CSV without headers into D3 - data with numbers and stringsによって提供されるソリューションに構造を変更すると、
data = d3.csv.parseRows("http://individual.utoronto.ca/lannajin/d3/pcadummyset.csv").map(function(row) {
return row.map(function(value, index) {
if(index == 2) {
return value;
} else {
return +value;
}
});
});
データが読み取られていることは明らかですが、PC1 と PC2 の値はおそらく文字列として読み取られているため、プロットされていません。parseFloat 関数を統合しようとしましたが、それでも値がプロットされません。
助けてください!