如何使 Squarify 标签的字体大小与正方形的大小成正比?

How do you make the font size of Squarify label proportionate to the size of the square?

我正在尝试用一些方块比其他方块大得多的方块来制作树状图。

title counts labels
A 100 A - 100
B 30 B - 30
C 25 C - 25
D 2 D - 2
E 2 E - 2
F 2 F - 2
G 2 G - 2
        fig, ax = plt.subplots(1, figsize = (12,12))
        ax = squarify.plot(sizes=df['counts'], 
                           label=df['labels'],
                           alpha=0.5)
        plt.axis('off')
        plt.show()

有没有办法让A的字号和正方形一样大,B的字号比A的小,C的字号比B的小一点,其他的都很小?

我找到了一个参数:

text_kwargs={'fontsize':10}

但它不允许我插入尺寸列表。

也许here可以给你一些提示来解决你的问题。

最近我创建了一个 matplotlib-extra 项目,其中包括一些对 matplotlib 的额外功能。目前它有一个 treemap 和一个 AutoFitText class。 treemap 支持分层树状图。

对于你的情况,这很简单:

import mpl_extra.treemap as tr
import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame({'title':list('ABCDEFG'), 
                   'counts':[100, 30, 25, 2, 2, 2, 2]})
df['labels'] = [f'{a} - {b}' for a,b in zip(df['title'], df['counts'])]

fig, ax = plt.subplots(figsize=(7,7), dpi=100, subplot_kw=dict(aspect=1.156))

tr.treemap(ax, df, area='counts', labels='labels', 
           cmap='Set2', fill='title',
           rectprops=dict(ec='w'),
           textprops=dict(c='w'))

ax.axis('off')

它给出了以下树状图: