脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - python可视化分析的实现(matplotlib、seaborn、ggplot2)

python可视化分析的实现(matplotlib、seaborn、ggplot2)

2021-09-01 00:32feifei2233 Python

这篇文章主要介绍了python可视化分析的实现(matplotlib、seaborn、ggplot2),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、matplotlib库

1、基本绘图命令

  1. import matplotlib.pyplot as plt
  2. plt.figure(figsize=(5,4)) #设置图形大小
  3. plt.rcParams['axes.unicode_minus']=False #正常显示负号
  4. plt.rcParams['font.sans-self']=['Kai Ti'] #设置字体,这里是楷体,SimHei表示黑体
  5.  
  6. #基本统计图
  7. plt.bar(x,y);plt.pie(y,labels=x);plt.plot(x,y);
  8. plt.hist(df.身高) #若参数density=True则是频率直方图

3、图形参数设置

颜色: plt.plot(x,y,c=‘red') #参数c控制颜色
横纵坐标轴范围: plt.xlim(0,100),plt.ylim(0,8)
横纵坐标轴名称: plt.xlabel(),plt.ylabel()
横纵坐标轴刻度: plt.xticks(range(len(x)),x)
线形和符号: plt.plot(x,y,linestyle='–',marker=‘o') #实线:'-' ;虚线:'–'; '.'指点线
附加参考线: plt.axvline(x=1);plt.axhline(y=4)
文字标注: plt.text(3,5,‘peak point') #参数表示:坐标+文字
图例: plt.plot(x,y,label=‘折线');plt.legend()
分面绘图:

  1. #一行两图
  2. plt.subplot(121)
  3. plt.bar(x,y)
  4. plt.subplot(122)
  5. plt.plot(x,y)
  6. #一页多图
  7. fig,ax=plt.subplots(2,2,figsize=(15,12)) # 2行2列放4个图,figsize控制大小
  8. ax[0,0].bar(x,y);ax[0,1].plot(x,y);
  9. ax[1,0].pie(x,y);ax[1,1].plot(y,'.',linewidth=3)

具体的参数color、linestyle、图例位置设置

颜色字符(color)

字符 代表颜色
r 红色
b 蓝色
g 绿色
w 白色
c 青色
m 洋红
y 黄色
k 黑色

风格字符(linestyle)

字符 代表风格
- (一个连字符) 实线
– (两个连字符) 虚线
-. 点划线
点虚线
' ' 留空,空格

loc 参数(以matplotlib添加图例为例说明位置)

loc string loc code 位置
"best" 0 右上角(默认)
“upper right” 1 右上角
“upper left” 2 左上角
“lower left” 3 左下角
“lower right” 4 右下角
"right" 5 中右侧
“center left” 6 中左侧
“center right” 7 中右侧
“low center” 8 中下方
“upper center” 9 中上方
“center” 10 中间

4、特殊统计图的绘制

4.1 数学函数图

  1. import matplotlib.pyplot as plt #加载基本绘图包
  2. plt.rcParams['font.sans-serif']=['SimHei']; #SimHei黑体
  3. plt.rcParams['axes.unicode_minus']=False; #正常显示图中负号
  4. import numpy as np #加载软件包numpy
  5. import math #加载软件包math
  6. x=np.linspace(0,2*math.pi);x #生成[0,2*pi]序列 ,作为横坐标取值
  7. plt.plot(x,np.sin(x)) #y=sinx 正弦函数
  8. plt.plot(x,np.cos(x)) #y=cosx 余弦函数
  9. plt.plot(x,np.log(x)) #y=lnx #对数函数
  10. plt.plot(x,np.exp(x)) #y=e^x 指数函数

数学函数也可以用pandas库绘制,可详见我的另一篇博客:文章链接

  1. #极坐标图
  2. t=np.linspace(0,2*math.pi)
  3. x=3*np.sin(t);
  4. y=5*np.cos(t)
  5. plt.plot(x,y);
  6. plt.text(0,0,r'$\frac{x^2}{3^2}+\frac{y^2}{5^2}=1$',fontsize=20) #python借鉴的LATEX的格式,可以直接在图中添加公式

python可视化分析的实现(matplotlib、seaborn、ggplot2)

4.2 气泡图

  1. import pandas as pd
  2. df=pd.read_excel('data.xlsx')
  3. plt.scatter(df['身高'], df['体重'], s=df['支出']) #在散点图的基础上加上点的大小,例子中s=df['支出']就是将指各样本点支出越多,点面积就越大

python可视化分析的实现(matplotlib、seaborn、ggplot2)

4.3 三维曲面图

  1. from mpl_toolkits.mplot3d import Axes3D
  2. fig = plt.figure()
  3. ax = Axes3D(fig)
  4. X = np.arange(-4, 4, 0.5)
  5. Y = np.arange(-4, 4, 0.5)
  6. X, Y = np.meshgrid(X, Y)
  7. Z = (X**2+ Y**2)
  8. ax.plot_surface(X, Y, Z) #该图像就是表示函数z=x^2+y^2

python可视化分析的实现(matplotlib、seaborn、ggplot2)

二、seaborn库

1、常用统计图

1.1 箱线图

  1. import seaborn as sns #加载软件包seaborn
  2. #箱线图
  3. sns.boxplot(x=df['身高'])
  4. #竖着放的箱线图,也就是将 x 换成 y
  5. sns.boxplot(y=df['身高'])
  6. #分组绘制箱线图
  7. sns.boxplot(x='性别', y='身高',data=df) #将身高按性别分组后绘制

python可视化分析的实现(matplotlib、seaborn、ggplot2)

1.2 小提琴图

  1. sns.violinplot(x='性别', y='支出', data=df) #箱线图的变种,可以加第三个类别参数hue

python可视化分析的实现(matplotlib、seaborn、ggplot2)

1.3 点图

  1. sns.stripplot(x='性别', y='身高', data=df, jitter=True) #分组的数据(定性+定量)画的点图,jitter参数为True表示将点分散开来,默认为false

python可视化分析的实现(matplotlib、seaborn、ggplot2)

1.4 条图与计数图

  1. #条图,即柱形图
  2. sns.barplot(x='性别', y='身高', data=df, ci=0, palette="Blues_d") #palette用于设置颜色
  3. #计数图
  4. sns.countplot(x='性别', hue="开设", data=df) #都是分类变量

python可视化分析的实现(matplotlib、seaborn、ggplot2)

1.5 分组图

  1. #按性别、开设依次分组后计数,aspect指比例大小
  2. sns.factorplot(x='性别', col="开设", col_wrap=3, data=df, kind="count", size=2.5, aspect=.8)

python可视化分析的实现(matplotlib、seaborn、ggplot2)

1.6 概率分布图

  1. #displot:直方图+密度函数,bins表示分的组数,kde=False表示不画出密度曲线,rug表示有数据的地方就标注出来
  2. sns.distplot(df['身高'], kde=True, bins=20, rug=True)
  3.  
  4. #自定义渐进正态函数图像
  5. def norm_sim2(N=1000,n=10):
  6. xbar=np.zeros(N)
  7. for i in range(N):
  8. xbar[i]=np.random.uniform(0,1,n).mean()#[0,1]上均匀随机数均值
  9. sns.distplot(xbar,bins=50)
  10. print(pd.DataFrame(xbar).describe().T)
  11. norm_sim2(N=100000,n=50)

python可视化分析的实现(matplotlib、seaborn、ggplot2)

2、联合图

  1. sns.jointplot(x='身高', y='体重', data=df)#画的散点图+单个变量的直方图

python可视化分析的实现(matplotlib、seaborn、ggplot2)

3、配对图

  1. #针对多个变量,两两配对,画在一起
  2. sns.pairplot(df[['身高','体重','支出']]) #将各变量间关系共放一张图上,在多元统计分析中很有用

python可视化分析的实现(matplotlib、seaborn、ggplot2)

三、ggplot库

ggplot库是采用的绘画中图层的思想,即一层一层往上叠加,先画好坐标,再添线,再增加其他操作,最后用 + 号连接起来,操作起来更有逻辑章法,语句简洁。ggplot新包是plotnine,与R语言的ggplot2对应,使用起来更方便,故直接import plotnine即可,里面的函数使用与ggplot是基本一样的

1、图层画法+常用图形

绘制直角坐标系和字体

  1. GP=ggplot(aes(x='身高',y='体重'),data=df)

python可视化分析的实现(matplotlib、seaborn、ggplot2)

在此基础上增加线图

  1. GP + geom_line()+ theme_grey(base_family = 'SimHei')#还可以再往上叠加,+geom_point()就是在折线图基础上加上散点图

python可视化分析的实现(matplotlib、seaborn、ggplot2)

改为有三个变量的点图,不同类型画不同记号(shape)/颜色(color)

  1. ggplot(df,aes(x='身高',y='体重',color='性别'))+geom_point()+ theme_grey(base_family = 'SimHei')

python可视化分析的实现(matplotlib、seaborn、ggplot2)

改为分面图:
用pandas绘制分组统计图还需要先groupby,ggplot一步到位更加简便

  1. ggplot(df,aes(x='身高',y='体重'))+geom_point()+facet_wrap('性别') +
  2. theme_grey(base_family = 'SimHei') #facet_wrap('性别')表示按性别分成两组画分面图

python可视化分析的实现(matplotlib、seaborn、ggplot2)

此外,+theme_bw()等可以设置图片背景、主题

2、快速绘图

ggplot也可以像pandas一样,在qplot函数中设置参数geom的取值而直接改变图像类型

  1. #快速绘制直方图
  2. qplot(x='身高',data=df, geom='histogram')+ theme_grey(base_family = 'SimHei')
  3. #快速绘制柱形图
  4. qplot('开设',data=df, geom='bar')+ theme_grey(base_family = 'SimHei')
  5. #默认散点图
  6. qplot('身高', '体重', data=df, color='性别') + theme_grey(base_family = 'SimHei')

以上是基于《python数据分析基础教程 王斌会》整理的学习笔记,还有许多参数设置没有写明,以及pyecharts 动态图神器,日后学习了再一点点补充吧~

到此这篇关于python可视化分析的实现(matplotlib、seaborn、ggplot2)的文章就介绍到这了,更多相关python 可视化内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/hcjdgskg/article/details/106958219

延伸 · 阅读

精彩推荐