【发布时间】:2021-05-19 05:46:37
【问题描述】:
我想针对一个数据框中的最后一列值显示所有列的直方图,总共 5 个。 因此,该框架将针对第 6 列值的每列有 10 个直方图。
df.hist(column=['col1','col2','col3','col4','col5'])
我尝试按属性使用,但结果错误。
【问题讨论】:
标签: python pandas matplotlib histogram
我想针对一个数据框中的最后一列值显示所有列的直方图,总共 5 个。 因此,该框架将针对第 6 列值的每列有 10 个直方图。
df.hist(column=['col1','col2','col3','col4','col5'])
我尝试按属性使用,但结果错误。
【问题讨论】:
标签: python pandas matplotlib histogram
seaborn library 有很多方便的功能可以快速创建这种绘图。一个烦恼可能是您需要将数据帧转换为"long form",例如使用pd.melt()。
sns.displot() 的用法如下:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
df = pd.DataFrame(np.random.rand(100, 5), columns=['col1', 'col2', 'col3', 'col4', 'col5'])
sns.displot(data=df.melt(var_name='column name'), x='value', col='column name', height=3, kind='hist')
plt.show()
【讨论】:
我认为您有点困惑,直方图仅使用 1 列中的值来获取所述列的分布。所以关于你的问题,直方图不是正确的工具。
除非第 6 列有 2 个值,并且您希望从按值 1 和 2 过滤的 5 列中获取直方图,否则您可以这样做:
df[df['col6']==1].hist(column=['col1','col2','col3','col4','col5'])
df[df['col6']==2].hist(column=['col1','col2','col3','col4','col5'])
如果不是上述情况,并且您想要绘制 2 列之间的交互,其形状类似于直方图,那么您需要的是条形图:
df.plot.bar(x='col1', y='col6', rot=0)
【讨论】: