不确定为什么我无法以成功地以2D模式绘制的数据以3D形式绘制图形

时间:2019-09-09 19:24:25

标签: python pandas matplotlib

我正在与熊猫一起绘制一些数据图。我成功地以2D绘图。现在,我要使用与在2D中绘制相同的x和y,以及在3d中添加第三个变量来绘制图形的方法。

我的数据框看起来像:

Total attempts     Num Lines Last Attempt      Time of Last Submission  
4                     15                       2019-09-01 17:18:43.800202  
12                   127                      2019-09-01 17:18:43.822987  
3                    148                       2019-09-01 17:18:43.830904  
10                    15                      2019-09-01 17:18:43.853714  
NaN                  NaN                                NaN
48                    134                       2019-09-01 17:18:43.877629 

要在2d中绘图,我使用了以下代码:

def vizData(df, asg):
    df['Time of Last Submission'] = pd.to_datetime(df['Time of Last Submission'], errors='coerce')
    mask = ( df['Time of Last Submission'] > '2018-01-01 00:00:00') & (df['Time of Last Submission'] <= '2018-12-31 00:00:00')
    df = df.loc[mask]
    df['Num Lines Last Attempt'] = df['Num Lines Last Attempt'].apply(pd.to_numeric)

    fig, ax = plt.subplots()
    ax.scatter(df['Time of Last Submission'], df['Num Lines Last Attempt'])

    x_min = df['Time of Last Submission'].min() - datetime.timedelta(days=1)
    x_max = df['Time of Last Submission'].max() + datetime.timedelta(days=1)
    y_min = df['Num Lines Last Attempt'].min() - 5
    y_max = df['Num Lines Last Attempt'].max() + 15

    plt.xlim(x_min,x_max)
    plt.ylim(y_min,y_max)
    plt.xlabel('Time of Submission', fontsize=20)
    plt.ylabel('Number of Lines Changed for Last Submission', fontsize=15)
    plt.tick_params(labelsize=18)
    plt.rcParams['figure.figsize'] = [20, 10]
    plt.grid()
    plt.suptitle(asg, fontsize=30)
    plt.title('Time and Number of Lines Changed for the Last Submission', fontsize=25)
    labels = df['Student']
    datacursor(formatter='{label}'.format)
    plt.show()
    plt.close()

我尝试使用以下方法在3D中绘图:

from mpl_toolkits.mplot3d import Axes3D

def viz3d(df, asg):
    df['Time of Last Submission'] = pd.to_datetime(df['Time of Last Submission'], errors='coerce')
    mask = ( df['Time of Last Submission'] > '2018-01-01 00:00:00') & (df['Time of Last Submission'] <= '2018-12-31 00:00:00')
    df = df.loc[mask]

    df['Num Lines Last Attempt'] = df['Num Lines Last Attempt'].apply(pd.to_numeric)
    df.to_csv('test.csv')
    x = df['Time of Last Submission']
    y = df['Num Lines Last Attempt']
    z = df['Total attempts']

    threedee = plt.figure().gca(projection='3d')
    threedee.plot(x, y, z)
    plt.show()

2D绘图效果很好。当我尝试3D绘图时,出现错误:

ValueError: view limit minimum -0.05 is less than 1 and is an invalid Matplotlib date value. This often happens if you pass a non-datetime value to an axis that has datetime units

我再次检查了数据框,在预期的datetime列中只有datetime值。一切似乎都很好,所以我不确定是什么问题。

0 个答案:

没有答案