Создайте многострочный сложенный график из файла .CSV в matplotlib - PullRequest
0 голосов
/ 09 марта 2019

Я пытаюсь создать многострочный сложенный график из файла .csv в matplotlib.

Мой .csv выглядит так:

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 pandas as pd 
import matplotlib.pyplot as plt

df = pd.read_csv("test.csv")

df.head()

df.plot(xlim=(0, 10)

plt.title('Test')
plt.legend()
plt.show()

Я не хочу, чтобы они были размещены на одном графике. Я бы хотел, чтобы они были собраны вместе, как в этой ссылке: http://www.k -wave.org / Documentation / stackedPlot.php

Кто-нибудь сможет помочь?

Я прочитал это: Создайте многострочный сюжет из файла .CSV в matplotlib , но для меня это не имеет особого смысла, потому что этот человек хотел построить его. Мой кажется более простым и понятным.

1 Ответ

0 голосов
/ 09 марта 2019

В принципе желаемый участок может быть достигнут следующим образом.

  • Нормализовать кадр данных в диапазоне от 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()

enter image description here

Обратите внимание, что сюжет довольно сложно читать.Таким образом, в качестве альтернативы можно построить 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()

enter image description here

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