Построение графика разными цветами в matplotlib - PullRequest
0 голосов
/ 10 июня 2018

У меня есть следующая таблица.

  Date       Score
11-01-02      40
11-01-03      47
11-01-04      41
11-01-05      35
11-01-06      52
11-01-07      47
11-01-08      45
11-01-09      43
11-01-10      40
11-01-11      41
11-01-12      41
11-01-13      49
11-01-14      40
11-01-15      40

Я прочитал его как файл pandas в python, и я хотел бы представить его в виде линейного графика, чтобы оценки ДО 2011/01/08 имелижелтый цвет, и все, что на 2011/01/08 или после, имеет красный цвет на тех же осях.

Возможно ли это на питоне?Я знаю, как это сделать в R, но я не уверен, есть ли подобная функция в пандах.

Ответы [ 2 ]

0 голосов
/ 10 июня 2018

Другой способ - построить условную часть поверх всей кривой:

import pandas as pd
from matplotlib import pyplot as plt

df = pd.read_csv("test.txt", delim_whitespace = True)
df.Date = pd.to_datetime(df.Date, format = '%y-%m-%d')
#define cutoff date
cutoff = "2011-01-08"
#sort dataframe because unsorted dates will not plot properly
df = df.sort_values(["Date"])
#plot the whole dataframe in yellow
plt.plot(df.Date, df.Score, c = "y", label = "before {}".format(cutoff))
#plot the conditional data on top in red
plt.plot(df[df.Date >= cutoff].Date, df[df.Date >= cutoff].Score, c = "r", label = "after {}".format(cutoff))
plt.xticks(rotation = 45)
plt.legend()
plt.show()

Вывод:

enter image description here

0 голосов
/ 10 июня 2018

Я сделал эту попытку, которую кто-то другой может продолжить, так как линии не связаны после группового.

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

В любом случае, полный пример ниже:

import pandas as pd
import matplotlib.pyplot as plt

csvdata = '''\
Date          Score
11-01-02      40
11-01-03      47
11-01-04      41
11-01-05      35
11-01-06      52
11-01-07      47
11-01-08      45
11-01-09      43
11-01-10      40
11-01-11      41
11-01-12      41
11-01-13      49
11-01-14      40
11-01-15      40'''

# Recreate data and convert Date to datetime
fileobj = pd.compat.StringIO(csvdata)
df = pd.read_csv(fileobj, sep='\s+')
df['Date'] = pd.to_datetime(df['Date'], yearfirst=True)

# Based on the date provided by OP, either RED or YELLOW to col Color
cond = df.Date >= '2011-01-08'
df['Color'] = np.where(cond, 'RED', 'YELLOW')

# Create the frame 
fig, ax = plt.subplots(figsize=(8,6))

# Fill the frame with data (note: missing datapoint!)
for color, dfx in df.groupby('Color'):
   dfx.plot(x='Date', y='Score', color=color, ax=ax) 

# The workaround --> does not feel reliable for consistant use though.
m1 = df['Date'].between('2011-01-07', '2011-01-08')
df[m1].plot(x='Date',y='Score', color=df['Color'], ax=ax)

plt.show()

enter image description here

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