import matplotlib.pyplot as plt
# Данные: (кодек, остаток качества в %, цвет)
codecs = [
("LDAC 990", 85, "#4CAF50"),
("LDAC 660", 78, "#66BB6A"),
("LDAC 330", 67, "#81C784"),
("aptX HD", 78, "#29B6F6"),
("aptX Adaptive", 76, "#4FC3F7"),
("aptX", 66, "#81D4FA"),
("AAC (Apple)", 70, "#FFD54F"),
("AAC (Android)", 58, "#FFB74D"),
("SBC (328 kbps)", 58, "#FF8A65"),
("SBC (192 kbps)", 45, "#FF7043"),
("LC3 (345 kbps)", 76, "#BA68C8"),
("LC3 (160 kbps)", 67, "#CE93D8"),
]
# Разделим на имена и значения
labels, values, colors = zip(*codecs)
# Размер графика
plt.figure(figsize=(10, 6))
bars = plt.barh(labels, values, color=colors)
# Подписи процентов
for bar in bars:
width = bar.get_width()
plt.text(width + 1, bar.get_y() + bar.get_height() / 2,
f"{width}%", va='center', fontsize=10)
# Настройка графика
plt.xlabel("Остаток качества от оригинального CD (%)")
plt.title("CD → Opus 250 → PCM → Bluetooth кодек: Потери качества")
plt.xlim(0, 100)
plt.gca().invert_yaxis() # Самый качественный сверху
plt.grid(axis='x', linestyle='--', alpha=0.6)
plt.tight_layout()
plt.show()# your code goes here
aW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdAoKIyDQlNCw0L3QvdGL0LU6ICjQutC+0LTQtdC6LCDQvtGB0YLQsNGC0L7QuiDQutCw0YfQtdGB0YLQstCwINCyICUsINGG0LLQtdGCKQpjb2RlY3MgPSBbCiAgICAoIkxEQUMgOTkwIiwgODUsICIjNENBRjUwIiksCiAgICAoIkxEQUMgNjYwIiwgNzgsICIjNjZCQjZBIiksCiAgICAoIkxEQUMgMzMwIiwgNjcsICIjODFDNzg0IiksCiAgICAoImFwdFggSEQiLCA3OCwgIiMyOUI2RjYiKSwKICAgICgiYXB0WCBBZGFwdGl2ZSIsIDc2LCAiIzRGQzNGNyIpLAogICAgKCJhcHRYIiwgNjYsICIjODFENEZBIiksCiAgICAoIkFBQyAoQXBwbGUpIiwgNzAsICIjRkZENTRGIiksCiAgICAoIkFBQyAoQW5kcm9pZCkiLCA1OCwgIiNGRkI3NEQiKSwKICAgICgiU0JDICgzMjgga2JwcykiLCA1OCwgIiNGRjhBNjUiKSwKICAgICgiU0JDICgxOTIga2JwcykiLCA0NSwgIiNGRjcwNDMiKSwKICAgICgiTEMzICgzNDUga2JwcykiLCA3NiwgIiNCQTY4QzgiKSwKICAgICgiTEMzICgxNjAga2JwcykiLCA2NywgIiNDRTkzRDgiKSwKXQoKIyDQoNCw0LfQtNC10LvQuNC8INC90LAg0LjQvNC10L3QsCDQuCDQt9C90LDRh9C10L3QuNGPCmxhYmVscywgdmFsdWVzLCBjb2xvcnMgPSB6aXAoKmNvZGVjcykKCiMg0KDQsNC30LzQtdGAINCz0YDQsNGE0LjQutCwCnBsdC5maWd1cmUoZmlnc2l6ZT0oMTAsIDYpKQpiYXJzID0gcGx0LmJhcmgobGFiZWxzLCB2YWx1ZXMsIGNvbG9yPWNvbG9ycykKCiMg0J/QvtC00L/QuNGB0Lgg0L/RgNC+0YbQtdC90YLQvtCyCmZvciBiYXIgaW4gYmFyczoKICAgIHdpZHRoID0gYmFyLmdldF93aWR0aCgpCiAgICBwbHQudGV4dCh3aWR0aCArIDEsIGJhci5nZXRfeSgpICsgYmFyLmdldF9oZWlnaHQoKSAvIDIsCiAgICAgICAgICAgICBmInt3aWR0aH0lIiwgdmE9J2NlbnRlcicsIGZvbnRzaXplPTEwKQoKIyDQndCw0YHRgtGA0L7QudC60LAg0LPRgNCw0YTQuNC60LAKcGx0LnhsYWJlbCgi0J7RgdGC0LDRgtC+0Log0LrQsNGH0LXRgdGC0LLQsCDQvtGCINC+0YDQuNCz0LjQvdCw0LvRjNC90L7Qs9C+IENEICglKSIpCnBsdC50aXRsZSgiQ0Qg4oaSIE9wdXMgMjUwIOKGkiBQQ00g4oaSIEJsdWV0b290aCDQutC+0LTQtdC6OiDQn9C+0YLQtdGA0Lgg0LrQsNGH0LXRgdGC0LLQsCIpCnBsdC54bGltKDAsIDEwMCkKcGx0LmdjYSgpLmludmVydF95YXhpcygpICAjINCh0LDQvNGL0Lkg0LrQsNGH0LXRgdGC0LLQtdC90L3Ri9C5INGB0LLQtdGA0YXRgwpwbHQuZ3JpZChheGlzPSd4JywgbGluZXN0eWxlPSctLScsIGFscGhhPTAuNikKCnBsdC50aWdodF9sYXlvdXQoKQpwbHQuc2hvdygpIyB5b3VyIGNvZGUgZ29lcyBoZXJl