对于在中部和右侧面板中使用seaborn线图的3面板图(也尝试了relplot,其结果相同),某些点缺失或绘制不正确。我将sort设置为False,因此据我所知,应该按索引顺序绘制点。从样本数据(在下面链接)中,方法3的最右边图应包括以下几点:
bin(y)diff(x)
1500 -5
1700 -5
1900 -12
2100 -16.5
2300 -19.5
2500 -9
2700 -5
2900 -3
以该顺序连接。但是该线不能正确显示前两点。方法0的行甚至更糟,其中第一个点的bin(y)值应为1500。按排序,y值应沿着每条线从1500增加到2900,并且这两个示例不遵循该点。中间面板中的方法0行还显示y值朝上端下降。
%matplotlib inline
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
df = pd.read_csv("sample_data.csv")
print df[0:5]
fig, axes = plt.subplots(figsize=(12,4), ncols=3, nrows=1, sharey=True)
xcols = ['hist','fut','diff']
n=-1
for ax in axes.flatten():
n += 1
if n > 0:
sns.lineplot(data=df,x=xcols[n],y='bin',hue='method',sort=False,ax=ax,legend=False,ci=None)
else:
sns.lineplot(data=df,x=xcols[n],y='bin',hue='method',sort=False,ax=ax,legend='brief',ci=None)
plt.show()
样本数据区域here。
在找出我所缺少的内容方面的任何帮助将不胜感激。
更新:通过避开Seaborn(来自this helpful post),我找到了一种解决方法:
for n,i in enumerate(axes):
for name, group in df.groupby('method'):
group.plot(x=xcols[n],y='bin',ax=axes[n],label=name,legend=False)
handles, labels = axes[n].get_legend_handles_labels()
fig.legend(handles, labels, loc=7)
但这并不能回答有关seaborn的问题。