У меня есть следующий код, который создает график, отображающий два словаря рядом друг с другом, где по оси Y указаны дни, а по оси Y — относительные затраты. Поскольку график довольно раздут, я хочу добавить значения к каждой полосе, в идеале по центру. Поэтому я добавил в свой код параметр ha='center', но каким-то образом он создает график, на котором повернутые значения не совсем центрированы над полосой. Я хочу, чтобы середина повернутого числа была сосредоточена над полосой. Как мне этого добиться?
Это мой код:
У меня есть следующий код, который создает график, отображающий два словаря рядом друг с другом, где по оси Y указаны дни, а по оси Y — относительные затраты. Поскольку график довольно раздут, я хочу добавить значения к каждой полосе, в идеале по центру. Поэтому я добавил в свой код параметр ha='center', но каким-то образом он создает график, на котором повернутые значения не совсем центрированы над полосой. Я хочу, чтобы середина повернутого числа была сосредоточена над полосой. Как мне этого добиться? Это мой код: [code]import matplotlib.pyplot as plt import numpy as np import random
for day in range(1, days + 1): daily_sum1 = sum(ls1.get((day, shift), 0) for shift in range(1, shifts + 1)) daily_sum2 = sum(ls2.get((day, shift), 0) for shift in range(1, shifts + 1)) daily_demand_sum = sum(demand_dict.get((day, shift), 0) for shift in range(1, shifts + 1))
def add_value_labels(bars): for bar in bars: height = bar.get_height() plt.text(bar.get_x() + bar.get_width() / 2., height + 0.01, f'{height:.2%}', ha='center', va='bottom', rotation=90, fontsize=10, color='black')
add_value_labels(bars1) add_value_labels(bars2)
# Find the maximum height of all bars max_height = max(max(bar.get_height() for bar in bars1), max(bar.get_height() for bar in bars2))
# Add a margin above the highest bar for the labels and legend legend_margin = 0.15 * max_height plt.ylim(top=max_height + legend_margin)
# Erstelle die Legende mit dünnerem Rahmen legend = plt.legend(loc='upper left', bbox_to_anchor=(0.02, 0.98), ncol=1, frameon=True, edgecolor='black', facecolor='white', framealpha=1, fontsize=14.5) # Set font size to match axis labels legend.get_frame().set_linewidth(0.5)
plt.tight_layout() plt.show()
def generate_random_data(days, shifts, min_value, max_value): return {(day, shift): round(random.uniform(min_value, max_value), 2) for day in range(1, days + 1) for shift in range(1, shifts + 1)}
plot_relative_undercover_dual(u1, u2, demand_dict, 28, 3) [/code] Здесь вы можете более четко увидеть результат и проблему: [img]https://i.sstatic.net/ XITCxpDc.png[/img]