python 中直方图绘制
一、直方图绘制参数详解
1、plt.hist(x, bins=10, range=None, normed=False, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None, log=False, color=None, label=None, stacked=False)
- x:指定要绘制直方图的数据。
- bins:指定直方图条形的个数。
- range:指定直方图数据的上下界,默认包含绘图数据的最大值和最小值。
- normed:是否将直方图的频数转换成频率。
- weights:该参数可为每一个数据点设置权重。
- cumulative:是否需要计算累计频数或频率。
- bottom:可以为直方图的每个条形添加基准线,默认为0。
- histtype:指定直方图的类型,默认为bar,除此之外,还有barstacked、step和stepfilled
- align:设置条形边界值的对齐方式,默认为mid,另外还有left和right
- orientation:设置直方图的摆放方向,默认为垂直方向
- rwidth:设置直方图条形的宽度
- log:是否需要对绘图数据进行log变换
- color:设置直方图的填充色
- edgecolor:设置直方图边框色
- label:设置直方图的标签,可通过legend展示其图例
- stacked:当有多个数据时,是否需要将直方图呈堆叠摆放,默认水平摆放
官方链接:https://matplotlib.org/api/_as_gen/matplotlib.pyplot.hist.html#matplotlib.pyplot.hist
①绘制直方图实例
1 # matplotlib模块绘制直方图 2 # 读入数据 3 Titanic = pd.read_csv('titanic_train.csv') 4 # 检查年龄是否有缺失 5 any(Titanic.Age.isnull()) 6 # 不妨删除含有缺失年龄的观察 7 Titanic.dropna(subset=['Age'], inplace=True) 8 # 绘制直方图 9 plt.hist(x = Titanic.Age, # 指定绘图数据 10 bins = 20, # 指定直方图中条块的个数 11 color = 'steelblue', # 指定直方图的填充色 12 edgecolor = 'black' # 指定直方图的边框色 13 ) 14 # 添加x轴和y轴标签 15 plt.xlabel('年龄') 16 plt.ylabel('频数') 17 # 添加标题 18 plt.title('乘客年龄分布') 19 # 显示图形 20 plt.show()
②绘制直方图与核密度图
1 # Pandas模块绘制直方图和核密度图 2 # 读入数据 3 Titanic = pd.read_csv('titanic_train.csv') 4 # 绘制直方图 5 Titanic.Age.plot(kind = 'hist', bins = 20, color = 'steelblue', edgecolor = 'black', normed = True, label = '直方图') 6 # 绘制核密度图 7 Titanic.Age.plot(kind = 'kde', color = 'red', label = '核密度图') 8 # 添加x轴和y轴标签 9 plt.xlabel('年龄') 10 plt.ylabel('核密度值') 11 # 添加标题 12 plt.title('乘客年龄分布') 13 # 显示图例 14 plt.legend() 15 # 显示图形 16 plt.show()
根据数据需要手动设置x轴刻度
1 # 导入数据 2 import pandas as pd 3 import matplotlib.pyplot as plt 4 f = open(r'C:\Users\Administrator.PC-20160806EWJL\Desktop\整理文件\boston数据简介\data\boston.csv') 5 data = pd.read_csv(f) 6 7 # 绘制直方图 8 data.RAD.plot(kind = 'hist', bins = 30, color = 'steelblue', edgecolor = 'black', normed = True, label = '直方图') 9 # 绘制核密度图 10 data.RAD.plot(kind = 'kde', color = 'red', label = '核密度图') 11 # 添加x轴和y轴标签 12 plt.xlabel('距离高速公路') 13 plt.ylabel('核密度值') 14 plt.xticks([-10,-5,0,1,2,3,4,5,6,7,8,9,20,25]) #根据分布频率手动设置x轴的刻度 15 # 添加标题 16 plt.title('距离高速公路分布') 17 # 显示图例 18 plt.legend() 19 # 显示图形 20 plt.show()
③seaborn模块绘制分组的直方图
1 # seaborn模块绘制分组的直方图和核密度图 2 # 读入数据 3 Titanic = pd.read_csv('titanic_train.csv') 4 # 取出男性年龄 5 Age_Male = Titanic.Age[Titanic.Sex == 'male'] 6 # 取出女性年龄 7 Age_Female = Titanic.Age[Titanic.Sex == 'female'] 8 9 # 绘制男女乘客年龄的直方图 10 sns.distplot(Age_Male, bins = 20, kde = False, hist_kws = {'color':'steelblue'}, label = '男性') 11 # 绘制女性年龄的直方图 12 sns.distplot(Age_Female, bins = 20, kde = False, hist_kws = {'color':'purple'}, label = '女性') 13 plt.title('男女乘客的年龄直方图') 14 # 显示图例 15 plt.legend() 16 # 显示图形 17 plt.show()
④seaborn模块绘制核密度图
1 # 读入数据 2 Titanic = pd.read_csv('titanic_train.csv') 3 # 绘制男女乘客年龄的核密度图 4 sns.distplot(Age_Male, hist = False, kde_kws = {'color':'red', 'linestyle':'-'}, 5 norm_hist = True, label = '男性') 6 # 绘制女性年龄的核密度图 7 sns.distplot(Age_Female, hist = False, kde_kws = {'color':'black', 'linestyle':'--'}, 8 norm_hist = True, label = '女性') 9 plt.title('男女乘客的年龄核密度图') 10 # 显示图例 11 plt.legend() 12 # 显示图形 13 plt.show()