Мозаичный график с процентными и счетными значениями в качестве меток в пандах DF
У меня есть пандас dataframe, как это:
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'])
введите описание изображения здесь
Я просто хочу поместить Freq и Percentage в центр каждой плитки мозаичного сюжета. Как я могу это сделать?
1 ответ
Решение
Вот начало. Обратите внимание, мне пришлось добавить строку нулей в 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);