Хобрук: Ваш путь к мастерству в программировании

Использование визуализации данных для создания иллюстраций

Я пытаюсь создать визуализацию дерева по данным, что-то вроде искусства визуализации данных. Моя ссылка на визуальный элемент: http://www.openprocessing.org/sketch/5918, однако создаются мои случайные целые числа с плавающей запятой. Можно ли создать такие же визуальные эффекты, но эллипсы, сгенерированные такими сложными данными, как http://data.un.org/Data.aspx?q=mortality+&d=PopDiv&f=variableID%3a80 ? Я использую Обработку.

Нужны ли какие-либо библиотеки и как мне изменить код в качестве отправной точки, чтобы он рисовался данными, а не случайными переменными?

    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 строк.


  • В текущей форме этот вопрос слишком широк для переполнения стека. Stack Overflow на самом деле не предназначен для общих вопросов о том, как мне это сделать. Он предназначен больше для конкретных вопросов. Я пробовал X, ожидал Y, но получил Z вместо типичных вопросов. Пожалуйста, отредактируйте свое сообщение, чтобы включить минимально воспроизводимый пример. Это должен быть просто пример, который мы можем запустить, чтобы увидеть вашу проблему. , не весь проект. Используйте жестко закодированные значения всякий раз, когда это возможно, и мы пойдем оттуда. 01.10.2016

Ответы:


1

Нужны ли библиотеки

Вам не нужны никакие библиотеки. Вы можете просто загрузить CSV-файл, используя функцию loadTable(). Дополнительная информация доступна в справке.

и как мне нужно изменить код в качестве отправной точки, чтобы он мог рисоваться данными, а не случайными переменными?

Пытаться заставить случайный код, найденный в Интернете, делать то, что вам нужно, не. Вы просто доставите себе головную боль, как видите сейчас.

Вместо этого начните с пустого наброска и шаг за шагом решайте проблему. Можете ли вы сначала просто загрузить файл csv и распечатать значения? Тогда можете ли вы изолировать ценности, которые вам небезразличны?

Можете ли вы создать отдельный пустой эскиз, содержащий функцию drawRow(), которая принимает параметры, полученные из CSV-файла, и рисует визуализацию? Просто жестко задайте параметры, чтобы протестировать эту функцию.

Когда оба примерных скетча работают идеально, вы можете объединить их, вызвав функцию drawRow(), используя данные, полученные из CSV-файла.

04.10.2016
Новые материалы

Решения DBA Metrix
DBA Metrix Solutions предоставляет удаленного администратора базы данных (DBA), который несет ответственность за внедрение, обслуживание, настройку, восстановление базы данных, а также другие..

Начало работы с Блум
Обзор и Codelab для генерации текста с помощью Bloom Оглавление Что такое Блум? Некоторые предостережения Настройка среды Скачивание предварительно обученного токенизатора и модели..

Создание кнопочного меню с использованием HTML, CSS и JavaScript
Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

Внедрите OAuth в свои веб-приложения для повышения безопасности
OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

Классы в JavaScript
class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

Как свинг-трейдеры могут использовать ИИ для больших выигрышей
По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

Как построить любой стол
Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...