#分布图,连续变量的分布图
#导入包
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
#matplottib inline
plt.rcParams['font.sans-serif']=['Simhei']#显示中文
plt.rcParams['axes.unicode_minus']=False #显示负号
#认识函数
plt.hist?
#导入绘图的数据集
df=pd.read_csv('mpg_ggplot2.csv')
df.head()
#数据进行处理
df_agg=df.loc[:,['displ','class']].groupby('class')
df_agg.head()
#提取出每一列车型的发动机排量
vals=[df0['displ'].values.tolist() for i ,df0 in df_agg]
vals
#绘制直方图
plt.hist(vals,30,stacked=True)
plt.figure(figsize=(16,8),dpi=60) #创建画布
n,bins,patches = plt.hist(vals,30,stacked=True) #绘制堆叠直方图
#添加装饰
plt.title('Stacked Histogram of $displ$ colored by $class$',fontsize=22) #添加标题
plt.xlabel('displ',fontsize=15) #X轴的标题
plt.ylabel('Frequency',fontsize=15) #Y轴标题
plt.xticks([round(b,1) for b in bins[::3]],fontsize=12) #设定X轴的刻度标签
plt.yticks(fontsize=12) #设定Y轴刻度大小
plt.ylim(0,25)#设定Y轴刻度范围
plt.legend(np.unique(df['class']),frameon=False,fontsize=12);
#源码及其解读
# Prepare data
x_var = 'displ' #横坐标所需特征
groupby_var = 'class' #分类变量
df_agg = df.loc[:, [x_var, groupby_var]].groupby(groupby_var) #根据分类变量将所需数据分组
vals = [df[x_var].values.tolist() for i, df in df_agg] #提取出每一组中的数据
# Draw
plt.figure(figsize=(16,9), dpi= 60)#创建画布并设定画布大小
#colors = [plt.cm.Spectral(i/float(len(vals)-1)) for i in range(len(vals))] #生成颜色列表
colors = [plt.cm.Spectral(i/float(len(vals))) for i in range(len(vals))]
n, bins, patches = plt.hist(vals, 30, stacked=True, density=False, color=colors[:len(vals)]) #绘制直方图
# Decoration
plt.legend({group:col for group, col in zip(np.unique(df[groupby_var]).tolist(), colors[:len(vals)])}) #添加图例
plt.title(f"Stacked Histogram of ${x_var}$ colored by ${groupby_var}$", fontsize=22) #添加标题
plt.xlabel(x_var) #添加 X轴标题
plt.ylabel("Frequency")#添加 Y轴标题
plt.ylim(0, 25) #设定Y轴刻度范围
plt.xticks(ticks=bins[::3], labels=[round(b,1) for b in bins[::3]])#设定 X轴刻度
plt.show() #本地显示图形
plt.cm.Spectral(1) #RGBA色彩空间:红绿蓝+alpha
# import matplotlib.pyplot as plt
# plt.rcParams['font.sans-serif']=['Simhei'] #显示中文
# plt.rcParams['axes.unicode_minus']=False #显示负号
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
#如果用jupyter notebook则需要这行代码让你的图像显示,如果是jupyterlab则不需要
plt.rcParams['font.sans-serif']=['Simhei'] #显示中文
plt.rcParams['axes.unicode_minus']=False #显示负号
df=pd.read_csv('mpg_ggplot2.csv')
x_var = 'manufacturer' #X轴特征
groupby_var = 'class' #分类标签(颜色标签)
df_agg = df.loc[:, [x_var, groupby_var]].groupby(groupby_var) #根据颜色标签将X轴特征分组
vals = [df[x_var].values.tolist() for i, df in df_agg] #提取出每组特征
# Draw
plt.figure(figsize=(14,8), dpi= 60) #创建画布
colors = [plt.cm.Spectral(i/float(len(vals)-1)) for i in range(len(vals))] #创建颜色列表
n, bins, patches = plt.hist(vals, df[x_var].unique().__len__(), stacked=True, density=False, color=colors[:len(vals)]) #绘制堆叠直方图
#_len_返回的是长度
# Decoration
plt.legend({group:col for group, col in zip(np.unique(df[groupby_var]).tolist(), colors[:len(vals)])}) #添加图例
# plt.legend(np.unique(df[groupby_var]),frameon=False,fontsize=15)
plt.title(f"Stacked Histogram of ${x_var}$ colored by ${groupby_var}$", fontsize=22) #添加标题
plt.xlabel(x_var,fontsize=20) #设定X轴标签
plt.ylabel("Frequency",fontsize=20) #设定Y轴标签
plt.ylim(0, 40) #设定Y轴刻度范围
#plt.xticks(ticks=bins, labels=np.unique(df[x_var]).tolist(), rotation=90, horizontalalignment='left',fontsize=16) #设定X轴刻度标签
plt.yticks(fontsize=16)#设定Y轴刻度字体大小
plt.show() #本地显示