怎么用python画直方图中怎么设置数据范围_python怎么画直方图?Matplotlib数据可视化005:直方图...

前文回看:

【Python菜鸟进阶大神】Matplotlib数据可视化001:基础API汇总&散点图

【Python菜鸟进阶大神】Matplotlib数据可视化002:折线图

【Python菜鸟进阶大神】Matplotlib数据可视化003:条形图

【Python菜鸟进阶大神】Matplotlib数据可视化004:饼图

直方图用来描述连续变量(定量变量)的分布情况,横轴表示数据类型,纵轴表示分布情况

直方图的API:

hist(x, bins=None, range=None, density=None, 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:设置直方图的填充色;

label:设置直方图的标签,可通过legend展示其图例;

stacked:当有多个数据时,是否需要将直方图呈堆叠摆放,默认水平摆放;

首先,我们加载数据:

数据来源:https://pan.baidu.com/s/1lEV_mMQZVPCrShH9ku_TYw(d6gr)

# 引入模块

import numpy as np

import pandas as pd

import matplotlib as mpl

import matplotlib.pyplot as plt

# 中文乱码和坐标轴负号的处理

plt.rcParams[‘font.sans-serif’] = [‘Microsoft YaHei’]

plt.rcParams[‘axes.unicode_minus’] = False

# 加载数据

path=”C:/Users/Administrator/Desktop/exercise_data/train.csv”

df=pd.read_csv(path)

df.head()

df[“Age”].isnull()    #检查age变量是否含有缺失值

df.dropna(subset=[“Age”],inplace=True)    # 删除掉age列含有缺失值对应的所有行

plt.hist(df[“Age”],  #绘图数据

bins=20,    #多少个条

color=”blue”,  #颜色

label=”年龄”,    #标签,用以图例legend

histtype=”bar”, #直方图的样式

normed =False,  #频数

edgecolor = ‘white’ # 指定直方图条形的边界色

)

plt.title(“泰坦尼克号乘客年龄分布”,fontdict={‘fontsize’:18, ‘color’:’r’})

plt.xlabel(“Age”)

plt.ylabel(“频数”)

# 显示图例

plt.legend(loc = ‘best’)

# 显示图形

plt.show()

怎么用python画直方图中怎么设置数据范围_python怎么画直方图?Matplotlib数据可视化005:直方图..._第1张图片

plt.hist(df[“Age”],  #绘图数据

bins=np.arange(df.Age.min(),df[“Age”].max(),5),    #从age的最小值到最大值,步长为5

color=”blue”,  #颜色

label=”年龄”,    #标签,用以图例legend

histtype=”bar”, #直方图的样式

normed =True,  #频数变为频率

edgecolor = ‘white’ # 指定直方图条形的边界色

)

plt.title(“泰坦尼克号乘客年龄分布”,fontdict={‘fontsize’:18, ‘color’:’r’})

plt.xlabel(“Age”)

plt.ylabel(“频率”)

# 显示图例

plt.legend(loc = ‘best’)

# 显示图形

plt.show()

参数cumulative = True, 则是积累直方图,上图右所示。

怎么用python画直方图中怎么设置数据范围_python怎么画直方图?Matplotlib数据可视化005:直方图..._第2张图片

import matplotlib.mlab as mlab

from scipy.stats import norm

plt.hist(df[“Age”],  #绘图数据

bins=np.arange(df.Age.min(),df[“Age”].max(),5),    #多少个条

color=”blue”,  #颜色

label=”年龄”,    #标签,用以图例legend

histtype=”bar”, #直方图的样式

normed =True,  #频数变为频率

edgecolor = ‘white’ # 指定直方图条形的边界色

)

plt.title(“泰坦尼克号乘客年龄分布”,fontdict={‘fontsize’:18, ‘color’:’r’})

plt.xlabel(“Age”)

plt.ylabel(“频率”)

# 生成正态曲线的数据

x1 = np.linspace(df.Age.min(), df.Age.max(), 1000)

normal = norm.pdf(x1, df.Age.mean(), df.Age.std())

# 绘制正态分布曲线

line1,= plt.plot(x1,normal,’r-‘, linewidth = 2)

# 生成核密度曲线的数据

kde = mlab.GaussianKDE(df.Age)

x2 = np.linspace(df.Age.min(), df.Age.max(), 1000)

# 绘制

line2, = plt.plot(x2,kde(x2),’k-.’, linewidth = 2)

# 显示图例

plt.legend([line1,line2],[“正态分布曲线”,”核密度曲线”],loc=”best”)

怎么用python画直方图中怎么设置数据范围_python怎么画直方图?Matplotlib数据可视化005:直方图..._第3张图片

注意:

都知道x服从~N(μ,σ^2),就是正态分布;μ=1,σ^2=0,是标准正态分布。

生成正态概率密度:

y1=mlab.normpdf(x,mu均值,sigma标准差),或者

y2=norm.pdf(x,mu均值,sigma标准差)

两个变量的直方图

在年龄的基础上,将男性和女性区分出来

# 提取不同性别的年龄数据

age_female = df.Age[df.Sex == ‘female’]

age_male = df.Age[df.Sex == ‘male’]

# 设置直方图的组距

bins = np.arange(df.Age.min(), df.Age.max(), 3)

# 男性乘客年龄直方图

plt.hist(age_male, bins = bins, label = ‘男性’, color = ‘blue’, alpha =1)

# 女性乘客年龄直方图

plt.hist(age_female, bins = bins, label = ‘女性’, color = ‘y’,alpha = 0.8)

# 设置坐标轴标签和标题

plt.title(‘泰坦尼克号乘客年龄-按性别分布’,fontdict={‘fontsize’:18, ‘color’:’r’})

plt.xlabel(‘年龄’,fontdict={‘fontsize’:18, ‘color’:’k’})

plt.ylabel(‘人数’,fontdict={‘fontsize’:18, ‘color’:’k’})

# 显示图例

plt.legend()

# 显示图形

plt.show()

怎么用python画直方图中怎么设置数据范围_python怎么画直方图?Matplotlib数据可视化005:直方图..._第4张图片

上图显示的总体还是年龄的分布,男女年龄的均值和标准差没有太大的差异,所以两个图是重叠在一起的。

都知道,均值反映集中趋势,体现总体的情况中大部分的量是多少。

标准差反映离散程度,方差的开平方,反映每个样本和总体均数的差异,方差越大越离散,也就是正态曲线峰越低。

在用一组数据和图形体现:

# 构造数据

mu1,sigma1=80,30

mu2,sigma2=30,15

x1=mu1+sigma1*np.random.randn(10000)

x2=mu2+sigma2*np.random.randn(10000)

# 画图

plt.hist(x1,bins=50,density=True,color=”r”,alpha=1)

plt.hist(x2,bins=50,density=True,color=”b”,alpha=0.7)

# 加数据标签

plt.text(90,0.013,r”$\mu=80,\ \sigma=30$”,fontdict={‘fontsize’:13,’color’:’r’,’weight’:’bold’,’family’:’serif’})

plt.text(35,0.025,r”$\mu=30,\ \sigma=15$”,fontdict={‘fontsize’:13,’color’:’k’})

# 设置x轴的范围

plt.xlim(-15,170)

# 标题

plt.title(“均值和标准差不同的直方图比较”,fontdict={‘fontsize’:20,’color’:’k’})

怎么用python画直方图中怎么设置数据范围_python怎么画直方图?Matplotlib数据可视化005:直方图..._第5张图片

原文链接https://mp.weixin.qq.com/s/qmmNu78mQuGKRzWmwPF8kw

怎么用python画直方图中怎么设置数据范围_python怎么画直方图?Matplotlib数据可视化005:直方图..._第6张图片

https://www.jianshu.com/p/da32f50958e7

你可能感兴趣的:(怎么用python画直方图中怎么设置数据范围_python怎么画直方图?Matplotlib数据可视化005:直方图...)