Matplotlib / Seaborn意大利面条图-不显示值

时间:2019-03-11 09:26:58

标签: python matplotlib plot seaborn

我有这样一个数据框:

frame = {'Date' : ['3-Mar', '20-Mar', '20-Apr', '21-Apr', '29-Apr', '7-May', '30-May', '31-May', '7-Jun', '16-Jun',
        '1-Jul', '2-Jul', '10-Jul'],
        'Test_1' : [0.5840, 0.8159, 0.7789, 0.7665, 0.8510, 0.7428, 'None', 0.6820, 0.8714, 0.8902, 'mraky', 0.8289, 0.6877],
        'Test_2' : [0.6196, 0.8291, 0.7686, 0.7848, 0.9935, 0.7406, 'None', 0.6952, 0.6952, 0.6952, 'None', 0.8119, 'None']}

以及一些没有值的测试数组。我想做一个意大利面条图。

问题是,当以字符串形式(它们没有按时间顺序排列)或者我将其更改为日期格式时,seaborn shuffle的“ date”值/项采用字符串形式:

frame['Date'] =  pd.to_datetime(frame['Date'], format='%d-%b', errors='ignore')

seaborn跳过一些条目,然后执行以下操作: enter image description here

是的,我可以用相邻值的平均值代替None值,但是还有另一种方法吗?

THX!

1 个答案:

答案 0 :(得分:0)

因此,您似乎正在尝试从两个不同的时间序列中绘制规则图。

看起来DF中也包含非数值。

现在不清楚是要连续图(线)还是要在没有数值数据的点上“断开”。
为了使解决方案简单,请假设您不介意连续行。

因此,您需要做的是

  • 仅选择具有数值的数据点

定义过滤功能:

def is_digit (value):

    try:

        float(value)
        return True

    except:

        return False

将其应用于您的数据框:

data_1 = df.loc[df.Test_1.map(lambda X: is_digit(X))]
data_2 = df.loc[df.Test_2.map(lambda X: is_digit(X))]

图:

X1 = data_1.Date
y1 = data_1.Test_1

X2 = data_2.Date
y2 = data_2.Test_2

plt.plot(X1,y1)
plt.plot(X2,y2)

plt.xticks(rotation=45)

样本(也很丑陋)结果:

enter image description here

可能的改进:

制作间隔均匀的日期数组