热图还是其他两个可变直方图选项?

时间:2019-04-15 00:52:24

标签: python pandas seaborn

我有一个包含两列的数据框,第一列可以具有0-15的整数,另一列可以具有0-10的整数。

df大约有10,000行。

我想绘制某种网格(15x10),可以直观地表示整个数据帧中每个组合的实例个数,理想情况下在每个网格单元上显示实际数量。

我已经尝试了Seaborn和Matplotlib。

在Seaborn中,我尝试了一个jointplot,它几​​乎做到了,但我无法显示实际的15x10网格。我也尝试了heatmap,但是它给了我一个错误(请参阅下文),但我找不到任何东西。

我还尝试绘制某种3D直方图。

最后,我尝试透视数据,但Pandas将数字作为值而不是将其视为“存储桶”。

不确定从这里要去哪里。

*heatmap error: "ufunc 'isnan' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''"
sns.heatmap(x='pressure_bucket', y='rate_bucket', data=df)

与我想要的最接近的是这样的,理想情况下是每个单元格中的实际数字

https://imgur.com/a/d4qWIod

谢谢大家!

1 个答案:

答案 0 :(得分:0)

我们可以使用plt.imshow来显示热图,

# get the counts in form of a dataframe indexed by (c1,c2)
counts = df.groupby(['c1'])['c2'].value_counts().rename('value').reset_index()

# pivot to c1 as index, c2 as columns
counts = counts.pivot(index='c1', columns='c2', values='value')

# after reading your question carefully, there's another step
# fill all missing value in c1
counts.reindex(range(16))

# fill all missing value in c2
counts = counts.reindex(range(10), axis=1)

# fill all missing values with 0
counts = counts.fillna(0)

# imshow
plt.figure(figsize=(15,10))
plt.imshow(counts, cmap='hot')
plt.grid(False)
plt.show()

# sns would give a color bar legend
plt.figure(figsize=(15,10))
sns.heatmap(counts, cmap='hot')
plt.show()

输出(随机条目)

enter image description here

输出sns:

enter image description here