我正在尝试使用Seaborn从DataFrame生成4个图
Date A B C D
2019-04-05 330.665 161.975 168.69 0
2019-04-06 322.782 150.243 172.539 0
2019-04-07 322.782 150.243 172.539 0
2019-04-08 295.918 127.801 168.117 0
2019-04-09 282.674 126.894 155.78 0
2019-04-10 293.818 133.413 160.405 0
我使用pd.to_DateTime转换日期,并使用pd.to_numeric转换数字。这是df.info():
<class 'pandas.core.frame.DataFrame'>
Int64Index: 6 entries, 460 to 465
Data columns (total 5 columns):
Date 6 non-null datetime64[ns]
A 6 non-null float64
B 6 non-null float64
C 6 non-null float64
D 6 non-null float64
dtypes: datetime64[ns](1), float64(4)
memory usage: 288.0 bytes
我可以通过在df上调用.plot()来进行宽列绘图。
但是
剧情的传说覆盖了剧情本身
我想在一张图中有4个单独的图,并尝试使用lmplot来实现。
我想像这样在图上添加标签:
我首先融化了数据:
df=pd.melt(df,id_vars='Date', var_name='Var', value_name='Unit')
然后尝试lmplot
sns.lmplot(x = df['Date'], y='Unit', col='Var', data=df)
但是,我得到了回溯:
TypeError: Invalid comparison between dtype=datetime64[ns] and str
我也尝试设置df.set_index ['Date']并使用x = df.index重新绘制,这给了我同样的错误。
可以使用Google表格来绘制数据,但是我正在尝试自动化工作流,在该工作流中可以生成图表并通过Slack发送给选定的收件人。
我希望我已经足够清楚地表达了自己,因为我对Python和Seaborn相当陌生,并希望从这里的专家那里获得一些帮助。
答案 0 :(得分:1)
关于图例,您可以仅在本示例中使用.legend(loc="upper left", bbox_to_anchor=(1,1))
%matplotlib inline
import pandas as pd
import numpy as np
data = np.random.rand(10,4)
df = pd.DataFrame(data, columns=["A", "B", "C", "D"])
df.plot()\
.legend(loc="upper left", bbox_to_anchor=(1,1));
第二个IIUC时,您可以从
开始玩df.plot(subplots=True, layout=(2,2));