Смешивание линейных и точечных графиков из pandas кадра данных в одном графике с использованием тактовой частоты только первого графика - PullRequest
0 голосов
/ 03 августа 2020

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

Наблюдения имеют МНОГО значений Nan (большинство временных шагов не имеют наблюдения ).

Этот MWE дублирует проблему, с которой я столкнулся

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

base = datetime.datetime.today()
date_list = [base - datetime.timedelta(days=x) for x in range(40)]

df = pd.DataFrame(data = {
    "Time": date_list,
    "Chocolate": np.random.rand(40), 
    "Strawberry": np.random.rand(40), 
    "Fake Chocolate": np.random.rand(40), 
    "Fake Strawberry": np.random.rand(40), 
})
df.iloc[3,3] = np.nan

ax1 = df.plot(x = 'Time', y = ["Chocolate","Strawberry"])

ax1 = df.plot(x = 'Time', y = ["Chocolate","Strawberry"])
ax2 = df.plot.scatter(x = 'Time', y = ['Fake Chocolate'], marker = '^', ax = ax1)
ax3 = df.plot.scatter(x = 'Time', y = ['Fake Strawberry'], marker = '*', ax = ax1, color = '#ff7f0e')

пример вывода

Я хочу, чтобы ось x была такой же, как на первом графике, поэтому возьму стиль линейного графика, где у вас нет КАЖДОЙ даты, пытающейся напечатать в крошечном пространстве. Как мне это сделать?

Я использую ax1.set для установки меток осей x и y.

и если я могу украдкой ответить на второй вопрос, почему это возможно несколько строк с использованием y = [], но невозможно для диаграмм рассеяния?

1 Ответ

0 голосов
/ 03 августа 2020

Просто добавьте plt.xticks(rotation=45) в конец вашего скрипта, и все будет в порядке.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import datetime

base = datetime.datetime.today()
date_list = [base - datetime.timedelta(days=x) for x in range(40)]

df = pd.DataFrame(data = {
    "Time": date_list,
    "Chocolate": np.random.rand(40), 
    "Strawberry": np.random.rand(40), 
    "Fake Chocolate": np.random.rand(40), 
    "Fake Strawberry": np.random.rand(40), 
})
df.iloc[3,3] = np.nan

ax1 = df.plot(x = 'Time', y = ["Chocolate","Strawberry"])

ax1 = df.plot(x = 'Time', y = ["Chocolate","Strawberry"])
ax2 = df.plot.scatter(x = 'Time', y = ['Fake Chocolate'], marker = '^', ax = ax1)
ax3 = df.plot.scatter(x = 'Time', y = ['Fake Strawberry'], marker = '*', ax = ax1, color = '#ff7f0e')
plt.xticks(rotation=45);

enter image description here

введите описание изображения здесь

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