将数据透视表列和索引添加为xticks和yticks

2024-09-30 22:20:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个pivot表,它是根据以下命令创建的:Color mapping of data on a date vs time plot,并用imshow()打印它。我想使用pivot表的索引和列作为yticks和xticks。数据透视表中的列是日期,索引是一天中的时间。你知道吗

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  

我用

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”格式作为日期标记。你知道吗

我确信这只是一件小事,在过去的一个小时里阻止了我,但现在我放弃了。你知道如何相应地设置XTICK吗?你知道吗


Tags: columnsdatadateindextimepltaxextent
1条回答
网友
1楼 · 发布于 2024-09-30 22:20:34

我自己在尝试了一件事之后找到了解决办法。。我在“data”数据框中创建了另一列,其中包含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值,而不是date列的索引。 然后,以下几行开始工作:

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

最好的, 维罗尼

相关问题 更多 >