Skip to content

Commit e6bc632

Browse files
committed
fix: align vertical set bars with matrix columns
- Add explicit X-axis encoding to set bars to match matrix encoding - Change set_bar_chart width from full width to matrix_width - Create spacer element for top-right area to align cardinality bars - Restructure layout with hconcat for top and bottom rows - Bars now align horizontally with corresponding matrix columns
1 parent 8de3746 commit e6bc632

4 files changed

Lines changed: 624 additions & 492 deletions

File tree

altair_upset/components.py

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@ def create_vertical_set_bars(
145145
x=alt.X(
146146
"set_order:N",
147147
axis=alt.Axis(grid=False, labels=False, ticks=False, domain=False),
148+
scale=alt.Scale(paddingInner=0, paddingOuter=0),
148149
title=None,
149150
),
150151
color=alt.Color(
@@ -162,12 +163,24 @@ def create_vertical_set_bars(
162163
set_label_bg.mark_bar(size=set_bar_size, color=main_color)
163164
.transform_filter(alt.datum["is_intersect"] == 1)
164165
.encode(
166+
x=alt.X(
167+
"set_order:N",
168+
axis=alt.Axis(grid=False, labels=False, ticks=False, domain=False),
169+
scale=alt.Scale(paddingInner=0, paddingOuter=0),
170+
title=None,
171+
),
165172
y=alt.Y(
166173
"sum(count):Q",
167-
axis=alt.Axis(grid=False, tickCount=3, domain=False),
174+
axis=alt.Axis(
175+
grid=False,
176+
tickCount=3,
177+
domain=False,
178+
offset=0,
179+
titlePadding=5,
180+
),
168181
scale=alt.Scale(zero=True, padding=0, nice=False),
169182
title="Set Size",
170-
)
183+
),
171184
)
172185
)
173186

@@ -191,12 +204,14 @@ def create_vertical_matrix(
191204
x=alt.X(
192205
"set_order:N",
193206
axis=alt.Axis(grid=False, labels=False, ticks=False, domain=False),
207+
scale=alt.Scale(paddingInner=0, paddingOuter=0),
194208
title=None,
195209
),
196210
y=alt.Y(
197211
"intersection_id:N",
198212
axis=alt.Axis(grid=False, labels=False, ticks=False, domain=False),
199213
sort=y_sort,
214+
scale=alt.Scale(paddingInner=0, paddingOuter=0),
200215
title=None,
201216
),
202217
color=alt.value("#E6E6E6"),
@@ -217,9 +232,15 @@ def create_vertical_matrix(
217232
base.mark_bar(size=line_connection_size, color=main_color)
218233
.transform_filter(alt.datum["is_intersect"] == 1)
219234
.encode(
220-
x=alt.X("min(set_order):N"),
235+
x=alt.X(
236+
"min(set_order):N", scale=alt.Scale(paddingInner=0, paddingOuter=0)
237+
),
221238
x2=alt.X2("max(set_order):N"),
222-
y=alt.Y("intersection_id:N", sort=y_sort),
239+
y=alt.Y(
240+
"intersection_id:N",
241+
sort=y_sort,
242+
scale=alt.Scale(paddingInner=0, paddingOuter=0),
243+
),
223244
)
224245
)
225246

@@ -248,11 +269,14 @@ def create_horizontal_cardinality_bar(
248269
"intersection_id:N",
249270
axis=alt.Axis(grid=False, labels=False, ticks=False, domain=True),
250271
sort=y_sort,
272+
scale=alt.Scale(paddingInner=0, paddingOuter=0),
251273
title=None,
252274
),
253275
x=alt.X(
254276
"max(count):Q",
255-
axis=alt.Axis(grid=False, tickCount=3, orient=x_axis_orient),
277+
axis=alt.Axis(
278+
grid=False, tickCount=3, orient=x_axis_orient, offset=0, titlePadding=5
279+
),
256280
scale=alt.Scale(zero=True, padding=0, nice=False),
257281
title="Intersection Size",
258282
),

altair_upset/config.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ def upsetaltair_top_level_configuration(
22
base, legend_orient="top-left", legend_symbol_size=30
33
):
44
return (
5-
base.configure_view(stroke=None)
5+
base.configure_view(stroke=None, continuousHeight=300, continuousWidth=400)
66
.configure_title(
77
fontSize=18, fontWeight=400, anchor="start", subtitlePadding=10
88
)

altair_upset/upset.py

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -603,7 +603,7 @@ def UpSetVertical(
603603
)
604604

605605
set_bar_chart = (set_label_bg + set_label + set_bar).properties(
606-
width=width, height=set_bar_height
606+
width=matrix_width, height=set_bar_height
607607
)
608608

609609
circle_bg, rect_bg, circle, line_connection = create_vertical_matrix(
@@ -642,10 +642,22 @@ def UpSetVertical(
642642
.properties(width=cardinality_bar_width, height=matrix_height)
643643
)
644644

645+
# Create empty spacer for top-right area
646+
spacer = (
647+
alt.Chart(pd.DataFrame({"x": [0]}))
648+
.mark_text()
649+
.encode(text=alt.value(""))
650+
.properties(width=cardinality_bar_width, height=set_bar_height)
651+
)
652+
645653
# Combine components vertically with cardinality bars
646654
upsetaltair = (
647655
alt.vconcat(
648-
set_bar_chart.properties(width=width),
656+
alt.hconcat(
657+
set_bar_chart,
658+
spacer,
659+
spacing=0,
660+
).resolve_scale(x="shared"),
649661
alt.hconcat(
650662
matrix_view,
651663
cardinality_bar_chart,
@@ -668,7 +680,8 @@ def UpSetVertical(
668680
"fontWeight": 500,
669681
"subtitleColor": main_color,
670682
"subtitleFontSize": 14,
671-
}
683+
},
684+
autosize=alt.AutoSizeParams(type="fit", resize=False, contains="padding"),
672685
)
673686

674687
return UpSetChart(chart, data, sets)

0 commit comments

Comments
 (0)