В принципе желаемый участок может быть достигнут следующим образом.
- Нормализовать кадр данных в диапазоне от 0 до 1,
- Сдвинуть каждый столбец еще на одну единицу
- построить график данных
Полный пример:
u ="""date person 1 person 2 person 3
3/1/18 45.0 34.0 91.0
3/2/18 88.0 87.0 84.0
3/3/18 56.0 98.0 65.0
3/4/18 34.0 34.0 53.0
3/5/18 56.0 60.0 56.0"""
import io
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df = pd.read_csv(io.StringIO(u), sep="\s\s+", engine="python")
df["date"] = pd.to_datetime(df["date"], format="%m/%d/%y")
df = df.set_index("date")
# normalize
df /= df.values.max()
# shift colums
df += np.arange(len(df.columns))
ax = df.plot()
ax.set_yticks(np.arange(len(df.columns)))
ax.set_yticklabels(df.columns)
plt.show()

Обратите внимание, что сюжет довольно сложно читать.Таким образом, в качестве альтернативы можно построить 3 отдельных графика, чтобы сохранить шкалы данных, используя subplots=True
:
u ="""date person 1 person 2 person 3
3/1/18 45.0 34.0 91.0
3/2/18 88.0 87.0 84.0
3/3/18 56.0 98.0 65.0
3/4/18 34.0 34.0 53.0
3/5/18 56.0 60.0 56.0"""
import io
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df = pd.read_csv(io.StringIO(u), sep="\s\s+", engine="python")
df["date"] = pd.to_datetime(df["date"], format="%m/%d/%y")
df = df.set_index("date")
ax = df.plot(subplots=True)
plt.show()
