1
1
use plotters:: prelude:: * ;
2
2
3
- use chrono:: { TimeZone , Utc } ;
3
+ use chrono:: NaiveDate ;
4
4
5
5
use std:: error:: Error ;
6
6
7
+ // it's safe to use unwrap because we use known good values in test cases
8
+ macro_rules! create_date {
9
+ ( $year: expr, $month: expr, $day: expr) => {
10
+ NaiveDate :: from_ymd_opt( $year, $month, $day) . unwrap( )
11
+ } ;
12
+ }
13
+
7
14
const OUT_FILE_NAME : & ' static str = "plotters-doc-data/slc-temp.png" ;
8
15
fn main ( ) -> Result < ( ) , Box < dyn Error > > {
9
16
let root = BitMapBackend :: new ( OUT_FILE_NAME , ( 1024 , 768 ) ) . into_drawing_area ( ) ;
@@ -20,11 +27,11 @@ fn main() -> Result<(), Box<dyn Error>> {
20
27
. set_label_area_size ( LabelAreaPosition :: Right , 60 )
21
28
. set_label_area_size ( LabelAreaPosition :: Bottom , 40 )
22
29
. build_cartesian_2d (
23
- ( Utc . ymd ( 2010 , 1 , 1 ) ..Utc . ymd ( 2018 , 12 , 1 ) ) . monthly ( ) ,
30
+ ( create_date ! ( 2010 , 1 , 1 ) ..create_date ! ( 2018 , 12 , 1 ) ) . monthly ( ) ,
24
31
14.0 ..104.0 ,
25
32
) ?
26
33
. set_secondary_coord (
27
- ( Utc . ymd ( 2010 , 1 , 1 ) ..Utc . ymd ( 2018 , 12 , 1 ) ) . monthly ( ) ,
34
+ ( create_date ! ( 2010 , 1 , 1 ) ..create_date ! ( 2018 , 12 , 1 ) ) . monthly ( ) ,
28
35
-10.0 ..40.0 ,
29
36
) ;
30
37
@@ -42,13 +49,13 @@ fn main() -> Result<(), Box<dyn Error>> {
42
49
. draw ( ) ?;
43
50
44
51
chart. draw_series ( LineSeries :: new (
45
- DATA . iter ( ) . map ( |( y, m, t) | ( Utc . ymd ( * y, * m, 1 ) , * t) ) ,
52
+ DATA . iter ( ) . map ( |( y, m, t) | ( create_date ! ( * y, * m, 1 ) , * t) ) ,
46
53
& BLUE ,
47
54
) ) ?;
48
55
49
56
chart. draw_series (
50
57
DATA . iter ( )
51
- . map ( |( y, m, t) | Circle :: new ( ( Utc . ymd ( * y, * m, 1 ) , * t) , 3 , BLUE . filled ( ) ) ) ,
58
+ . map ( |( y, m, t) | Circle :: new ( ( create_date ! ( * y, * m, 1 ) , * t) , 3 , BLUE . filled ( ) ) ) ,
52
59
) ?;
53
60
54
61
// To avoid the IO failure being ignored silently, we manually call the present function
0 commit comments