Сюжет бара панд - это категоричный сюжет.Он будет показывать бары в последовательных позициях 0,1, .. N-1.Линейные или районные графики - это числовые графики, они показывают в реальном масштабе.
A.Использовать matplotlib
Один из вариантов - использовать график matplotlib bar
, поскольку он также имеет числовой характер.
u = """index A B day
0 0.900 NaN 11
1 0.600 NaN 12
2 0.600 NaN 13
3 0.600 NaN 14
4 0.300 NaN 15
5 1.278 NaN 18
6 0.429 0.70 19
7 0.240 1.00 20
8 0.279 0.95 21
9 0.330 NaN 22
10 0.369 NaN 25
11 0.285 NaN 26
12 0.594 0.65 27
13 0.741 0.50 28
14 0.855 NaN 29
15 0.399 NaN 32
16 1.140 NaN 33
17 1.383 NaN 34"""
import io
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv(io.StringIO(u), delim_whitespace=True)
fig, ax = plt.subplots()
ax.bar(df["day"], df["A"])
ax.bar(df["day"], df["B"], bottom=df["A"])
plt.show()

B.Используйте индекс панд
Если вы не считаете это вариантом, вы можете использовать индекс данных для построения графиков.Это работает здесь, потому что дни все целые числа.Для этого вы можете создать фрейм данных со всеми возможными индексами между минимальным и максимальным днем и заполнить его значениями исходных данных.Затем нанесите на карту обертку для панд.
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv(io.StringIO(u), delim_whitespace=True)
df2 = pd.DataFrame(columns=["A", "B"], index=range(df["day"].min(),df["day"].max()+1))
df2.update(df.set_index("day"))
fig, ax = plt.subplots()
df2.plot.bar(stacked=True, ax=ax)
plt.show()
