2016-10-01 13 views
1

私は、データ視覚化アートのようなデータでツリーのビジュアルを作成しようとしています。ビジュアルの参照はhttp://www.openprocessing.org/sketch/5918ですが、ランダムな浮動小数点数が作成されます。同じビジュアルを作成することは可能ですが、このような複雑なデータによって生成された省略記号はhttp://data.un.org/Data.aspx?q=mortality+&d=PopDiv&f=variableID%3a80ですか?私はProcessingを使用しています。データビジュアライゼーションを使ってアートワークを作成する

ライブラリが必要ですか?ランダム変数ではなくデータで描画するために、コードを開始点としてどのように変更する必要がありますか?

color[] palette = {#262A40, #F2EAC2, #8C3F63}; 

Table mtl;     // mtl = "Mortality" 

int wide = 1000;   // Width of window 
int high = 600;   // Height of window 
float border = 75;   // Size of border 
float lb = border;   // Left border 
float rb = wide - border; // Right border 
float bb = high - border; // Bottom border 
float tb = border;   // Top borders 

float gw = rb - lb;  // Grid width 
float gh = bb - tb;  // Grid height 

float minX = 0; 
float maxX = 10; 
float minY = 0.00; 
float maxY = 1.00; 

float z = 1;    // Zoom factor for scaling 
float tx = wide/2;   // Used for panning on x 
float ty = high/2;   // Used for panning on y 

void setup() { 
    size(1000, 600); 
    smooth(); 
    cursor(CROSS); 
    mtl = new Table("mortality3.tsv"); 
} 

void draw() { 
    background(palette[0]); 
    scatter("mtl"); 
    frame(border, palette[0]); 
} 

// scatter 
void scatter(String tableObject) { 
    pushMatrix(); 
    translate(tx, ty); 
    scale(z); 
    stroke(palette[1]); 
    strokeWeight(3); 
    int n = 936; // Got this manually from csv file 

    for (int i = 0; i < n; i++) { 
    float x = map(mtl.getFloat(i, 4), minX, maxX, -z*gw/2, z*gw/2); 
    float y = map(mtl.getFloat(i, 4), minY, maxY, z*gh/2, -z*gh/2); 
    point(x, y); 

    // Hover 
    float mx = map(mouseX, lb, rb, -(gw/2)/z - (tx - width/2)/z, (gw/2)/z - (tx - width/2)/z); 
    float my = map(mouseY, tb, bb, -(gh/2)/z - (ty - height/2)/z, (gh/2)/z - (ty - height/2)/z); 
    if (dist(mx, my, x, y) < 5) { 
     statString = "Country" +mtl.getString(i, 0) + 
        nf(mtl.getFloat(i, 2), 0, 2) + " Year " + 
        nf(mtl.getFloat(i, 1), 0, 3); 
    } 
    } 
    popMatrix(); 
} 

は、私はまた、テーブル読み出しのためのクラスコードを持っていますが、私はこのエラーを取得「は、ArrayIndexOutOfBoundsException:4」を維持し、この部分が常に強調されている - return data[rowIndex][column]

class Table { 
    int rowCount; 
    String[][] data; 


    Table(String filename) { 
    String[] rows = loadStrings(filename); 
    data = new String[rows.length][]; 

    for (int i = 0; i < rows.length; i++) { 
     if (trim(rows[i]).length() == 0) { 
     continue; // skip empty rows 
     } 
     if (rows[i].startsWith("#")) { 
     continue; // skip comment lines 
     } 

     // split the row on the tabs 
     String[] pieces = split(rows[i], TAB); 
     // copy to the table array 
     data[rowCount] = pieces; 
     rowCount++; 

     // this could be done in one fell swoop via: 
     //data[rowCount++] = split(rows[i], TAB); 
    } 
    // resize the 'data' array as necessary 
    data = (String[][]) subset(data, 0, rowCount); 
    } 


    int getRowCount() { 
    return rowCount; 
    } 


    // find a row by its name, returns -1 if no row found 
    int getRowIndex(String name) { 
    for (int i = 0; i < rowCount; i++) { 
     if (data[i][0].equals(name)) { 
     return i; 
     } 
    } 
    println("No row named '" + name + "' was found"); 
    return -1; 
    } 


    String getRowName(int row) { 
    return getString(row, 0); 
    } 


    String getString(int rowIndex, int column) { 
    return data[rowIndex][column]; 
    } 


    String getString(String rowName, int column) { 
    return getString(getRowIndex(rowName), column); 
    } 


    int getInt(String rowName, int column) { 
    return parseInt(getString(rowName, column)); 
    } 


    int getInt(int rowIndex, int column) { 
    return parseInt(getString(rowIndex, column)); 
    } 


    float getFloat(String rowName, int column) { 
    return parseFloat(getString(rowName, column)); 
    } 


    float getFloat(int rowIndex, int column) { 
    return parseFloat(getString(rowIndex, column)); 
    } 


    void setRowName(int row, String what) { 
    data[row][0] = what; 
    } 


    void setString(int rowIndex, int column, String what) { 
    data[rowIndex][column] = what; 
    } 


    void setString(String rowName, int column, String what) { 
    int rowIndex = getRowIndex(rowName); 
    data[rowIndex][column] = what; 
    } 


    void setInt(int rowIndex, int column, int what) { 
    data[rowIndex][column] = str(what); 
    } 


    void setInt(String rowName, int column, int what) { 
    int rowIndex = getRowIndex(rowName); 
    data[rowIndex][column] = str(what); 
    } 


    void setFloat(int rowIndex, int column, float what) { 
    data[rowIndex][column] = str(what); 
    } 


    void setFloat(String rowName, int column, float what) { 
    int rowIndex = getRowIndex(rowName); 
    data[rowIndex][column] = str(what); 
    } 
} 

何ができるようになりましたために出てきません誰かがなぜ私はなぜ参照するのを助ける?私のTSVファイルは936行あります。

+0

現在のフォームでは、この質問はStack Overflowでは広すぎます。スタックオーバーフローは本当に一般的な "どのようにこれを行う"タイプの質問に設計されていません。具体的にはもっと具体的に設計されています。「私はXを試しましたが、Yは期待されましたが、代わりにZがあります。あなたの投稿を編集して[mcve]を追加してください。これはあなたの問題を見るために実行できる例です** **あなたのプロジェクト全体ではありません。可能であれば、ハードコードされた値を使用してください。 –

+0

投稿を編集しました! – Gladys

答えて

0

任意のライブラリはあなたがいずれかのライブラリを必要としない

を必要としてあります。 loadTable()機能を使用してcsvファイルをロードするだけです。詳細はthe referenceでご覧になれます。

ランダム変数ではなくデータによって描画されるようにするには、コードを開始点としてどのように変更する必要がありますか?あなたが欲しいものをやってにインターネット上で見つけたランダムコードをハンマーしようと

はどこへ行くない方法です。あなたは今見ているように頭痛を覚えるだけです。

代わりに、ブランクスケッチを使用して最初から一歩ずつ問題を解決してください。最初にcsvファイルを読み込んでその値を印刷できますか?次に気にかけている値を分離することはできますか?

drawRow()関数を含む別々の空白のスケッチを作成して、csvファイルから取得してビジュアライゼーションを描くことができますか?この関数をテストするために、今のところパラメータをハードコードするだけです。

両方のスケッチが完全に機能するようになると、csvファイルから取得したデータを使用してdrawRow()関数を呼び出すことでそれらを結合できます。

関連する問題