/** This program plots the average cambridge temperature for any moment of the year, based on Fourier analysis of average temperatures. */ use cambridgetempFourier.frink use Grid.frink g = new graphics g.stroke[2 hours] g.font["SansSerif", 2 degF] p = new polyline tz = "US/Eastern" sd = beginningOfYear[now[], tz] ed = beginningOfYearPlus[now[], 1, tz] for d = sd to ed step 30 min p.addPoint[JD[d], -cambridgeTemp[d]] g.add[p] grid = new Grid grid.font["Monospaced", .9 degF] grid.color[0,0,0,.4] monthFunction = {|date, tz| fmt = ### MMM ### date -> [fmt, tz] } // TODO: Make this easier in Grid.frink. We should be able to make lines // and labels in one call. grid.makeVerticalCalendarLines[g, Grid.MONTH, false, tz] grid.makeVerticalCalendarLabels[g, Grid.MONTH, false, tz, monthFunction] // Draw degree lines (Can we make this easier in Grid.frink? The tricky part // here is that Fahrenheit lines don't follow a multiplicative offset of any // unit of temperature like Kelvin. If you wrote this as a multiple of K, // the lines would be incorrectly offset.) [first, highest, last, lowest] = getBoundingBox[g] g.font["SansSerif", .9 degF] for temp = ceil[F[-lowest]] to floor[F[-highest]] { f = F[temp] g.line[first, -f, last, -f] g.text[temp, first, -f, "right", "center"] } g.add[grid.getGrid[]] g.show[] g.write["plotCambridgeTemp.svg", 1024, 800] g.write["plotCambridgeTemp.html", 1024, 800]