Панды объединяют прямую и точечную заговор - PullRequest
0 голосов
/ 27 апреля 2018

Я хочу построить данные временных рядов панд в линию и объединить их с точечными данными на одном графике. (У меня есть ежедневные значения за весь год и значения в определенные даты, которые должны быть нанесены в виде точек.)

Можно ли отобразить точечные данные только в виде маркеров без линии? Я попробовал это с style = 'x', но легенда пуста там, где должен быть стиль.

enter image description here

И когда я использую marker = 'o', между точками всегда есть линия.

enter image description here

df_points

            point_values
2015-10-31     34.000000
2015-11-30     86.914286
2015-12-14    109.777778
2015-12-29    113.340206
2016-01-13    239.503817
2016-01-19    296.768657
2016-01-27    296.849558
2016-02-02    377.489726
2016-02-10    436.665698
2016-02-24    506.214689
2016-03-02    523.585106
2016-03-15    574.376344
2016-04-01    602.537143
2016-04-15    662.771812
2016-04-29    738.079096
2016-05-15    784.083333
2016-05-31    698.914286
2016-06-14    539.915254
2016-06-29    318.356164

df_lines

        line_values
2015-10-31    34.010000
2015-11-30    97.800000
2015-12-14   127.700000
2015-12-29   147.000000
2016-01-13   252.150000
2016-01-19   329.900000
2016-01-27   341.700000
2016-02-02   389.700000
2016-02-10   478.550000
2016-02-24   543.300000
2016-03-02   562.700000
2016-03-15   620.100000
2016-04-01   636.500000
2016-04-15   628.482486
2016-04-29   708.000000
2016-05-15   770.000000
2016-05-31   808.000000
2016-06-14   632.900000
2016-06-29   415.528680


fig, (ax1) = plt.subplots(nrows=1, ncols=1, figsize=(12, 10))
df_points['point_values'].plot(ax=ax1, label='point values', legend=True,        grid=True, sharex=True, style = 'o')
df_lines['line_values'].plot(ax=ax1, label='daily values', legend=True, grid=True, sharex=True)

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

Если я переключу порядок команды заговора, появится надпись в легенде. plot with label

fig, (ax1) = plt.subplots(nrows=1, ncols=1, figsize=(12, 10))
df_lines['line_values'].plot(ax=ax1, label='daily values', legend=True, grid=True, sharex=True)
df_points['point_values'].plot(ax=ax1, label='point values', legend=True, grid=True, style = 'o')

Спасибо за вашу помощь

0 голосов
/ 27 апреля 2018

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

Если dates - это index в обоих кадрах данных,

df_lines.index = [pd.to_datetime(d) for d in df_lines.index]
df_points.index = [pd.to_datetime(d) for d in df_points.index]
fig=plt.figure(figsize=(12, 10))
ax1 = fig.add_subplot(111)
ax1.scatter(x=df_points.index, y=df_points['point_values'] ,label='point values')
df_lines.plot(ax=ax1, label='line values', color='darkorange')
ax1.legend()
plt.grid()
plt.show()

Выход:

enter image description here

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