commit 4c4ebd0a6e84263c06926abc4b8f4780bcf72511
parent 927f227b3b2296f9d9641dee9e9223c5ebf6f7e5
Author: Kyle Milz <kyle@getaddrinfo.net>
Date:   Fri, 24 Oct 2014 00:35:14 -0600
site_gen: add x, y axis labels, use viewBox, add circles at data points
Diffstat:
| M | site_gen.pl |  |  | 52 | +++++++++++++++++++++++++++++++++++++++++++++------- | 
1 file changed, 45 insertions(+), 7 deletions(-)
diff --git a/site_gen.pl b/site_gen.pl
@@ -78,11 +78,11 @@ sub gen_chart
 	vprintf("\tdomain: $x_min - $x_max\n");
 	vprintf("\trange:  $y_min - $y_max\n");
 
-	my $svg = SVG->new(width => 800, height => 200);
+	my $svg = SVG->new(viewBox => "0 0 1000 250");
 
 	$query = "select distinct vendor from prices where part_num = ?";
 	my $vendors = $dbh->selectcol_arrayref($query, undef, $part_num);
-	vprintf("\tvendors: ");
+	vprintf("\tvendors: " . scalar @$vendors . "\n");
 
 	for (@$vendors) {
 		$query = "select date from prices where " .
@@ -96,21 +96,59 @@ sub gen_chart
 			$part_num, $_);
 		vprintf("\tprices found: " . scalar @$prices . "\n");
 
-		my $points = $svg->get_path(x => $dates, y => $prices,
-			-closed => "false");
+		my @xs = map { ($_ - $x_min) / ($x_max - $x_min) * 900 + 30 } @$dates;
+		my @ys = map { ($_ - $y_min) / ($y_max - $y_min) * 210 + 20 } @$prices;
+
+		my $vendor_color = "#$cfg->{vendors}{$_}{color}";
+
+		my $i = 0;
+		for (@xs) {
+			$svg->circle(cx => $xs[$i], cy => $ys[$i], r => 2,
+			style => {
+				'fill-opacity' => 1,
+				'fill' => $vendor_color,
+				'stroke' => $vendor_color
+			}
+			);
+			$i++;
+		}
 
+		my $points = $svg->get_path(x => \@xs, y => \@ys,
+			-closed => "false");
 		$svg->path(
 			%$points,
 			id => $_,
 			style => {
 				'fill-opacity' => 0,
-				'fill' => 'green',
-				'stroke' => 'rgb(250, 123, 123)'
+				'fill' => $vendor_color,
+				'stroke' => $vendor_color,
+				'stroke-width' => 2,
 			}
 		);
 	}
 
-	$svg->text(id => 'l1', x => 10, y => 30)->cdata($part_num);
+	for my $i (0..5) {
+		my $price = $y_max - $i * ($y_max - $y_min) / 5;
+		my $y = 20 + $i * (210 / 5);
+		$svg->text(id => $i, x => 950, y => $y,
+			style => "font-size: 12px; fill: #666",
+			"text-anchor" => "start")->cdata("\$$price");
+		$svg->line(id => "line_$i", x1 => 30, y1 => $y,
+			x2 => 930, y2 => $y,
+				"fill" => "#CCC",
+				"stroke" => "#CCC",
+				"stroke-width" => 1,
+			);
+	}
+
+	for my $i (0..5) {
+		my $time = $x_min + $i * ($x_max - $x_min) / 5;
+		my $date = strftime "%b %e %Y", localtime($time);
+		my $x = 30 + $i * 900 / 5;
+		$svg->text(id => $time, x => $x, y => 250,
+			style => "font-size: 12px; fill: #666",
+			"text-anchor" => "middle")->cdata($date);
+	}
 
 	open my $svg_fh, ">", "$svg_dir/$part_num.svg" or die $!;
 	print $svg_fh $svg->xmlify;