Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit b2b8eb8

Browse files
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)

AltStyle によって変換されたページ (->オリジナル) /