Skip to content

Commit 05e4da6

Browse files
mekko example
1 parent 602814d commit 05e4da6

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed

Diff for: doc/python/bar-charts.md

+50
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,56 @@ fig = go.Figure(data=[go.Bar(
287287
fig.show()
288288
```
289289

290+
Bar charts with custom widths can be used to make mekko charts (also known as marimekko charts, mosaic plots, or variwide charts).
291+
292+
```python
293+
import plotly.graph_objects as go
294+
import numpy as np
295+
296+
labels = ["apples","oranges","pears","bananas"]
297+
widths = np.array([10,20,20,50])
298+
299+
data = {
300+
"South": [50,80,60,70],
301+
"North": [50,20,40,30]
302+
}
303+
304+
fig = go.Figure()
305+
for key in data:
306+
fig.add_trace(go.Bar(
307+
name=key,
308+
y=data[key],
309+
x=np.cumsum(widths)-widths,
310+
width=widths,
311+
offset=0,
312+
customdata=np.transpose([labels, widths*data[key]]),
313+
texttemplate="%{y} x %{width} =<br>%{customdata[1]}",
314+
textposition="inside",
315+
textangle=0,
316+
textfont_color="white",
317+
hovertemplate="<br>".join([
318+
"label: %{customdata[0]}",
319+
"width: %{width}",
320+
"height: %{y}",
321+
"area: %{customdata[1]}",
322+
])
323+
))
324+
325+
fig.update_xaxes(
326+
tickvals=np.cumsum(widths)-widths/2,
327+
ticktext= ["%s<br>%d" % (l, w) for l, w in zip(labels, widths)]
328+
)
329+
330+
fig.update_xaxes(range=[0,100])
331+
fig.update_yaxes(range=[0,100])
332+
333+
fig.update_layout(
334+
title_text="Marimekko Chart",
335+
barmode="stack",
336+
uniformtext=dict(mode="hide", minsize=10),
337+
)
338+
```
339+
290340
### Customizing Individual Bar Base
291341

292342
```python

0 commit comments

Comments
 (0)