MAI/LabWork01/LabWork3/CustomGraphics.py
2023-10-12 17:46:05 +04:00

47 lines
2.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import os
import numpy as np
import pandas as pd
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
def createCusGraphics(df: pd.DataFrame, newDf: pd.DataFrame):
# для сохранения диаграммы в конкретной папке
script_dir = os.path.dirname(__file__)
results_dir = os.path.join(script_dir, '../static/')
if not os.path.isdir(results_dir):
os.makedirs(results_dir)
df.rename(columns={'small': 'small_1', 'average': 'average_1', 'big': 'big_1'}, inplace=True)
newDf.rename(columns={'small': 'small_2', 'average': 'average_2', 'big': 'big_2'}, inplace=True)
# Объединяем две группы в один DataFrame
merged_df = pd.concat([df, newDf], axis=1, ignore_index=False)
# Создаем массив с индексами для каждой компании
index = np.arange(len(merged_df))
print(merged_df)
# Задаем ширину каждого столбца
bar_width = 0.2
# Построение столбчатой гистограммы с увеличенным расстоянием между столбцами
plt.bar(index, merged_df['small_1'], bar_width, label='Min 1', color='b')
plt.bar(index + bar_width, merged_df['average_1'], bar_width, label='Mean 1', color='g')
plt.bar(index + 2 * bar_width, merged_df['big_1'], bar_width, label='Max 1', color='r')
plt.bar(index + 3 * bar_width, merged_df['small_2'], bar_width, label='Min 2', color='c')
plt.bar(index + 4 * bar_width, merged_df['average_2'], bar_width, label='Mean 2', color='m')
plt.bar(index + 5 * bar_width, merged_df['big_2'], bar_width, label='Max 2', color='y')
# Устанавливаем подписи на оси x
plt.xlabel('Company')
plt.ylabel('Valuation')
plt.title('Company Valuation Comparison')
plt.xticks(index + 2.5 * bar_width, merged_df.index)
# Добавляем легенду
plt.legend()
plt.savefig(results_dir + 'CustomJPG' + str(0) + '.jpg')
plt.close()
return True