Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

pivot table in proper order for the heatmap

while creating a heatmap I have following syntax:

import matplotlib.pyplot as plt
import seaborn as sns
sns.set_theme()
data=df.rename(columns={0:'Year', 1:'Month', 2:'Count'})
data= pd.pivot_table(data, values='Count', index='Year', columns='Month')
f, ax = plt.subplots(figsize=(15, 6))
sns.heatmap(data, annot=True, fmt="d", linewidths=.5, ax=ax)

and that generates following heatmap:

enter image description here

What I want is ascending or descending order of month along x-axis. That is Jan, Feb, Mar, etc. How do I accomplish like this?

Sample data here:

    0        1      2
0   2005    Jan     84482
1   2011    Apr     28243
2   2007    Apr     64992
3   2013    Feb     46542
4   2016    Sept    24445
5   2011    July    23346
6   2019    Dec     28251
7   2015    Jan     34505
8   2007    June    72561
9   2015    Apr     26973
10  2006    May     102896
11  2006    Jan     88664
12  2012    Nov     32046
13  2005    Sept    65498
14  2014    Sept    24856
like image 728
lpt Avatar asked Oct 27 '25 14:10

lpt


1 Answers

If your data frame is sorted:

import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np

dates = pd.date_range("2000-01-01", periods=48, freq="M")
df = pd.DataFrame({"Year":dates.year,
                   "Month":dates.month_name().str.slice(stop=3),
                  "Count":np.random.randint(0,100,48)})

    Year    Month   Count
0   2000    Jan 96
1   2000    Feb 5
2   2000    Mar 97
3   2000    Apr 40
4   2000    May 55
5   2000    Jun 16

Then:

df['Month'] = pd.Categorical(df['Month'],categories=df['Month'].unique())

Else create one list of the order:

month_order = pd.date_range("2000-01-01", periods=12, freq="M").month_name().str.slice(stop=3)
df['Month'] = pd.Categorical(df['Month'],categories=month_order)

And the plot will work:

data= pd.pivot_table(df, values='Count', index='Year', columns='Month')
f, ax = plt.subplots(figsize=(15, 6))
sns.heatmap(data, annot=True, fmt="d", linewidths=.5, ax=ax)

enter image description here

like image 131
StupidWolf Avatar answered Oct 29 '25 05:10

StupidWolf



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!