我有一个包含两列的数据框,第一列可以具有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)
与我想要的最接近的是这样的,理想情况下是每个单元格中的实际数字
谢谢大家!
答案 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()
输出(随机条目)
输出sns: