Python 熊猫海生热图错误

Python 熊猫海生热图错误,python,pandas,matplotlib,heatmap,seaborn,Python,Pandas,Matplotlib,Heatmap,Seaborn,我有一个数据框,当它没有堆叠时看起来像这样 Start Date 2016-07-11 2016-07-12 2016-07-13 Period 0 1.000000 1.000000 1.0 1 0.684211 0.738095 NaN 2 0.592105 NaN NaN 我试图在Seaborn中把它画成热图,但它给了我意想不到的结果

我有一个数据框,当它没有堆叠时看起来像这样

Start Date  2016-07-11  2016-07-12  2016-07-13
Period
0             1.000000    1.000000         1.0
1             0.684211    0.738095         NaN
2             0.592105         NaN         NaN
我试图在Seaborn中把它画成热图,但它给了我意想不到的结果

这是我的密码:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
df = pd.DataFrame(np.array(data), columns=['Start Date', 'Period', 'Users'])
df = df.fillna(0)
df = df.set_index(['Start Date', 'Period'])
sizes = df['Users'].groupby(level=0).first()
df = df['Users'].unstack(0).divide(sizes, axis=1)
plt.title("Test")
sns.heatmap(df.T, mask=df.T.isnull(), annot=True, fmt='.0%')
plt.tight_layout()
plt.savefig(table._v_name + "fig.png")

我想要它,这样文本就不会重叠,侧面就不会有6个热图例。如果可能的话,我如何修复日期,以便它只显示%Y-%M%D?

< P>而精确的可重复的数据是不可用的,下面考虑使用发布的片段数据。本例运行一个
pivot\u table()
,以实现跨列发布的StartDates结构。总的来说,由于
unstack()
处理,您的热图可能会输出多个颜色条和重叠的图形,您似乎正在被用户分割(查看以分割)。下面是通过热图运行的df。另外,一个
apply()
根据指定的需要重新格式化日期时间

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

data = '''Period,StartDate,Value
       0,2016-07-11,1.000000
       0,2016-07-12,1.000000
       0,2016-07-13,1.0
       1,2016-07-11,0.684211
       1,2016-07-12,0.738095
       1,2016-07-13
       2,2016-07-11,0.592105
       2,2016-07-12
       2,2016-07-13'''

df = pd.read_csv(StringIO(data))
df['StartDate'] = pd.to_datetime(df['StartDate'])
df['StartDate'] = df['StartDate'].apply(lambda x: x.strftime('%Y-%m-%d'))

pvtdf = df.pivot_table(values='Value', index=['Period'],
                       columns='StartDate', aggfunc=sum)
print(pvtdf)
# StartDate  2016-07-11  2016-07-12  2016-07-13
# Period                                       
# 0            1.000000    1.000000         1.0
# 1            0.684211    0.738095         NaN
# 2            0.592105         NaN         NaN

sns.set()    
plt.title("Test")
ax = sns.heatmap(pvtdf.T, mask=pvtdf.T.isnull(), annot=True, fmt='.0%')
plt.tight_layout()
plt.show()

意外结果不是错误。使用
数据将很难重现此结果
变量请给出完整示例,否则我们无法帮助您。根据您的示例中的绘图和缩进,看起来您正在循环(并且没有在每个循环中创建一个新的图形,这就是您的问题),但是猜测您在做什么是浪费我们的时间。