Seaborn线图连接点以x和y的顺序不正确

时间:2018-08-28 19:15:33

标签: plot seaborn

对于在中部和右侧面板中使用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()

sample plot

样本数据区域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的问题。

0 个答案:

没有答案