Skip to content

Commit b2b8eb8

Browse files
committed
add multi-value support to table fields
Signed-off-by: Andrei Gherghescu <8067229+andrei-ng@users.noreply.github.com>
1 parent 428295d commit b2b8eb8

File tree

5 files changed

+471
-57
lines changed

5 files changed

+471
-57
lines changed

examples/basic_charts/src/main.rs

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@ use plotly::{
1313
TicksDirection, TraceOrder,
1414
},
1515
sankey::{Line as SankeyLine, Link, Node},
16-
traces::table::{Cells, Header},
16+
traces::table::{
17+
Align as TableAlign, Cells, Fill as TableFill, Font as TableFont, Header, Line as TableLine,
18+
},
1719
Bar, Pie, Plot, Sankey, Scatter, ScatterPolar, Table,
1820
};
1921
use plotly_utils::write_example_to_html;
@@ -878,8 +880,26 @@ fn custom_node_sankey_diagram(show: bool, file_name: &str) {
878880
// ANCHOR: table_chart
879881
fn table_chart(show: bool, file_name: &str) {
880882
let trace = Table::new(
881-
Header::new(vec![String::from("col1"), String::from("col2")]),
882-
Cells::new(vec![vec![1, 2], vec![2, 3]]),
883+
Header::new(vec![String::from("col1"), String::from("col2")])
884+
.font(TableFont::new().color_array(vec![NamedColor::Black, NamedColor::Blue]))
885+
.align_array(vec![TableAlign::Left, TableAlign::Right]),
886+
Cells::new(vec![vec![1, 2], vec![2, 3]])
887+
.align_matrix(vec![
888+
vec![TableAlign::Left, TableAlign::Right],
889+
vec![TableAlign::Right, TableAlign::Left],
890+
])
891+
.fill(TableFill::new().color_matrix(vec![
892+
vec![NamedColor::LightBlue, NamedColor::LightCoral],
893+
vec![NamedColor::LightGreen, NamedColor::LightYellow],
894+
]))
895+
.line(
896+
TableLine::new()
897+
.color_matrix(vec![
898+
vec![NamedColor::Black, NamedColor::Blue],
899+
vec![NamedColor::Green, NamedColor::Yellow],
900+
])
901+
.width_matrix(vec![vec![2.5, 3.3], vec![4.5, 5.3]]),
902+
),
883903
);
884904
let mut plot = Plot::new();
885905
plot.add_trace(trace);

plotly/src/common/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,7 @@ where
206206
{
207207
Scalar(T),
208208
Vector(Vec<T>),
209+
Matrix(Vec<Vec<T>>),
209210
}
210211

211212
#[derive(Serialize, Clone, Debug, PartialEq, Eq)]

plotly/src/layout/polar.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -549,7 +549,7 @@ pub enum ThetaUnit {
549549
#[cfg(test)]
550550
mod tests {
551551
use super::*;
552-
use crate::{common::Mode, Layout, Plot, ScatterPolar};
552+
use crate::Layout;
553553

554554
// The focus of the test is serialization, so we test all options for
555555
// [`LayoutPolar`], even though some of those options would normally be mutually

plotly/src/plot.rs

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -829,6 +829,9 @@ mod tests {
829829
#[cfg(any(feature = "kaleido", feature = "plotly_static"))]
830830
use {base64::engine::general_purpose, base64::Engine};
831831

832+
#[cfg(feature = "plotly_static")]
833+
use crate::export::sync::ExporterSyncExt;
834+
832835
use super::*;
833836
use crate::Scatter;
834837

@@ -1001,7 +1004,8 @@ mod tests {
10011004
.webdriver_port(get_unique_port())
10021005
.build()
10031006
.unwrap();
1004-
plot.write_image_with_exporter(&mut exporter, &dst, ImageFormat::PNG, 1024, 680, 1.0)
1007+
exporter
1008+
.write_image(&plot, &dst, ImageFormat::PNG, 1024, 680, 1.0)
10051009
.unwrap();
10061010
assert!(dst.exists());
10071011
let metadata = std::fs::metadata(&dst).expect("Could not retrieve file metadata");
@@ -1021,7 +1025,8 @@ mod tests {
10211025
.webdriver_port(get_unique_port())
10221026
.build()
10231027
.unwrap();
1024-
plot.write_image_with_exporter(&mut exporter, &dst, ImageFormat::JPEG, 1024, 680, 1.0)
1028+
exporter
1029+
.write_image(&plot, &dst, ImageFormat::JPEG, 1024, 680, 1.0)
10251030
.unwrap();
10261031
assert!(dst.exists());
10271032
let metadata = std::fs::metadata(&dst).expect("Could not retrieve file metadata");
@@ -1041,7 +1046,8 @@ mod tests {
10411046
.webdriver_port(get_unique_port())
10421047
.build()
10431048
.unwrap();
1044-
plot.write_image_with_exporter(&mut exporter, &dst, ImageFormat::SVG, 1024, 680, 1.0)
1049+
exporter
1050+
.write_image(&plot, &dst, ImageFormat::SVG, 1024, 680, 1.0)
10451051
.unwrap();
10461052
assert!(dst.exists());
10471053
let metadata = std::fs::metadata(&dst).expect("Could not retrieve file metadata");
@@ -1069,7 +1075,8 @@ mod tests {
10691075
.webdriver_port(get_unique_port())
10701076
.build()
10711077
.unwrap();
1072-
plot.write_image_with_exporter(&mut exporter, &dst, ImageFormat::PDF, 1024, 680, 1.0)
1078+
exporter
1079+
.write_image(&plot, &dst, ImageFormat::PDF, 1024, 680, 1.0)
10731080
.unwrap();
10741081
assert!(dst.exists());
10751082
let metadata = std::fs::metadata(&dst).expect("Could not retrieve file metadata");
@@ -1089,7 +1096,8 @@ mod tests {
10891096
.webdriver_port(get_unique_port())
10901097
.build()
10911098
.unwrap();
1092-
plot.write_image_with_exporter(&mut exporter, &dst, ImageFormat::WEBP, 1024, 680, 1.0)
1099+
exporter
1100+
.write_image(&plot, &dst, ImageFormat::WEBP, 1024, 680, 1.0)
10931101
.unwrap();
10941102
assert!(dst.exists());
10951103
let metadata = std::fs::metadata(&dst).expect("Could not retrieve file metadata");
@@ -1109,8 +1117,8 @@ mod tests {
11091117
.build()
11101118
.unwrap();
11111119

1112-
let image_base64 = plot
1113-
.to_base64_with_exporter(&mut exporter, ImageFormat::PNG, 200, 150, 1.0)
1120+
let image_base64 = exporter
1121+
.to_base64(&plot, ImageFormat::PNG, 200, 150, 1.0)
11141122
.unwrap();
11151123

11161124
assert!(!image_base64.is_empty());
@@ -1134,9 +1142,7 @@ mod tests {
11341142
.webdriver_port(get_unique_port())
11351143
.build()
11361144
.unwrap();
1137-
let image_svg = plot
1138-
.to_svg_with_exporter(&mut exporter, 200, 150, 1.0)
1139-
.unwrap();
1145+
let image_svg = exporter.to_svg(&plot, 200, 150, 1.0).unwrap();
11401146

11411147
assert!(!image_svg.is_empty());
11421148

@@ -1172,12 +1178,13 @@ mod tests {
11721178
.build()
11731179
.unwrap();
11741180

1175-
assert!(!plot
1176-
.to_base64_with_exporter(&mut exporter, ImageFormat::PNG, 1024, 680, 1.0)
1181+
assert!(!exporter
1182+
.to_base64(&plot, ImageFormat::PNG, 1024, 680, 1.0)
11771183
.unwrap()
11781184
.is_empty());
11791185

1180-
plot.write_image_with_exporter(&mut exporter, &dst, ImageFormat::PNG, 800, 600, 1.0)
1186+
exporter
1187+
.write_image(&plot, &dst, ImageFormat::PNG, 800, 600, 1.0)
11811188
.unwrap();
11821189
assert!(dst.exists());
11831190

0 commit comments

Comments
 (0)