как сделать метки на линии цены в matplotlib

Рейтинг: 0Ответов: 2Опубликовано: 27.01.2023

Делаю визуализацию графика биржи в питон с использованием matplotlib, сейчас выглядит так - линия цены просто линия, введите сюда описание изображения

а хотелось бы видеть на ней ценовую отметку, как например здесь введите сюда описание изображения как это можно исправить? на всякий случай код

import ccxt
import matplotlib.pyplot as plt
import pandas as pd

import config

exchange = ccxt.bybit({
    'api_key': config.api_key,
    'secret': config.secret,
    'enableRateLimit': True,
    "options": {'defaultType': 'future'}
})

plt.ion()
for _ in iter(int, 1):
    # получаем последние свечи
    bars = exchange.fetch_ohlcv('BTC/USDT:USDT', timeframe='1m', limit=100)
    df = pd.DataFrame(bars[:-1], columns=['timestamp', 'open', 'high', 'low', 'close', 'volume'])



    # цвет фона
    ax = plt.axes()
    ax.set(facecolor="black")
    # вид линий основной сетки:
    ax.grid(which='major',
            color='white',
            linewidth=0.1)

    # вид линий вспомогательной сетки:
    ax.grid(which='minor',
            color='white',
            linewidth=0.1,
            linestyle=':')

    # включить второстепенные деления осей:
    ax.minorticks_on()

    # линия цены
    price = exchange.fetch_ticker('BTC/USDT:USDT')['last']
    plt.axhline(y=price,
                color='red',
                linewidth=0.5,
                linestyle='--')

    y = df['close']
    plt.plot(y, color='lightgreen')
    plt.draw()
    plt.pause(0.0001)

    plt.clf()

Ответы

▲ 1

Сначала маленький совет. Я уверен, что ответ бы вы получили намного быстрее, если бы выделили из своего скрипта только то, что относиться к вопросу и показали тут (как того требуют правила данного ресурса) . А так по сути вы заставляете желающих вам помочь импортировать некую весьма специфическую библиотеку и не одну, потом экспериментировать с никому не интересными (кроме вас) графиками, разбираться, что-же там надо сделать. Мало найдется желающих. У меня - точно такого желания нет. Поэтому вам, как новичку я помогу, приведя пример того, как можно показать в matplotlib на линейном графике метку, значение которой определяется в коде, равно как и ее положение на графике. А уж "прилаживать" мой пример к вашему коду - вам придется самому. Итак:

x=np.arange(0,10,0.1)
y=np.random.normal(size=100)
plt.plot(x,y)
y_c=y.mean()+1
plt.hlines(y_c,0,10,color='r')
plt.text(10+0.6, y_c, y_c, size=10, 
         ha="center", va="center",
         bbox=dict(boxstyle="round",
                   ec=(1., 0.5, 0.5),
                   fc=(1., 0.8, 0.8),
                   )
         )

Результат: введите сюда описание изображения

Надеюсь, принцип понятен, а экспериментировать с тонкой настройкой графика - оставляю вам. Останутся вопросы - задавайте.

▲ -1

можно сделать через добавление своей метки на оси:

import matplotlib.pyplot as plt
import numpy as np

X = list(range(0, 10))
Y = np.random.randint(400, high=500, size=len(X))

my_val = 470 ## <---
fig, ax = plt.subplots()
ax.plot(X, Y)
plt.axhline(y=my_val, color='red', linewidth=0.5, linestyle='--')
ax.set_yticks(np.append(ax.get_yticks(), my_val))
plt.gca().get_yticklabels()[-1].set_bbox(dict(edgecolor="red", facecolor='red', alpha=0.5))

введите сюда описание изображения