Построение нескольких строк, хотите пометить каждую с текстовой меткой на каждой строке - PullRequest
0 голосов
/ 03 мая 2019

В настоящее время я работаю над графиком, через который проходит 4 линии.Я хочу, чтобы на нем было несколько отметок, чтобы люди могли получить конкретное значение в этот момент и время на графике.

Прилагается мой пример.У меня есть куча строк с различными значениями.Я хотел бы установить его там, где каждые 30 дней он ставит отметку на линии со значением этой точки.Таким образом, люди могут легче определить значение.

My Plot

Пример моего набора данных

             25     50      90      100
2019-04-04  55.0   76.0  1027.0  1200.0
2019-04-05  56.0   77.0  1028.0  1201.0
2019-04-06  57.0   78.0  1029.0  1202.0
2019-04-07  58.0   79.0  1030.0  1203.0
2019-04-08  59.0   80.0  1031.0  1204.0
2019-04-09  60.0   81.0  1032.0  1205.0
2019-04-10  61.0   82.0  1033.0  1206.0
2019-04-11  62.0   83.0  1034.0  1207.0
2019-04-12  53.0   84.0  1035.0  1208.0
2019-04-13  54.0   85.0  1036.0  1209.0
2019-04-14  55.0   86.0  1037.0  1210.0
2019-04-15  56.0   87.0  1038.0  1211.0
2019-04-16  57.0   88.0  1039.0  1212.0
2019-04-17  58.0   89.0  1040.0  1213.0
2019-04-18  59.0   90.0  1041.0  1214.0
2019-04-19  60.0   91.0  1042.0  1215.0
2019-04-20  61.0   92.0  1043.0  1216.0
2019-04-21  62.0   93.0  1044.0  1217.0
2019-04-22  63.0   94.0  1045.0  1218.0
2019-04-23  64.0   95.0  1046.0  1219.0
2019-04-24  65.0   96.0  1047.0  1220.0
2019-04-25  66.0   97.0  1048.0  1221.0
2019-04-26  67.0   98.0  1049.0  1222.0
2019-04-27  68.0   99.0  1050.0  1223.0
2019-04-28  69.0  100.0  1051.0  1224.0
2019-04-29  70.0  101.0  1052.0  1225.0
2019-04-30  71.0  102.0  1053.0  1226.0
2019-05-01  72.0  103.0  1054.0  1227.0
2019-05-02  73.0  104.0  1055.0  1228.0
2019-05-03  74.0  105.0  1056.0  1229.0

И код, который я используюна сюжет

plt.rcParams['figure.figsize'] = [18, 10]

df = pd.DataFrame(data=panda_data)
fig, ax = plt.subplots()

ax = df.plot(kind='line')
ax.grid(axis='y')

1 Ответ

1 голос
/ 03 мая 2019

Для ежедневных данных используйте resample.asfreq() для получения баллов каждые X дней (здесь я буду использовать 15 для иллюстрации с учетом диапазонов дат).Затем подготовьте их и аннотируйте.Обеспечение того, чтобы ярлыки не перекрывались, является гораздо более сложной задачей.

В течение нескольких моментов не слишком беспокоитесь о производительности stack + iteritems.

import matplotlib.pyplot as plt
import pandas as pd

#df.index = pd.to_datetime(df.index)  # If not a DatetimeIndex
pts = df.resample('15D').asfreq()

fig, ax = plt.subplots(figsize=(10, 6))

df.plot(kind='line', ax=ax)
pts.plot(marker='o', ax=ax, lw=0, color='black', legend=False)

pad = 10
for idx, val in pts.stack().iteritems():
    ax.annotate(val, (idx[0], val+pad))

ax.grid(axis='y')

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...