1

我有这样的熊猫数据框:

     LEVEL_1      LEVEL_2    Freq  Percentage
0       HIGH          HIGH   8842      17.684
1    AVERAGE           LOW   2802       5.604
2        LOW           LOW  22198      44.396
3    AVERAGE       AVERAGE   6804      13.608
4        LOW       AVERAGE   2030       4.060
5       HIGH       AVERAGE   3666       7.332
6    AVERAGE          HIGH   2887       5.774
7        LOW          HIGH    771       1.542

我可以得到 LEVEL_1 和 LEVEL_2 的瓷砖:

 from statsmodels.graphics.mosaicplot import mosaic
 mosaic(df, ['LEVEL_1','LEVEL_2'])

在此处输入图像描述
我只想将频率和百分比放在马赛克图的每个图块的中心。我怎样才能做到这一点?

4

1 回答 1

4

这是一个开始。请注意,我必须在 DataFrame 中添加一行零以进行标记。lambda您可以通过函数中的字符串格式使标签更好。您还需要重新排序标题。

import pandas as pd
from statsmodels.graphics.mosaicplot import mosaic
import io
d = io.StringIO()
d.write("""     LEVEL_1      LEVEL_2    Freq  Percentage\n
       HIGH          HIGH   8842      17.684\n
    AVERAGE           LOW   2802       5.604\n
        LOW           LOW  22198      44.396\n
    AVERAGE       AVERAGE   6804      13.608\n
        LOW       AVERAGE   2030       4.060\n
       HIGH       AVERAGE   3666       7.332\n
    AVERAGE          HIGH   2887       5.774\n
        LOW          HIGH    771       1.542""")
d.seek(0)
df = pd.read_csv(d, skipinitialspace=True, delim_whitespace=True)
df = df.append({'LEVEL_1': 'HIGH', 'LEVEL_2': 'LOW', 'Freq': 0, 'Percentage': 0}, ignore_index=True)
df = df.sort_values(['LEVEL_1', 'LEVEL_2'])
df = df.set_index(['LEVEL_1', 'LEVEL_2'])
print(df)

mosaic(df['Freq'], labelizer=lambda k: df.loc[k].values);

来自 Jupyter 笔记本的绘图

于 2016-09-21T21:20:08.643 回答