.set("c:description", "X axis facets above graph")
.set(
"transform",
- format!("translate({} {})", rect.0[Axis2::X].0, rect.0[Axis2::Y].0),
+ format!("translate({} {})", inner.0[Axis2::X].0, rect.0[Axis2::Y].0),
);
let bottom = x_headings
.render(Side::Bottom)
fn render(&self, side: Side) -> Group {
let span = Span(0.0, self.width).subdivide(self.n_facets, 5.0);
let mut group = Group::new();
+
/*
group.append(
- Rect(enum_map! {
- Axis2::X => Span(0.0, self.width),
- Axis2::Y => Span(0.0, self.height(side))
- })
- .as_svg()
- .set("fill", "blue"),
- );*/
+ Rect(enum_map! {
+ Axis2::X => Span(0.0, self.width),
+ Axis2::Y => Span(0.0, self.height(side))
+ })
+ .as_svg()
+ .set("fill", "none")
+ .set("stroke", "red"),
+ );*/
let mut y = 0.0;
for axis in self.axes.iter().filter(|axis| axis.side == side) {
if dbg!(axis.axis.combine_axis_labels) {
};
y += axis.height;
}
- for height in self.facets.iter().filter(|height| height.side == side) {
+ let heights = self
+ .facets
+ .iter()
+ .rev()
+ .filter(|height| height.side == side);
+ let parents = std::iter::once(None).chain(heights.clone().map(Some));
+ for (height, parent) in zip(heights, parents) {
if let Some(axis_label) = height.row.axis_label() {
- dbg!(&axis_label);
- group.append(
- svg::node::element::Text::new(axis_label)
- .set("x", self.width / 2.0)
- .set("y", y)
- .set("dominant-baseline", "hanging")
- .set("text-anchor", "middle"),
- );
+ let parent = if let Some(facet_level) = height.row.facet_level
+ && !facet_level.axis.combine_axis_labels
+ {
+ parent
+ } else {
+ None
+ };
+
+ match parent {
+ Some(parent) => {
+ // XXX the corresponding code for measurement in
+ // FacetHeading::new doesn't use the right width for
+ // this case.
+ for column in &parent.row.columns {
+ let span = span.range(&column.columns);
+ group.append(
+ svg::node::element::Text::new(&axis_label)
+ .set("x", span.midpoint())
+ .set("y", y)
+ .set("dominant-baseline", "hanging")
+ .set("text-anchor", "middle"),
+ );
+ }
+ }
+ None => {
+ group.append(
+ svg::node::element::Text::new(axis_label)
+ .set("x", self.width / 2.0)
+ .set("y", y)
+ .set("dominant-baseline", "hanging")
+ .set("text-anchor", "middle"),
+ );
+ }
+ }
}
y += height.axis_label_height;
</dimension>
</coordinates>
<faceting id="faceting_1332" method="cross">
- <cross id="cross_1333">
+ <nest id="cross_1333">
<variableReference ref="variable11" />
<variableReference ref="variable12" />
- </cross>
+ </nest>
</faceting>
<facetLayout id="facetLayout_1336" topDown="true">
<facetLevel gap="2%" id="facetLabel_panel_1" level="1">
- <axis id="axis_panel_1" opposite="true" repeat="never" style="axis_panel_1s">
+ <axis id="axis_panel_1" combineAxisLabels="false" opposite="true" repeat="never" style="axis_panel_1s">
<label id="label_panel_1" style="style_1343" textFrameStyle="style_1341">
<text id="text_1340">Variable 11</text>
</label>