添加 Pivot table 列和索引作为 xticks 和 yticks
Add Pivot table columns and index as xticks and yticks
我有一个根据以下内容创建的枢轴 table: 并使用 imshow() 绘制它。我想将枢轴 table 的索引和列用作 yticks 和 xticks。我的数据透视表 table 中的列是日期,索引是一天中的时间。
data = pd.DataFrame()
data['Date']=Tgrad_GFAVD_3m2mRot.index.date
data['Time']=Tgrad_GFAVD_3m2mRot.index.strftime("%H")
data['Tgrad']=Tgrad_GFAVD_3m2mRot.values
C = data.pivot(index='Time', columns='Date', values='Tgrad')
print(C.head()):
Date 2016-08-01 2016-08-02 2016-08-03 2016-08-04 2016-08-05 2016-08-06 \
Time
00 -0.841203 -0.541871 -0.042984 -0.867929 -0.790869 -0.940757
01 -0.629176 -0.520935 -0.194655 -0.866815 -0.794878 -0.910690
02 -0.623608 -0.268820 -0.255457 -0.859688 -0.824276 -0.913808
03 -0.615145 -0.008241 -0.463920 -0.909354 -0.811136 -0.878619
04 -0.726949 -0.169488 -0.529621 -0.897773 -0.833408 -0.825612
我用
绘制枢轴table
fig, ax = plt.subplots(figsize = (16,9))
plt = ax.imshow(C,aspect = 'auto', extent=[0,len(data["Date"]),0,23], origin = "lower")
我尝试了几件事,但没有任何效果。目前我的 xticks 范围在 0 到 6552 之间,这是 C.columns 对象的长度,由 imshow()
中的 extent 参数设置
我希望每个月的第一天都有 xticks,但不是通过索引号,而是作为格式为“2016-08-01”的日期标记。
我确信这只是过去一个小时阻止我的一件小事,但现在我放弃了。你知道如何相应地设置 xticks 吗?
我在尝试了另一件事后自己找到了解决方案。我在 "data" Dataframe 中创建了另一列,其中包含 datenum 条目而不是 dates
data["datenum"]=mdates.date2num(data["Date"])
然后将剧情线改为:
pl = ax.imshow(C,aspect = 'auto',
extent=[data["datenum"].iloc[0],data["datenum"].iloc[-1],data["Time"].iloc[0],data["Time"].iloc[-1]],
origin = "lower")
因此,extent 参数的更改为绘图提供了 datenum 值,而不是日期列的索引。
然后使用以下几行:
ax.set_yticks(data["Time"]) # sets yticks
ax.xaxis_date() # tells the xaxis that it should expect datetime values
ax.xaxis.set_major_formatter(mdates.DateFormatter("%m/%d") ) # formats the datetime values
fig.autofmt_xdate() # makes it look nice
最好的,
弗罗尼
我有一个根据以下内容创建的枢轴 table:
data = pd.DataFrame()
data['Date']=Tgrad_GFAVD_3m2mRot.index.date
data['Time']=Tgrad_GFAVD_3m2mRot.index.strftime("%H")
data['Tgrad']=Tgrad_GFAVD_3m2mRot.values
C = data.pivot(index='Time', columns='Date', values='Tgrad')
print(C.head()):
Date 2016-08-01 2016-08-02 2016-08-03 2016-08-04 2016-08-05 2016-08-06 \
Time
00 -0.841203 -0.541871 -0.042984 -0.867929 -0.790869 -0.940757
01 -0.629176 -0.520935 -0.194655 -0.866815 -0.794878 -0.910690
02 -0.623608 -0.268820 -0.255457 -0.859688 -0.824276 -0.913808
03 -0.615145 -0.008241 -0.463920 -0.909354 -0.811136 -0.878619
04 -0.726949 -0.169488 -0.529621 -0.897773 -0.833408 -0.825612
我用
绘制枢轴tablefig, ax = plt.subplots(figsize = (16,9))
plt = ax.imshow(C,aspect = 'auto', extent=[0,len(data["Date"]),0,23], origin = "lower")
我尝试了几件事,但没有任何效果。目前我的 xticks 范围在 0 到 6552 之间,这是 C.columns 对象的长度,由 imshow()
中的 extent 参数设置我希望每个月的第一天都有 xticks,但不是通过索引号,而是作为格式为“2016-08-01”的日期标记。
我确信这只是过去一个小时阻止我的一件小事,但现在我放弃了。你知道如何相应地设置 xticks 吗?
我在尝试了另一件事后自己找到了解决方案。我在 "data" Dataframe 中创建了另一列,其中包含 datenum 条目而不是 dates
data["datenum"]=mdates.date2num(data["Date"])
然后将剧情线改为:
pl = ax.imshow(C,aspect = 'auto',
extent=[data["datenum"].iloc[0],data["datenum"].iloc[-1],data["Time"].iloc[0],data["Time"].iloc[-1]],
origin = "lower")
因此,extent 参数的更改为绘图提供了 datenum 值,而不是日期列的索引。 然后使用以下几行:
ax.set_yticks(data["Time"]) # sets yticks
ax.xaxis_date() # tells the xaxis that it should expect datetime values
ax.xaxis.set_major_formatter(mdates.DateFormatter("%m/%d") ) # formats the datetime values
fig.autofmt_xdate() # makes it look nice
最好的, 弗罗尼