我想知道是否有人能够对这个问题有所了解,我对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 => }
}
}