Name | eleganplot JSON |
Version |
0.1.1
JSON |
| download |
home_page | None |
Summary | EleganPlot — надстройка над Matplotlib для элегантной, изящной визуализации. |
upload_time | 2025-10-07 19:14:03 |
maintainer | None |
docs_url | None |
author | Alex Frauch |
requires_python | >=3.9 |
license | MIT License
Copyright (c) 2024 Alex Frauch
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE. |
keywords |
matplotlib
plot
styling
themes
visualization
|
VCS |
 |
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# EleganPlot 🎨
**EleganPlot** — это элегантная надстройка над Matplotlib для создания красивых и стильных визуализаций в Python. Библиотека предоставляет систему тем, кастомные методы построения графиков и специальные эффекты для создания профессиональных визуализаций.
## ✨ Основные возможности
- **🎭 Система тем** — предустановленные и кастомные темы оформления
- **🌟 Эффекты свечения** — создание линий с эффектом glow
- **🌈 Градиентные заливки** — заливка под кривыми с градиентом
- **🎨 Градиентные фоны** — фигуры с красивым градиентным фоном
- **🔧 Кастомные методы** — легкое расширение функциональности
- **📊 Готовые компоненты** — доверительные интервалы, мультилинии и другое
- **🎯 Простой API** — знакомый интерфейс в стиле matplotlib
## 📦 Установка
```bash
pip install eleganplot
```
Или для разработки:
```bash
git clone https://github.com/yourusername/eleganplot.git
cd eleganplot
pip install -e .
```
## 🚀 Быстрый старт
```python
import eleganplot as eplt
import numpy as np
# Создаём данные
x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)
# Простой график с темой
fig, ax = eplt.subplots()
ax.plot(x, y, label='sin(x)')
ax.legend()
eplt.show()
```
## 🎨 Система тем
```python
import eleganplot as eplt
# Просмотр доступных тем
print(eplt.list_themes())
# Установка темы
eplt.set_current_theme('dark')
# Создание графика с темой
fig, ax = eplt.subplots()
ax.plot(x, y)
eplt.show()
```
## 🌟 Эффект свечения (Glow)
Создание линий с эффектом свечения:
```python
fig, ax = eplt.subplots()
# Базовое свечение
main_line, glow_lines = ax.glow_line(x, y,
glow_color='cyan',
glow_width=5.0)
# Продвинутое свечение с настройками
main_line, glow_lines = ax.glow_line(x, y,
glow_color='orange',
glow_width=8.0,
glow_alpha=0.7,
glow_layers=20,
decay_function='gaussian')
eplt.show()
```
### Функции затухания
- `'linear'` — линейное затухание
- `'exponential'` — экспоненциальное затухание
- `'gaussian'` — гауссово затухание (по умолчанию)
- `'quadratic'` — квадратичное затухание
- `'cubic'` — кубическое затухание
- `'sine'` — синусоидальное затухание
## 🌈 Градиентные заливки
```python
fig, ax = eplt.subplots()
# Градиентная заливка под кривой
line, gradient = ax.gradient_plot(x, y,
fill_color='blue',
alpha_coef=0.7)
# Градиент до минимума осей
line, gradient = ax.gradient_plot(x, y,
fill_color='red',
gradient_to_min=True)
eplt.show()
```
## 🎭 Градиентный фон
Создание графиков с красивым градиентным фоном:
```python
# Простое использование с настройками по умолчанию
fig, ax = eplt.gradient_subplots(dpi=200)
ax.plot(x, y, linewidth=2, label='sin(x)')
ax.set_title('График с градиентным фоном')
ax.legend()
eplt.show()
# С кастомными цветами градиента
fig, ax = eplt.gradient_subplots(
figsize=(10, 6),
dpi=200,
gradient_colors=("#1a0033", "#330066"), # Фиолетовый градиент
)
ax.plot(x, y, color='#FF6B9D', linewidth=2)
eplt.show()
```
### Готовые цветовые схемы
- **Тёмный сине-зелёный:** `("#00080a", "#042628")` (по умолчанию)
- **Фиолетовый:** `("#1a0033", "#330066")`
- **Зелёный:** `("#002200", "#004400")`
- **Синий:** `("#000033", "#001166")`
## 🔧 Кастомные методы
### Использование готовых методов
```python
fig, ax = eplt.subplots()
# Доверительная полоса
y_mean = np.sin(x)
y_std = 0.2 * np.ones_like(x)
ax.confidence_band(x, y_mean, y_std, confidence=0.95)
# Несколько линий
y_data = [np.sin(x), np.cos(x), np.tan(x/4)]
ax.multi_line(x, y_data,
labels=['sin', 'cos', 'tan'],
colors=['red', 'blue', 'green'])
eplt.show()
```
### Создание собственных методов
```python
from eleganplot import custom_axes_method
@custom_axes_method("my_plot")
def my_custom_plot(ax, x, y, style='fancy', **kwargs):
"""Мой кастомный метод построения графиков."""
if style == 'fancy':
return ax._ax.plot(x, y, marker='o', linestyle='--', **kwargs)
else:
return ax._ax.plot(x, y, **kwargs)
# Использование
fig, ax = eplt.subplots()
ax.my_plot(x, y, style='fancy', color='purple')
eplt.show()
```
## 📊 Примеры использования
### Научные графики
```python
import eleganplot as eplt
import numpy as np
# Данные эксперимента
x = np.linspace(0, 10, 50)
y_true = 2 * np.exp(-x/3) * np.sin(x)
y_measured = y_true + 0.1 * np.random.randn(50)
y_error = 0.1 * np.ones_like(x)
# График с доверительным интервалом
fig, ax = eplt.subplots(figsize=(10, 6))
ax.confidence_band(x, y_measured, y_error,
confidence=0.95,
label='Измерения ±σ')
ax.plot(x, y_true, 'r--', label='Теория', linewidth=2)
ax.legend()
ax.set_title('Экспериментальные данные с доверительным интервалом')
eplt.show()
```
### Эффектные презентационные графики
```python
# Тёмная тема с эффектами свечения
eplt.set_current_theme('dark')
fig, ax = eplt.subplots(figsize=(12, 8))
# Несколько линий с свечением
colors = ['cyan', 'magenta', 'yellow', 'lime']
for i, color in enumerate(colors):
y = np.sin(x + i*np.pi/4) * np.exp(-x/8)
ax.glow_line(x, y,
glow_color=color,
glow_width=6.0,
glow_alpha=0.8,
linewidth=2)
ax.set_title('Эффектные линии с свечением', fontsize=16)
eplt.show()
```
## 📁 Структура проекта
```
eleganplot/
├── src/eleganplot/
│ ├── __init__.py # Основные экспорты
│ ├── pyplot.py # Обёртки matplotlib
│ ├── theme.py # Система тем
│ └── utils/
│ ├── custom_methods.py # Готовые кастомные методы
│ ├── decorators.py # Система декораторов
│ ├── glow.py # Эффекты свечения
│ └── gradient.py # Градиентные заливки
├── examples/ # Примеры использования
└── docs/ # Документация
```
## 📚 Документация
### 🎨 [Галерея визуализаций](docs/GALLERY.md)
Коллекция примеров с изображениями и кодом
### Полные руководства
- [Руководство по эффектам свечения](docs/GLOW_LINE_GUIDE.md) - эффект glow для линий
- [Руководство по градиентным фонам](docs/GRADIENT_BACKGROUND_GUIDE.md) - создание графиков с градиентным фоном
- [Система кастомных методов](docs/CUSTOM_METHODS.md) - расширение функциональности
- [Руководство по комбинированию методов](docs/COMBINATION_GUIDE.md) - комбинация различных эффектов
### Быстрые справки
- [Быстрый старт: gradient_subplots](docs/GRADIENT_SUBPLOTS_QUICKSTART.md) - краткая шпаргалка
- [Итоги: gradient_subplots](docs/GRADIENT_SUBPLOTS_SUMMARY.md) - сводка возможностей
### 📖 [Оглавление документации](docs/README.md)
Полный указатель всех материалов
## 🤝 Вклад в проект
Мы приветствуем вклад в развитие EleganPlot!
1. Форкните репозиторий
2. Создайте ветку для новой функции (`git checkout -b feature/amazing-feature`)
3. Зафиксируйте изменения (`git commit -m 'Add amazing feature'`)
4. Отправьте в ветку (`git push origin feature/amazing-feature`)
5. Откройте Pull Request
## 📄 Лицензия
Этот проект лицензирован под MIT License — смотрите файл [LICENSE](LICENSE) для деталей.
## 🔗 Зависимости
- Python >= 3.9
- matplotlib >= 3.7
- numpy (через matplotlib)
## 📈 Версии
**v0.1.0** (текущая)
- Базовая система тем
- Эффекты свечения для линий
- Градиентные заливки
- Градиентные фоны (gradient_subplots)
- Система кастомных методов
- Готовые компоненты (доверительные интервалы, мультилинии)
## 👨💻 Автор
**Alex Frauch**
---
**EleganPlot** — делаем визуализацию данных элегантной! ✨
Raw data
{
"_id": null,
"home_page": null,
"name": "eleganplot",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": null,
"keywords": "matplotlib, plot, styling, themes, visualization",
"author": "Alex Frauch",
"author_email": null,
"download_url": "https://files.pythonhosted.org/packages/fd/a1/34030c206084b7f7bf6a2a11aff5fe138fe53a59094450af46ac811b2cf2/eleganplot-0.1.1.tar.gz",
"platform": null,
"description": "# EleganPlot \ud83c\udfa8\n\n**EleganPlot** \u2014 \u044d\u0442\u043e \u044d\u043b\u0435\u0433\u0430\u043d\u0442\u043d\u0430\u044f \u043d\u0430\u0434\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043d\u0430\u0434 Matplotlib \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0445 \u0438 \u0441\u0442\u0438\u043b\u044c\u043d\u044b\u0445 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 \u0432 Python. \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0442\u0435\u043c, \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 \u0438 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u044b \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439.\n\n## \u2728 \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438\n\n- **\ud83c\udfad \u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u0442\u0435\u043c** \u2014 \u043f\u0440\u0435\u0434\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0438 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0435 \u0442\u0435\u043c\u044b \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u044f\n- **\ud83c\udf1f \u042d\u0444\u0444\u0435\u043a\u0442\u044b \u0441\u0432\u0435\u0447\u0435\u043d\u0438\u044f** \u2014 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043b\u0438\u043d\u0438\u0439 \u0441 \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u043c glow \n- **\ud83c\udf08 \u0413\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u043d\u044b\u0435 \u0437\u0430\u043b\u0438\u0432\u043a\u0438** \u2014 \u0437\u0430\u043b\u0438\u0432\u043a\u0430 \u043f\u043e\u0434 \u043a\u0440\u0438\u0432\u044b\u043c\u0438 \u0441 \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u043e\u043c\n- **\ud83c\udfa8 \u0413\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u043d\u044b\u0435 \u0444\u043e\u043d\u044b** \u2014 \u0444\u0438\u0433\u0443\u0440\u044b \u0441 \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u043c \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u043d\u044b\u043c \u0444\u043e\u043d\u043e\u043c\n- **\ud83d\udd27 \u041a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b** \u2014 \u043b\u0435\u0433\u043a\u043e\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438\n- **\ud83d\udcca \u0413\u043e\u0442\u043e\u0432\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b** \u2014 \u0434\u043e\u0432\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u044b, \u043c\u0443\u043b\u044c\u0442\u0438\u043b\u0438\u043d\u0438\u0438 \u0438 \u0434\u0440\u0443\u0433\u043e\u0435\n- **\ud83c\udfaf \u041f\u0440\u043e\u0441\u0442\u043e\u0439 API** \u2014 \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0432 \u0441\u0442\u0438\u043b\u0435 matplotlib\n\n## \ud83d\udce6 \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430\n\n```bash\npip install eleganplot\n```\n\n\u0418\u043b\u0438 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438:\n```bash\ngit clone https://github.com/yourusername/eleganplot.git\ncd eleganplot\npip install -e .\n```\n\n## \ud83d\ude80 \u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u0441\u0442\u0430\u0440\u0442\n\n```python\nimport eleganplot as eplt\nimport numpy as np\n\n# \u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0434\u0430\u043d\u043d\u044b\u0435\nx = np.linspace(0, 2*np.pi, 100)\ny = np.sin(x)\n\n# \u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u0433\u0440\u0430\u0444\u0438\u043a \u0441 \u0442\u0435\u043c\u043e\u0439\nfig, ax = eplt.subplots()\nax.plot(x, y, label='sin(x)')\nax.legend()\neplt.show()\n```\n\n## \ud83c\udfa8 \u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u0442\u0435\u043c\n\n```python\nimport eleganplot as eplt\n\n# \u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0442\u0435\u043c\nprint(eplt.list_themes())\n\n# \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0442\u0435\u043c\u044b\neplt.set_current_theme('dark')\n\n# \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u0441 \u0442\u0435\u043c\u043e\u0439\nfig, ax = eplt.subplots()\nax.plot(x, y)\neplt.show()\n```\n\n## \ud83c\udf1f \u042d\u0444\u0444\u0435\u043a\u0442 \u0441\u0432\u0435\u0447\u0435\u043d\u0438\u044f (Glow)\n\n\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043b\u0438\u043d\u0438\u0439 \u0441 \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u043c \u0441\u0432\u0435\u0447\u0435\u043d\u0438\u044f:\n\n```python\nfig, ax = eplt.subplots()\n\n# \u0411\u0430\u0437\u043e\u0432\u043e\u0435 \u0441\u0432\u0435\u0447\u0435\u043d\u0438\u0435\nmain_line, glow_lines = ax.glow_line(x, y, \n glow_color='cyan', \n glow_width=5.0)\n\n# \u041f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u043e\u0435 \u0441\u0432\u0435\u0447\u0435\u043d\u0438\u0435 \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438\nmain_line, glow_lines = ax.glow_line(x, y,\n glow_color='orange',\n glow_width=8.0,\n glow_alpha=0.7,\n glow_layers=20,\n decay_function='gaussian')\neplt.show()\n```\n\n### \u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u0437\u0430\u0442\u0443\u0445\u0430\u043d\u0438\u044f\n- `'linear'` \u2014 \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0435 \u0437\u0430\u0442\u0443\u0445\u0430\u043d\u0438\u0435\n- `'exponential'` \u2014 \u044d\u043a\u0441\u043f\u043e\u043d\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u0430\u0442\u0443\u0445\u0430\u043d\u0438\u0435 \n- `'gaussian'` \u2014 \u0433\u0430\u0443\u0441\u0441\u043e\u0432\u043e \u0437\u0430\u0442\u0443\u0445\u0430\u043d\u0438\u0435 (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)\n- `'quadratic'` \u2014 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0438\u0447\u043d\u043e\u0435 \u0437\u0430\u0442\u0443\u0445\u0430\u043d\u0438\u0435\n- `'cubic'` \u2014 \u043a\u0443\u0431\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0437\u0430\u0442\u0443\u0445\u0430\u043d\u0438\u0435\n- `'sine'` \u2014 \u0441\u0438\u043d\u0443\u0441\u043e\u0438\u0434\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u0430\u0442\u0443\u0445\u0430\u043d\u0438\u0435\n\n## \ud83c\udf08 \u0413\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u043d\u044b\u0435 \u0437\u0430\u043b\u0438\u0432\u043a\u0438\n\n```python\nfig, ax = eplt.subplots()\n\n# \u0413\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u043d\u0430\u044f \u0437\u0430\u043b\u0438\u0432\u043a\u0430 \u043f\u043e\u0434 \u043a\u0440\u0438\u0432\u043e\u0439\nline, gradient = ax.gradient_plot(x, y, \n fill_color='blue', \n alpha_coef=0.7)\n\n# \u0413\u0440\u0430\u0434\u0438\u0435\u043d\u0442 \u0434\u043e \u043c\u0438\u043d\u0438\u043c\u0443\u043c\u0430 \u043e\u0441\u0435\u0439\nline, gradient = ax.gradient_plot(x, y, \n fill_color='red',\n gradient_to_min=True)\neplt.show()\n```\n\n## \ud83c\udfad \u0413\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u043d\u044b\u0439 \u0444\u043e\u043d\n\n\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 \u0441 \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u043c \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u043d\u044b\u043c \u0444\u043e\u043d\u043e\u043c:\n\n```python\n# \u041f\u0440\u043e\u0441\u0442\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e\nfig, ax = eplt.gradient_subplots(dpi=200)\nax.plot(x, y, linewidth=2, label='sin(x)')\nax.set_title('\u0413\u0440\u0430\u0444\u0438\u043a \u0441 \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u043d\u044b\u043c \u0444\u043e\u043d\u043e\u043c')\nax.legend()\neplt.show()\n\n# \u0421 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u043c\u0438 \u0446\u0432\u0435\u0442\u0430\u043c\u0438 \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u0430\nfig, ax = eplt.gradient_subplots(\n figsize=(10, 6),\n dpi=200,\n gradient_colors=(\"#1a0033\", \"#330066\"), # \u0424\u0438\u043e\u043b\u0435\u0442\u043e\u0432\u044b\u0439 \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\n)\nax.plot(x, y, color='#FF6B9D', linewidth=2)\neplt.show()\n```\n\n### \u0413\u043e\u0442\u043e\u0432\u044b\u0435 \u0446\u0432\u0435\u0442\u043e\u0432\u044b\u0435 \u0441\u0445\u0435\u043c\u044b\n- **\u0422\u0451\u043c\u043d\u044b\u0439 \u0441\u0438\u043d\u0435-\u0437\u0435\u043b\u0451\u043d\u044b\u0439:** `(\"#00080a\", \"#042628\")` (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)\n- **\u0424\u0438\u043e\u043b\u0435\u0442\u043e\u0432\u044b\u0439:** `(\"#1a0033\", \"#330066\")`\n- **\u0417\u0435\u043b\u0451\u043d\u044b\u0439:** `(\"#002200\", \"#004400\")`\n- **\u0421\u0438\u043d\u0438\u0439:** `(\"#000033\", \"#001166\")`\n\n## \ud83d\udd27 \u041a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b\n\n### \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432\n\n```python\nfig, ax = eplt.subplots()\n\n# \u0414\u043e\u0432\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043f\u043e\u043b\u043e\u0441\u0430\ny_mean = np.sin(x)\ny_std = 0.2 * np.ones_like(x)\nax.confidence_band(x, y_mean, y_std, confidence=0.95)\n\n# \u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043b\u0438\u043d\u0438\u0439\ny_data = [np.sin(x), np.cos(x), np.tan(x/4)]\nax.multi_line(x, y_data, \n labels=['sin', 'cos', 'tan'],\n colors=['red', 'blue', 'green'])\neplt.show()\n```\n\n### \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432\n\n```python\nfrom eleganplot import custom_axes_method\n\n@custom_axes_method(\"my_plot\")\ndef my_custom_plot(ax, x, y, style='fancy', **kwargs):\n \"\"\"\u041c\u043e\u0439 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432.\"\"\"\n if style == 'fancy':\n return ax._ax.plot(x, y, marker='o', linestyle='--', **kwargs)\n else:\n return ax._ax.plot(x, y, **kwargs)\n\n# \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\nfig, ax = eplt.subplots()\nax.my_plot(x, y, style='fancy', color='purple')\neplt.show()\n```\n\n## \ud83d\udcca \u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f\n\n### \u041d\u0430\u0443\u0447\u043d\u044b\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438\n\n```python\nimport eleganplot as eplt\nimport numpy as np\n\n# \u0414\u0430\u043d\u043d\u044b\u0435 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\nx = np.linspace(0, 10, 50)\ny_true = 2 * np.exp(-x/3) * np.sin(x)\ny_measured = y_true + 0.1 * np.random.randn(50)\ny_error = 0.1 * np.ones_like(x)\n\n# \u0413\u0440\u0430\u0444\u0438\u043a \u0441 \u0434\u043e\u0432\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u043c\nfig, ax = eplt.subplots(figsize=(10, 6))\nax.confidence_band(x, y_measured, y_error, \n confidence=0.95, \n label='\u0418\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u00b1\u03c3')\nax.plot(x, y_true, 'r--', label='\u0422\u0435\u043e\u0440\u0438\u044f', linewidth=2)\nax.legend()\nax.set_title('\u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u0434\u043e\u0432\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u043c')\neplt.show()\n```\n\n### \u042d\u0444\u0444\u0435\u043a\u0442\u043d\u044b\u0435 \u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438\n\n```python\n# \u0422\u0451\u043c\u043d\u0430\u044f \u0442\u0435\u043c\u0430 \u0441 \u044d\u0444\u0444\u0435\u043a\u0442\u0430\u043c\u0438 \u0441\u0432\u0435\u0447\u0435\u043d\u0438\u044f\neplt.set_current_theme('dark')\n\nfig, ax = eplt.subplots(figsize=(12, 8))\n\n# \u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043b\u0438\u043d\u0438\u0439 \u0441 \u0441\u0432\u0435\u0447\u0435\u043d\u0438\u0435\u043c\ncolors = ['cyan', 'magenta', 'yellow', 'lime']\nfor i, color in enumerate(colors):\n y = np.sin(x + i*np.pi/4) * np.exp(-x/8)\n ax.glow_line(x, y, \n glow_color=color,\n glow_width=6.0,\n glow_alpha=0.8,\n linewidth=2)\n\nax.set_title('\u042d\u0444\u0444\u0435\u043a\u0442\u043d\u044b\u0435 \u043b\u0438\u043d\u0438\u0438 \u0441 \u0441\u0432\u0435\u0447\u0435\u043d\u0438\u0435\u043c', fontsize=16)\neplt.show()\n```\n\n## \ud83d\udcc1 \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\n\n```\neleganplot/\n\u251c\u2500\u2500 src/eleganplot/\n\u2502 \u251c\u2500\u2500 __init__.py # \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u044b\n\u2502 \u251c\u2500\u2500 pyplot.py # \u041e\u0431\u0451\u0440\u0442\u043a\u0438 matplotlib\n\u2502 \u251c\u2500\u2500 theme.py # \u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u0442\u0435\u043c\n\u2502 \u2514\u2500\u2500 utils/\n\u2502 \u251c\u2500\u2500 custom_methods.py # \u0413\u043e\u0442\u043e\u0432\u044b\u0435 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b\n\u2502 \u251c\u2500\u2500 decorators.py # \u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u043e\u0432\n\u2502 \u251c\u2500\u2500 glow.py # \u042d\u0444\u0444\u0435\u043a\u0442\u044b \u0441\u0432\u0435\u0447\u0435\u043d\u0438\u044f\n\u2502 \u2514\u2500\u2500 gradient.py # \u0413\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u043d\u044b\u0435 \u0437\u0430\u043b\u0438\u0432\u043a\u0438\n\u251c\u2500\u2500 examples/ # \u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f\n\u2514\u2500\u2500 docs/ # \u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\n```\n\n## \ud83d\udcda \u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\n\n### \ud83c\udfa8 [\u0413\u0430\u043b\u0435\u0440\u0435\u044f \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439](docs/GALLERY.md)\n\u041a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0441 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0438 \u0438 \u043a\u043e\u0434\u043e\u043c\n\n### \u041f\u043e\u043b\u043d\u044b\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0430\n- [\u0420\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0430\u043c \u0441\u0432\u0435\u0447\u0435\u043d\u0438\u044f](docs/GLOW_LINE_GUIDE.md) - \u044d\u0444\u0444\u0435\u043a\u0442 glow \u0434\u043b\u044f \u043b\u0438\u043d\u0438\u0439\n- [\u0420\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u043d\u044b\u043c \u0444\u043e\u043d\u0430\u043c](docs/GRADIENT_BACKGROUND_GUIDE.md) - \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 \u0441 \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u043d\u044b\u043c \u0444\u043e\u043d\u043e\u043c\n- [\u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432](docs/CUSTOM_METHODS.md) - \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438\n- [\u0420\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u043c\u0435\u0442\u043e\u0434\u043e\u0432](docs/COMBINATION_GUIDE.md) - \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432\n\n### \u0411\u044b\u0441\u0442\u0440\u044b\u0435 \u0441\u043f\u0440\u0430\u0432\u043a\u0438\n- [\u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u0441\u0442\u0430\u0440\u0442: gradient_subplots](docs/GRADIENT_SUBPLOTS_QUICKSTART.md) - \u043a\u0440\u0430\u0442\u043a\u0430\u044f \u0448\u043f\u0430\u0440\u0433\u0430\u043b\u043a\u0430\n- [\u0418\u0442\u043e\u0433\u0438: gradient_subplots](docs/GRADIENT_SUBPLOTS_SUMMARY.md) - \u0441\u0432\u043e\u0434\u043a\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439\n\n### \ud83d\udcd6 [\u041e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438](docs/README.md)\n\u041f\u043e\u043b\u043d\u044b\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0432\u0441\u0435\u0445 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432\n\n## \ud83e\udd1d \u0412\u043a\u043b\u0430\u0434 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\n\n\u041c\u044b \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u043c \u0432\u043a\u043b\u0430\u0434 \u0432 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435 EleganPlot! \n\n1. \u0424\u043e\u0440\u043a\u043d\u0438\u0442\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439\n2. \u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0432\u0435\u0442\u043a\u0443 \u0434\u043b\u044f \u043d\u043e\u0432\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (`git checkout -b feature/amazing-feature`)\n3. \u0417\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0439\u0442\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f (`git commit -m 'Add amazing feature'`)\n4. \u041e\u0442\u043f\u0440\u0430\u0432\u044c\u0442\u0435 \u0432 \u0432\u0435\u0442\u043a\u0443 (`git push origin feature/amazing-feature`)\n5. \u041e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 Pull Request\n\n## \ud83d\udcc4 \u041b\u0438\u0446\u0435\u043d\u0437\u0438\u044f\n\n\u042d\u0442\u043e\u0442 \u043f\u0440\u043e\u0435\u043a\u0442 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0440\u043e\u0432\u0430\u043d \u043f\u043e\u0434 MIT License \u2014 \u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u0444\u0430\u0439\u043b [LICENSE](LICENSE) \u0434\u043b\u044f \u0434\u0435\u0442\u0430\u043b\u0435\u0439.\n\n## \ud83d\udd17 \u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438\n\n- Python >= 3.9\n- matplotlib >= 3.7\n- numpy (\u0447\u0435\u0440\u0435\u0437 matplotlib)\n\n## \ud83d\udcc8 \u0412\u0435\u0440\u0441\u0438\u0438\n\n**v0.1.0** (\u0442\u0435\u043a\u0443\u0449\u0430\u044f)\n- \u0411\u0430\u0437\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0442\u0435\u043c\n- \u042d\u0444\u0444\u0435\u043a\u0442\u044b \u0441\u0432\u0435\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043b\u0438\u043d\u0438\u0439\n- \u0413\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u043d\u044b\u0435 \u0437\u0430\u043b\u0438\u0432\u043a\u0438\n- \u0413\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u043d\u044b\u0435 \u0444\u043e\u043d\u044b (gradient_subplots)\n- \u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432\n- \u0413\u043e\u0442\u043e\u0432\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b (\u0434\u043e\u0432\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u044b, \u043c\u0443\u043b\u044c\u0442\u0438\u043b\u0438\u043d\u0438\u0438)\n\n## \ud83d\udc68\u200d\ud83d\udcbb \u0410\u0432\u0442\u043e\u0440\n\n**Alex Frauch**\n\n---\n\n**EleganPlot** \u2014 \u0434\u0435\u043b\u0430\u0435\u043c \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0434\u0430\u043d\u043d\u044b\u0445 \u044d\u043b\u0435\u0433\u0430\u043d\u0442\u043d\u043e\u0439! \u2728\n",
"bugtrack_url": null,
"license": "MIT License\n \n Copyright (c) 2024 Alex Frauch\n \n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n \n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n \n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.",
"summary": "EleganPlot \u2014 \u043d\u0430\u0434\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043d\u0430\u0434 Matplotlib \u0434\u043b\u044f \u044d\u043b\u0435\u0433\u0430\u043d\u0442\u043d\u043e\u0439, \u0438\u0437\u044f\u0449\u043d\u043e\u0439 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.",
"version": "0.1.1",
"project_urls": {
"Bug Tracker": "https://github.com/AlFrauch/eleganplot/issues",
"Documentation": "https://github.com/AlFrauch/eleganplot#readme",
"Homepage": "https://github.com/AlFrauch/eleganplot",
"Repository": "https://github.com/AlFrauch/eleganplot"
},
"split_keywords": [
"matplotlib",
" plot",
" styling",
" themes",
" visualization"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "548fc456504a7acd9573d44c96f5b4847ea2ea6eddbd9bde079ce360dbe3b1e7",
"md5": "adade3736c0649182027b397ca4a4a97",
"sha256": "d7971545a5842e94aa818dc0bee16af645b26a597e44d8ad42a850cde342feb3"
},
"downloads": -1,
"filename": "eleganplot-0.1.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "adade3736c0649182027b397ca4a4a97",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 20845,
"upload_time": "2025-10-07T19:10:12",
"upload_time_iso_8601": "2025-10-07T19:10:12.079240Z",
"url": "https://files.pythonhosted.org/packages/54/8f/c456504a7acd9573d44c96f5b4847ea2ea6eddbd9bde079ce360dbe3b1e7/eleganplot-0.1.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "fda134030c206084b7f7bf6a2a11aff5fe138fe53a59094450af46ac811b2cf2",
"md5": "ce0754d322754158ec61c4cdea9f2c7b",
"sha256": "8a260c8338e2c6544dd72126848bad792e9689736ad674862a3e26aba44c66c2"
},
"downloads": -1,
"filename": "eleganplot-0.1.1.tar.gz",
"has_sig": false,
"md5_digest": "ce0754d322754158ec61c4cdea9f2c7b",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 1553500,
"upload_time": "2025-10-07T19:14:03",
"upload_time_iso_8601": "2025-10-07T19:14:03.547562Z",
"url": "https://files.pythonhosted.org/packages/fd/a1/34030c206084b7f7bf6a2a11aff5fe138fe53a59094450af46ac811b2cf2/eleganplot-0.1.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-10-07 19:14:03",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "AlFrauch",
"github_project": "eleganplot",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "eleganplot"
}