Jun*_*rat 9 python matplotlib python-3.x plotly seaborn
我有一个时间序列数据如下:
Datum Menge
1/1/2018 0:00 19.5
1/1/2018 0:15 19.0
1/1/2018 0:30 19.5
1/1/2018 0:45 19.5
1/1/2018 1:00 21.0
1/1/2018 1:15 19.5
1/1/2018 1:30 20.0
1/1/2018 1:45 23.0
Run Code Online (Sandbox Code Playgroud)
并且数据框data的形状为 (14880, 2)。在该Menge列中,只有 11807 个可用值,其余为nan
我试图按如下方式绘制它:
data.plot()
plt.show()
Run Code Online (Sandbox Code Playgroud)
这给了我
但我想使用seaborn或绘制相同的图plotly
因为seaborn我试过:
x = data.Datum
y = data.Menge.values
sns.lineplot(x = x, y = y, data = data)
Run Code Online (Sandbox Code Playgroud)
它给了我输出:
Out[3]: <matplotlib.axes._subplots.AxesSubplot at 0x21286bb8668>
Run Code Online (Sandbox Code Playgroud)
并打开了一个新的图形窗口,但它说 Figure 1 (Not Responding)
所以,我有两个问题:
Datum那里的值。如何更改?sen*_*nce 10
考虑一个玩具数据框:
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
df = pd.DataFrame({"Datum": ['1/1/2018 0:00',
'1/1/2018 0:15',
'1/1/2018 0:30',
'1/1/2018 0:45',
'1/1/2018 1:00',
'1/1/2018 1:15',
'1/1/2018 1:30',
'1/1/2018 1:45 '],
"Menge": [19.5, 19.,19.5,19.5,21,19.5,20,23]})
sns.lineplot(x="Datum", y="Menge", data=df)
plt.xticks(rotation=15)
plt.title('seaborn-matplotlib example')
plt.show()
Run Code Online (Sandbox Code Playgroud)
import pandas as pd
import numpy as np
import plotly.graph_objs as go
from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot
init_notebook_mode(connected=True)
trace1 = go.Scatter(x=df.Datum,
y=df.Menge,
name = "plotly example",
line = dict(color = 'blue'),
opacity = 0.4)
layout = dict(title='plotly example',)
fig = dict(data=[trace1], layout=layout)
iplot(fig)
Run Code Online (Sandbox Code Playgroud)
即使对于多个时间序列,最干净的设置是:
情节: px.line()
海生: lineplot()
情节:
px.line(df, x = df.index, y = df.columns)
Run Code Online (Sandbox Code Playgroud)
海生:
sns.lineplot(data = df)
Run Code Online (Sandbox Code Playgroud)
seaborn 和 plotly 的完整代码:
以下代码示例将让您生成两个图。
import plotly.graph_objs as go
from datetime import datetime
import plotly.express as px
import matplotlib as mpl
import seaborn as sns
import pandas as pd
import numpy as np
# sample data in a pandas dataframe
np.random.seed(23)
observations = 75
df=pd.DataFrame(dict(A=np.random.uniform(low=-1, high=1.1, size=observations).tolist(),
B=np.random.uniform(low=-1, high=1.1, size=observations).tolist(),
C=np.random.uniform(low=-1, high=1.1, size=observations).tolist(),
))
df.iloc[0,] = 0
df = df.cumsum()
firstdate = datetime(2020,1,1)
df['date'] = pd.date_range(firstdate, periods=df.shape[0]).tolist()
df.set_index('date', inplace=True)
px.line(df, x = df.index, y = df.columns)
# fig = go.Figure([{
# 'x': df.index,
# 'y': df[col],
# 'name': col
# } for col in df.columns])
# fig.show()
# sns.set_style("darkgrid")
#sns.lineplot(data = df)
Run Code Online (Sandbox Code Playgroud)
px.line(df, x = df.index, y = df.columns)
Run Code Online (Sandbox Code Playgroud)
另一个情节选择是:
fig = go.Figure([{
'x': df.index,
'y': df[col],
'name': col
} for col in df.columns])
fig.show()
Run Code Online (Sandbox Code Playgroud)
sns.set_style("darkgrid")
sns.lineplot(data = df)
Run Code Online (Sandbox Code Playgroud)