import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
import seaborn as sns
# Make example data
s = """2018-01-01
2018-01-02,100
2018-01-03,105
2018-01-04
2018-01-05,95
2018-01-06,90
2018-01-07,80
2018-01-08
2018-01-09"""
df = pd.DataFrame([row.split(",") for row in s.split("\n")], columns=["Date", "Data"])
df = df.replace("", np.nan)
df["Date"] = pd.to_datetime(df["Date"])
df["Data"] = df["Data"].astype(float)
Три варианта:
1) Используйте pandas
или matplotlib
.
2) Если вам нужно seaborn
: не для чего, а для обычных встреч, таких как ваша, вы можете использовать pointplot
из коробки.
fig, ax = plt.subplots(figsize=(10, 5))
plot = sns.pointplot(
ax=ax,
data=df, x="Date", y="Data"
)
ax.set_xticklabels([])
plt.show()
![enter image description here](https://i.stack.imgur.com/pcfcA.png)
3) Если вам нужно seaborn
и вам нужно lineplot
: я посмотрел исходный код, и похоже, что lineplot
удаляет nans из DataFrame перед построением графика. Так что, к сожалению, это невозможно сделать правильно. Вы можете использовать некоторые дополнительные хакеры и использовать аргумент hue
, чтобы поместить отдельные разделы в отдельные сегменты. Мы нумеруем разделы, используя вхождения nans.
fig, ax = plt.subplots(figsize=(10, 5))
plot = sns.lineplot(
ax=ax,
data=df, x="Date", y="Data",
hue=df["Data"].isna().cumsum(), palette=["black"]*sum(df["Data"].isna()), legend=False, markers=True
)
ax.set_xticklabels([])
plt.show()
![enter image description here](https://i.stack.imgur.com/G4XRw.png)
К сожалению, аргумент markers в настоящее время не работает, поэтому вам нужно исправить его, если вы хотите видеть даты, которые имеют nans с обеих сторон.