提取csv数据并使用scala和处理绘制2D数组

时间:2015-03-17 15:58:27

标签: arrays scala plot processing

我想知道是否有人能够对这个问题有所了解,我对scala和一般非R编程都很陌生,所以我还在学习一些绳索。

我要做的是绘制一个2D数组,因此灰度上的正方形网格颜色越深,表示更高的值。我在网格上有一个x和y位置的csv文件,第三个值z将由颜色表示。

我编写了两段代码,它们可以执行我想要的操作,一条代码从csv文件中提取数据,另一条代码绘制提取的数据类型。我遇到的问题是让他们一起工作。

因此,代码1提取的数据如下:

x,y,z

50,16,52

21,25,29

13,12,445

等...

代码:

import scala.io.Source
import java.io._

///////extract the data
object DataExtractor extends App {

  def using[T <: Closeable, R](resource: T)(block: T => R): R = {
    try { block(resource) }
    finally { resource.close() }
  }
      for (line <- io.Source.fromFile("C://~//TestData.csv").getLines.drop(1)) {
         val array = line.split(",")
        try {
          val xloc = array(0)
          val yloc = array(1)
          val intense = array (2)
      }catch { case ex: Exception => }
      }
}

这给出了csv的每一行x轴位置(xloc),y轴(yloc)以及强度值(强烈)的值,以便绘制网格方形的阴影。 / p>

第二段代码使用“处理”

绘制2D数组
/////////plotting data
import processing.core._
class FT extends processing.core.PApplet {

  val xloc = 9 //define locations
  val yloc = 1
  val intense = 4 //define intensity of colour
  var grid: Array[Array[Cell]] = _

  var cols: Int = 100 // grid size
  var rows: Int = 100

  override def setup() {
    size(200, 200) //window size
    grid = Array.ofDim[Cell](cols, rows)

    for (i <- 0 until cols; j <- 0 until rows) {
      grid(i)(j) = new Cell(i * 10, j * 10, 10, 10, i + j) //cell size
    }
  }

  override def draw() {
    background(0)
    for (i <- 0 until cols; j <- 0 until rows) {

      grid(i)(j).display()
      grid(i)(j).height()
      grid(i)(j).xl()
      grid(i)(j).yl()
    }
  }

  class Cell(var x: Float,
             var y: Float,
             var w: Float,
             var h: Float,
             var strength: Float) {

    def display() {
      stroke(255)
      fill(strength)
      rect(x, y, w, h)

    }
    def height() {
      strength = intense
    }
    def xl() {
      x = xloc
    }
    def yl() {
      y = yloc
    }
  }

}

正如您所看到的,在我的第二段代码中,我给出了xloc,yloc和强烈的任意值。我要做的是循环一个csv文件,并为数据中的每一行插入绘图代码,以便最终结果是基于csv文件中的x,y和z值的不同颜色强度的网格

任何帮助将不胜感激,因为我仍在试图弄清楚如何在scala中将代码块链接在一起。

编辑:

所以我尝试的是整合两段代码,但是我遇到了一个新问题,即scala不会在方法(var网格)中初始化局部变量。但是通过在循环之外移动网格,它不再能够访问Cell类......任何指针或想法都将非常受欢迎

import processing.core._
import scala.io.Source
import java.io._



class FT extends processing.core.PApplet {

  for (line <- io.Source.fromFile("C:~TestData.csv").getLines.drop(1)) {

        try {
          val array = line.split(",")
 var xloct = array(0)
          var yloct = array(1)
          var intenset = array (2)
          val xloc = xloct.toFloat
          val yloc = yloct.toFloat
          val intense = intenset.toFloat

  var grid: Array[Array[Cell]] =_ // error "local variables must be initialized"

  var cols: Int = 100 // grid size
  var rows: Int = 100

   def setup() {
    size(200, 200) //window size
    grid = Array.ofDim[Cell](cols, rows)

    for (i <- 0 until cols; j <- 0 until rows) {
      grid(i)(j) = new Cell(i * 10, j * 10, 10, 10, i + j) //cell size
    }
  }

   def draw() {
    background(0)
    for (i <- 0 until cols; j <- 0 until rows) {

      grid(i)(j).display()
      grid(i)(j).height()
      grid(i)(j).xl()
      grid(i)(j).yl()
    }
  }

  class Cell(var x: Float,
             var y: Float,
             var w: Float,
             var h: Float,
             var strength: Float) {

    def display() {
      stroke(255)
      fill(strength)
      rect(x, y, w, h)

    }
    def height() {
      strength = intense
    }
    def xl() {
      x = xloc
    }
    def yl() {
      y = yloc
    }
  }

} catch { case ex: Exception => }
}
}

0 个答案:

没有答案