我正在与熊猫一起绘制一些数据图。我成功地以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值。一切似乎都很好,所以我不确定是什么问题。