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

作者:feifei2233 时间:2021-10-20 13:59:21 

一、matplotlib库

1、基本绘图命令


import matplotlib.pyplot as plt
plt.figure(figsize=(5,4)) #设置图形大小
plt.rcParams['axes.unicode_minus']=False #正常显示负号
plt.rcParams['font.sans-self']=['Kai Ti'] #设置字体,这里是楷体,SimHei表示黑体

#基本统计图
plt.bar(x,y);plt.pie(y,labels=x);plt.plot(x,y);
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()
分面绘图:


#一行两图
plt.subplot(121)
plt.bar(x,y)
plt.subplot(122)
plt.plot(x,y)
#一页多图
fig,ax=plt.subplots(2,2,figsize=(15,12)) # 2行2列放4个图,figsize控制大小
ax[0,0].bar(x,y);ax[0,1].plot(x,y);
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 stringloc 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 数学函数图


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

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


#极坐标图
t=np.linspace(0,2*math.pi)
x=3*np.sin(t);
y=5*np.cos(t)
plt.plot(x,y);
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 气泡图


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

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

4.3 三维曲面图


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

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

二、seaborn库

1、常用统计图

1.1 箱线图


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

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

1.2 小提琴图


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

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

1.3 点图


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

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

1.4 条图与计数图


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

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

1.5 分组图


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

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

1.6 概率分布图


#displot:直方图+密度函数,bins表示分的组数,kde=False表示不画出密度曲线,rug表示有数据的地方就标注出来
sns.distplot(df['身高'], kde=True, bins=20, rug=True)

#自定义渐进正态函数图像
def norm_sim2(N=1000,n=10):
xbar=np.zeros(N)
for i in range(N):
 xbar[i]=np.random.uniform(0,1,n).mean()#[0,1]上均匀随机数均值
sns.distplot(xbar,bins=50)
print(pd.DataFrame(xbar).describe().T)
norm_sim2(N=100000,n=50)

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

2、联合图


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

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

3、配对图


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

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

三、ggplot库

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

1、图层画法+常用图形

绘制直角坐标系和字体


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

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

在此基础上增加线图


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

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

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


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

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

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


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

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

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

2、快速绘图

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


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

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

来源:https://blog.csdn.net/hcjdgskg/article/details/106958219

标签:python,可视化
0
投稿

猜你喜欢

  • Go语言读写锁RWMutex的源码分析

    2024-05-09 09:47:55
  • 利用SQL语言有没有办法查到表中哪些记录中的全部

    2009-04-10 18:29:00
  • 用python做游戏的细节详解

    2022-02-08 05:18:39
  • django 发送邮件和缓存的实现代码

    2021-05-09 20:53:09
  • python3通过udp实现组播数据的发送和接收操作

    2023-01-14 02:27:42
  • Python使用pickle进行序列化和反序列化的示例代码

    2022-11-17 10:46:22
  • 在Django的模板中使用认证数据的方法

    2022-09-08 00:29:45
  • 微信小程序 调用微信授权窗口相关问题解决

    2024-04-18 10:08:44
  • django-crontab 定时执行任务方法的实现

    2021-04-12 06:22:36
  • python如何进入交互模式

    2023-08-10 19:57:12
  • 阿里云ECS服务器部署django的方法

    2023-04-09 10:00:26
  • Python使用pyshp库读取shapefile信息的方法

    2023-07-27 04:56:36
  • php5.3 不支持 session_register() 此函数已启用的解决方法

    2023-11-16 01:59:39
  • 电商网站的购买按钮

    2011-07-04 12:18:59
  • Python 正则表达式大全(推荐)

    2021-10-02 05:43:50
  • 在阿里云服务器上配置CentOS+Nginx+Python+Flask环境

    2023-07-26 09:47:46
  • python判断一个对象是否可迭代的例子

    2021-01-04 18:19:23
  • 详解vue中$nextTick和$forceUpdate的用法

    2024-06-05 09:15:44
  • 站长如何活用"nofollow"标签

    2008-05-13 12:40:00
  • Python读取HTML中的canvas并且以图片形式存入Word文档

    2022-09-03 04:50:33
  • asp之家 网络编程 m.aspxhome.com