Python图形可视化
Python图形可视化
一、 matplotlib模块学习
快速安装
pip install matplotlib
1. 折线图
import matplotlib.pyplot as plt
import random
x=range(10) # 定义x轴的数据 列表的数据类型
y=[random.uniform(15,35) for i in x] # 定义y轴的数据 # 列表的数据类型
plt.plot(x, y) # 绘制图像
plt.savefig('a1.png') # 保存图像 在当前目录保存名为test.png的图片,必须在show方法前否则图片就是空白
# plt.show() # 展示图像
import matplotlib.pyplot as plt
import random
x=range(10) # 定义x轴的数据 列表的数据类型
y=[random.uniform(15,35) for i in x] # 定义y轴的数据 # 列表的数据类型
plt.plot(x, y) # 绘制图像
plt.savefig('a1.png') # 保存图像 在当前目录保存名为test.png的图片,必须在show方法前否则图片就是空白
# plt.show() # 展示图像
a. 设置画布大小:
我们使用
plt.figure()
函数来设置画布大小,其参数如下:
- figsize : 设置画布的大小,单位英寸 长,宽
- dpi : 设置清晰度
import matplotlib.pyplot as plt
import random
x=range(10) # 定义x轴的数据
y=[random.uniform(15,35) for i in x] # 定义y轴的数据
plt.figure(figsize=(20,8),dpi=80) # 设置画布大小与清晰度
plt.plot(x, y) # 绘制图像
plt.show() # 展示图像
b. 自定义x轴、y轴刻度
xticks
,yticks
使用自定义刻度的函数,它有两个参数:
- ticks:要显示x轴的刻度
- labels:给对应的x刻度设置一个标签,并且覆盖之前的刻度,与传入ticks的列表长度要相等。
x轴每隔2两个数显示
import matplotlib.pyplot as plt
import random
x=range(10) # 定义x轴的数据
y=[random.uniform(15,35) for i in x] # 定义y轴的数据
plt.figure(figsize=(20,8),dpi=80) # 设置画布大小与清晰度
plt.xticks(x[::1]) # 定义显示的x轴步长为1
plt.plot(x, y) # 绘制图像
plt.show() # 展示图像
c. x轴显示中文
matplotlib默认字体是不支持中文的需要更改,有多种方法,现在只提供一种
import matplotlib.pyplot as plt
import random
x=range(10) # 定义x轴的数据
y=[random.uniform(15,35) for i in x] # 定义y轴的数据
plt.figure(figsize=(20,8),dpi=80) # 设置画布大小与清晰度
plt.xticks(x[::2],["1月","2月","3月","4月","5月"]) # 第二个参数可以指定显示字符串,不过传入xticks的这两个参数长度要相等
plt.plot(x, y) # 绘制图像
plt.show() # 展示图像
修改matplotlib默认字体,使它支持显示中文
方法一:
import matplotlib.pyplot as plt
import random
plt.rcParams['font.sans-serif']=['SimHei'] # 用来正常显示中文标签
x=range(10) # 定义x轴的数据
y=[random.uniform(15,35) for i in x] # 定义y轴的数据
plt.figure(figsize=(20,8),dpi=80) # 设置画布大小与清晰度
plt.xticks(x[::2],["1月","2月","3月","4月","5月"]) # 第二个参数可以指定显示字符串,不过传入xticks的这两个参数长度要相等
plt.plot(x, y) # 绘制图像
plt.show() # 展示图像
方法二:
修改全局字体样式,需要使用 matplotlib 模块的 rcParams
from matplotlib import rcParams
rcParams['font.family'] = 'SimHei' # 黑体
常用字体
宋体:SimSun
黑体:SimHei
微软雅黑:Microsoft YaHei
微软正黑体:Microsoft JhengHei
新宋体:NSimSun
新细明体:PMingLiU
细明体:MingLiU
标楷体:DFKai-SB
仿宋:FangSong
楷体:KaiTi
隶书:LiSu
幼圆:YouYuan
华文细黑:STXihei
华文楷体:STKaiti
华文宋体:STSong
华文中宋:STZhongsong
华文仿宋:STFangsong
方正舒体:FZShuTi
方正姚体:FZYaoti
华文彩云:STCaiyun
华文琥珀:STHupo
华文隶书:STLiti
华文行楷:STXingkai
华文新魏:STXinwei
d. 轴标签和标题
xlabel
、ylabel
使用修改x,y轴标签
title
可修改标题
import matplotlib.pyplot as plt
import random
plt.rcParams['font.sans-serif']=['SimHei'] # 用来正常显示中文标签
x=range(10) # 定义x轴的数据
y=[random.uniform(15,35) for i in x] # 定义y轴的数据
plt.figure(figsize=(20,8),dpi=80) # 设置画布大小与清晰度
plt.xticks(x[::2],["1月","2月","3月","4月","5月"]) # 第二个参数可以指定显示字符串,不过传入xticks的这两个参数长度要相等
plt.xlabel("时间变化") # 修改标签
plt.ylabel("温度变化")
plt.title("我是标题") # 修改标题
plt.plot(x, y) # 绘制图像
plt.show() # 展示图像
e. 添加网格线
grid
方法来设置图表中的网格线
f. 同一图中同时绘制多条折线
只是数据多准备一份罢了,基本什么区别
例外再添加上图例legend
,可读性更好
import matplotlib.pyplot as plt
import random
plt.rcParams['font.sans-serif']=['SimHei'] # 用来正常显示中文标签
x=range(60) # 定义x轴的数据
y_1=[random.uniform(15,18) for i in x] # 定义y轴的数据
y_2=[random.uniform(1,3) for i in x] # 定义y轴的数据
plt.figure(figsize=(20,8),dpi=80) # 设置画布大小与清晰度
plt.plot(x, y_1,label="上海") # 绘制图像
plt.plot(x, y_2,label="北京") # 绘制图像
plt.xticks(x[::5],["{}分钟".format(i) for i in x][::5]) # 第二个参数可以指定显示字符串,不过传入xticks的这两个参数长度要相等
plt.yticks(range(0,40,5)) # 自定义y轴刻度
plt.xlabel("时间变化") # 修改标签
plt.ylabel("温度变化")
plt.title("我是标题") # 修改标题
# 增加网格显示,0.5表示透明度为50%
plt.grid(linestyle="--",alpha=0.5)
plt.legend() #绘制图例
plt.show() # 展示图像
g. 同时绘制两个图
import matplotlib.pyplot as plt
import random
plt.rcParams['font.sans-serif']=['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
# x,y轴的数据
x=range(60)
y_shanghai=[random.uniform(15,18) for i in x]
# 另一个城市
y_beijing=[random.uniform(1,3) for i in x]
'''
fig 表示的是要绘制的一个画布,
ax 表示的是在fig这个画布的对象上,具体要绘制的对象子图。
'''
fig, ax = plt.subplots(1,2,figsize=(20,8),dpi=80) # 把画布分成一行两列
ax[0].plot(x,y_shanghai,'b--',label='上海')
ax[1].plot(x,y_beijing,'r',label='北京')
# 图例,必须在plot后面 简单显示图例
ax[0].legend()
ax[1].legend()
# 修改x y刻度
x_label=["11点{}分".format(i) for i in range(60)]
ax[0].set_xticks(x[::5],x_label[::5])
ax[0].set_yticks(range(0,40,5))
ax[1].set_xticks(x[::5],x_label[::5])
ax[1].set_yticks(range(0,40,5))
# 增加网格显示
ax[0].grid(linestyle="--",alpha=0.5)
ax[1].grid(linestyle="--",alpha=0.5)
# 添加描述信息
ax[0].set_xlabel('时间变化')
ax[0].set_ylabel('温度变化')
ax[0].set_title('上海城市11点到12点每分钟的温度变化状况1')
ax[1].set_xlabel('时间变化')
ax[1].set_ylabel('温度变化')
ax[1].set_title('北京城市11点到12点每分钟的温度变化状况2')
plt.show()
h. 绘制数学函数图像
import matplotlib.pyplot as plt
import numpy as np;
x=np.linspace(-10,10,1000000)
y=x**2
plt.figure(figsize=(8,8),dpi=80)
plt.grid(linestyle='--',alpha=0.5)
plt.plot(x,x**2)
plt.show()
i. 设置字体大小
在前面的例子中感觉显示的字体太小了,看的不舒服,现在来设置一下。
通过plt.rcParams['font.size']=18
来指定字体的大小
import matplotlib.pyplot as plt
import random
plt.rcParams['font.sans-serif']=['SimHei'] # 用来正常显示中文标签
plt.rcParams['font.size']=18 # 设置字体大小
x=range(60) # 定义x轴的数据
y=[random.uniform(15,18) for i in x] # 定义y轴的数据
plt.figure(figsize=(20,8),dpi=80) # 设置画布大小与清晰度
plt.plot(x, y) # 绘制图像
plt.xticks(x[::5],["{}分钟".format(i) for i in x][::5]) # 第二个参数可以指定显示字符串,不过传入xticks的这两个参数长度要相等
plt.yticks(range(0,40,5)) # 自定义y轴刻度
plt.xlabel("时间变化") # 修改标签
plt.ylabel("温度变化")
plt.title("我是标题") # 修改标题
# 增加网格显示,0.5表示透明度为50%
plt.grid(linestyle="--",alpha=0.5)
plt.show() # 展示图像
2. 散点图绘制
主要使用
scatter
方法来绘制散点图,参数如下:
参数说明:
- x,y:长度相同的数组,也就是我们即将绘制散点图的数据点,输入数据。
- s:点的大小,默认 20,也可以是个数组,数组每个参数为对应点的大小。
- c:点的颜色,默认蓝色 'b',也可以是个 RGB 或 RGBA 二维行数组。
- marker:点的样式,默认小圆圈 'o'。
- cmap:Colormap,默认 None,标量或者是一个 colormap 的名字,只有 c 是一个浮点数数组的时才使用。如果没有申明就是 image.cmap。
- norm:Normalize,默认 None,数据亮度在 0-1 之间,只有 c 是一个浮点数的数组的时才使用。
- vmin,vmax::亮度设置,在 norm 参数存在时会忽略。
- alpha::透明度设置,0-1 之间,默认 None,即不透明。
- linewidths::标记点的长度。
- edgecolors::颜色或颜色序列,默认为 'face',可选值有 'face', 'none', None。
- plotnonfinite::布尔值,设置是否使用非限定的 c ( inf, -inf 或 nan) 绘制点。
- **kwargs::其他参数。
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.size'] = 18
x = np.array([1, 2, 3, 4, 5, 6, 7, 8])
y = np.array([1, 4, 9, 16, 7, 11, 23, 18])
sizes = np.array([20,50,100,200,500,1000,60,90])
plt.figure(figsize=(8,8),dpi=80)
plt.scatter(x,y,s=sizes) # 绘制散点图
plt.show()
# 注意:散点图的数据是一维矩阵 并非是列表数据类型
3 柱状图
主要使用
bar()
方法来绘制柱形图。
bar() 方法语法格式如下:
- x:浮点型数组,柱形图的 x 轴数据。
- height:浮点型数组,柱形图的高度。
- width:浮点型数组,柱形图的宽度。
- bottom:浮点型数组,底座的 y 坐标,默认 0。
- align:柱形图与 x 坐标的对齐方式,'center' 以 x 位置为中心,这是默认值。 'edge':将柱形图的左边缘与 x 位置对齐。要对齐右边缘的条形,可以传递负数的宽度值及 align='edge'。
- **kwargs::其他参数。
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif']=['SimHei'] # 用来正常显示中文标签
movie_names = ['雷神3:诸神黄昏','正义联盟','东方快车谋杀案','寻梦环游记','全球风暴', '降魔传','追捕','七十七天','密战','狂兽','其它']
tickets = [73853,57767,22354,15969,14839,8725,8716,8318,7916,6764,52222]
x = range(len(movie_names))
plt.figure(figsize=(20,8),dpi=80)
plt.bar(x,tickets,color=['b','g','r','c','m','y','k'])
plt.xticks(x,movie_names)
plt.title('电影票房收入对比')
plt.grid(linestyle='--',alpha=0.5)
plt.show()
a. 多组柱状图
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif']=['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
movie_name = ['雷神3:诸神黄昏','正义联盟','寻梦环游记']
first_day = [10587.6,10062.5,1275.7]
first_weekend=[36224.9,34479.6,11830]
plt.figure(figsize=(20,8),dpi=80)
x=range(len(movie_name))
plt.bar(x,first_day,width=0.2,label='首日票房') # 绘制第一组柱状图
plt.bar([i+0.2 for i in x],first_weekend,width=0.2,label='首周票房') # 绘制第二组柱状图
plt.legend() # 绘制图例
plt.xticks([i+0.1 for i in x],movie_name) # 修改x轴刻度
plt.show()
b. 垂直水平方向的柱状图
垂直方向的柱状图可以使用
barh()
方法来设置:
import matplotlib.pyplot as plt
x = ["Runoob-1", "Runoob-2", "Runoob-3", "C-RUNOOB"]
y = [12, 22, 6, 18]
plt.figure(figsize=(20,8),dpi=80)
plt.barh(x,y)
plt.show()
4 直方图
使用
hist()
方法来绘制直方图
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号import matplotlib.pyplot as plt
# 电影时长分布状况
time = [131, 98, 125, 131, 124, 139, 131, 117, 128, 108, 135, 138, 131, 102, 107, 114, 119, 128, 121, 142, 127, 130, 124, 101, 110, 116, 117, 110, 128, 128, 115, 99, 136, 126, 134, 95, 138, 117, 111,78, 132, 124, 113, 150, 110, 117, 86, 95, 144, 105, 126, 130,126, 130, 126, 116, 123, 106, 112, 138, 123, 86, 101, 99, 136,123, 117, 119, 105, 137, 123, 128, 125, 104, 109, 134, 125, 127,105, 120, 107, 129, 116, 108, 132, 103, 136, 118, 102, 120, 114,105, 115, 132, 145, 119, 121, 112, 139, 125, 138, 109, 132, 134,156, 106, 117, 127, 144, 139, 139, 119, 140, 83, 110, 102,123,107, 143, 115, 136, 118, 139, 123, 112, 118, 125, 109, 119, 133,112, 114, 122, 109, 106, 123, 116, 131, 127, 115, 118, 112, 135,115, 146, 137, 116, 103, 144, 83, 123, 111, 110, 111, 100, 154,136, 100, 118, 119, 133, 134, 106, 129, 126, 110, 111, 109, 141,120, 117, 106, 149, 122, 122, 110, 118, 127, 121, 114, 125, 126,114, 140, 103, 130, 141, 117, 106, 114, 121, 114, 133, 137, 92,121, 112, 146, 97, 137, 105, 98, 117, 112, 81, 97, 139, 113,134, 106, 144, 110, 137, 137, 111, 104, 117, 100, 111, 101, 110,105, 129, 137, 112, 120, 113, 133, 112, 83, 94, 146, 133, 101,131, 116, 111, 84, 137, 115, 122, 106, 144, 109, 123, 116, 111,111, 133, 150]
plt.figure(figsize=(20,8),dpi=80)
distince = 2 # 每组的间距
plt.hist(time,(max(time)-min(time))//distince)
plt.xticks(range(min(time),max(time)+2,distince))
plt.grid(linestyle='--',alpha=0.5)
plt.xlabel('电影时长大小')
plt.ylabel('电影的数据量')
plt.title("电影时长分布")
plt.show()
5 饼图
使用 pyplot 中的
pie()
方法来绘制饼图。
参数说明:
- x:浮点型数组,表示每个扇形的面积。
- explode:数组,表示各个扇形之间的间隔,默认值为0。
- labels:列表,各个扇形的标签,默认值为 None。
- colors:数组,表示各个扇形的颜色,默认值为 None。
- autopct:设置饼图内各个扇形百分比显示格式,%d%% 整数百分比,%0.1f 一位小数, %0.1f%% 一位小数百分比, %0.2f%% 两位小数百分比。
- labeldistance:标签标记的绘制位置,相对于半径的比例,默认值为 1.1,如 <1则绘制在饼图内侧。
- pctdistance::类似于 labeldistance,指定 autopct 的位置刻度,默认值为 0.6。
- shadow::布尔值 True 或 False,设置饼图的阴影,默认为 False,不设置阴影。
- radius::设置饼图的半径,默认为 1。
- startangle::起始绘制饼图的角度,默认为从 x 轴正方向逆时针画起,如设定 =90 则从 y 轴正方向画起。
- counterclock:布尔值,设置指针方向,默认为 True,即逆时针,False 为顺时针。
- wedgeprops :字典类型,默认值 None。参数字典传递给 wedge 对象用来画一个饼图。例如:wedgeprops={'linewidth':5} 设置 wedge 线宽为5。
- textprops :字典类型,默认值为:None。传递给 text 对象的字典参数,用于设置标签(labels)和比例文字的格式。
- center :浮点类型的列表,默认值:(0,0)。用于设置图标中心位置。
frame :布尔类型,默认值:False。如果是 True,绘制带有表的轴框架。
rotatelabels :布尔类型,默认为 False。如果为 True,旋转每个 label 到指定的角度。
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
movie_name = ['雷神3:诸神黄昏','正义联盟','东方快车谋杀案','寻梦环游记','全球风暴','降魔传','追捕','七十七天','密战','狂兽','其它']
place_count = [60605,54546,45819,28243,13270,9945,7679,6799,6101,4621,20105]
plt.figure(figsize=(20,8),dpi=80)
plt.pie(place_count,labels=movie_name,autopct='%1.2f%%')
plt.legend()
plt.axis('equal') # 确保饼图能化成一个圆
plt.show()
6.画布
'''
fig 表示的是要绘制的一个画布,
ax 表示的是在fig这个画布的对象上,具体要绘制的对象子图。
'''
fig, ax = plt.subplots(1, 2, figsize=(20, 8), dpi=80) # 把画布分成一行两列
#避免画布数据的重叠
plt.tight_layout()
#将画布中的第一个图形x轴的文字旋转270度
ax[0].tick_params(axis='x', labelrotation=270)
# 图例,必须在plot后面 简单显示图例
ax[0].legend()
ax[1].legend()
#保存图片
plt.savefig('save.jpg')
二、seaborn模块学习
下载模块
pip install seaborn
引入模块
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
读取数据
tips = pd.read_csv('tips.csv')
tips.head()
1. relplot()函数
seaborn.relplot()
这个函数功能非常强大,可以用来表示多个变量之间的关联关系。默认情况下是绘制散点图,也可以绘制线性图,具体绘制什么图形是通过kind参数来决定的。实际上以下两个函数就是relplot的特例:
散点类型:scatterplot -> relplot(kind="scatter")
线性类型:lineplot -> relplot(kind="line")
参数:
x, y vectors or keys in data
指定x轴和y轴上位置的变量
hue vector or key in data
将生成具有不同颜色的元素的分组变量。可以是按类别的(categorical),也可以是数字的,不过在后一种情况下,颜色映射的行为会有所不同。
size vector or key in data
将生成不同大小元素的分组变量。可以是按类别的(categorical),也可以是数字的,在后一种情况下,大小映射的行为会有所不同。
style vector or key in data
将生成具有不同样式的元素的分组变量。可以具有数字数据类型,但将始终被视为按类别的(categorical)。
data pandas.DataFrame, numpy.ndarray, mapping, or sequence
输入数据结构。要么是可以分配给命名变量的向量的长形式集合,要么是将进行内部整形的宽形式数据集。
row, col vectors or keys in data
定义要在不同面上绘制的子集的变量。
col_wrap int
以该宽度“包裹”列变量,使列面跨越多行。与行方面不兼容。
row_order, col_order lists of strings
按顺序组织网格中的行和/或列,否则将从数据对象推断顺序。
palette string, list, dict, or matplotlib.colors.Colormap
映射色调时选择要使用的颜色的方法。字符串值传递给color_palete()。List或dict值表示按类别的映射,而colormap对象表示数字映射。
hue_order vector of strings
指定色调语义分类级别的处理和打印顺序。
hue_norm tuple or matplotlib.colors.Normalize
以数据单位设置归一化范围的一对值,或将从数据单位映射到[0,1]区间的对象。用法意味着数字映射。
sizes list, dict, or tuple
确定使用大小时如何选择大小的对象。它始终可以是大小值列表或大小变量到大小的dict映射级别。当大小为数字时,它也可以是一个元组,指定要使用的最小和最大大小,以便在此范围内规范化其他值。
size_order list
指定大小变量级别的出现顺序,否则将根据数据确定。大小变量为数字时不相关。
size_norm tuple or Normalize object
当尺寸变量为数字时,以数据单位进行归一化,以缩放打印对象。
style_order list
指定样式变量级别的外观顺序,否则将根据数据确定。当样式变量为数字时不相关。
dashes boolean, list, or dictionary
用于确定如何为样式变量的不同级别绘制线。设置为True将使用默认的破折号代码,或者可以将破折号代码列表或样式变量的字典映射级别传递给破折号代码。设置为False将对所有子集使用实线。破折号在matplotlib中指定:一个(段、间隙)长度的元组,或一个用于绘制实线的空字符串。
markers boolean, list, or dictionary
确定如何为样式变量的不同级别绘制标记。设置为True将使用默认标记,或者可以将标记列表或将样式变量的字典映射级别传递给标记。设置为False将绘制无标记线。标记在matplotlib中指定。
legend “auto”, “brief”, “full”, or False
如何绘制图例。如果“简短”,数字色调和大小变量将用均匀分布的值样本表示。如果“已满”,每组将在图例中获得一个条目。如果为“自动”,则根据级别数在简短表示或完整表示之间进行选择。如果为False,则不添加图例数据,也不绘制图例。
kind string
Kind of plot to draw(这是一种要绘制的图), corresponding to a seaborn relational plot. Options are {scatter and line}.
height scalar
每个面的高度(英寸)
aspect scalar
每个面的纵横比,因此纵横比*高度(aspect*height)表示每个面的宽度
facet_kws dict
要传递到FacetGrid的其他关键字参数的字典.
units vector or key in data
识别采样单位的分组变量。使用时,将为每个单元绘制一条具有适当语义的单独线,但不会添加图例条目。当不需要精确身份时,用于显示实验重复的分布。
kwargs key, value pairings
其他关键字参数传递给底层plotting函数。
Returns
散点型
需求1:分析每周每天花销总额与小费的关系
可以发现:消费越高,小费越高;小费集中在1-5之间
需求2:按天分析每天花销总额与小费的关系(分类 hue='day')
sns.relplot(x='total_bill',y='tip',data=data,hue='day').savefig('pngs/a1.png')
可以发现:星期六花销最高,对应的小费也越高
需求3:按午餐和晚餐分类并按天分析每天花销总额与小费的关系(col= 'time')
sns.relplot(x='total_bill',y='tip',data = data,hue='day',col='time').savefig('pngs/a1.png')
需求4:按性别分析午餐和晚餐,哪个性别付的小费最多(row='sex')
sns.relplot(x='total_bill',y='tip',data = data,hue='day',col='time',row='sex').savefig('pngs/a1.png')
折线型
案例1:
sns.relplot(x='total_bill',y='tip',data=data,kind='line').savefig('pngs/a1.png')
案例2:
sns.relplot(x='total_bill',y='tip',data=data,kind='line',hue='day').savefig('pngs/a1.png')
案例3:
sns.relplot(x='total_bill',y='tip',data=data,kind='line',hue='day',col='time').savefig('pngs/a1.png')
案例4:
sns.relplot(x='total_bill',y='tip',data=data,kind='line',hue='day',col='time',row='sex').savefig('pngs/a1.png')
案例5:
sns.relplot(x="timepoint", y="signal", data=fmri, kind="line", errorbar=('ci', 60), hue="region", col="event",
style="region").savefig('pngs/a1.png')
案例6:
sns.relplot(x="timepoint",y="signal",data=fmri,kind="line",errorbar=('ci', 60),hue="region",col="event").savefig('pngs/a1.png')
案例七:
sns.relplot(x="timepoint",y="signal",data=fmri,kind="line",errorbar=None,hue="region",col="event",style="region").savefig('pngs/a1.png')
2 分类型绘图
分类统计图,则是根据分类,统计每个分类下的数据的个数或者比例。有以下几种方式:
条形图:barplot() (with kind="bar")
柱状图:countplot() (with kind="count")
点线图:pointplot() (with kind="point")
条形图
seaborn中的条形图具有统计功能,可以统计出比例,平均数,也可以按照你想要的统计函数来统计。
sns.catplot(x='day',y='total_bill',data = data).savefig('pngs/a1.png')
sns.catplot(x='day',y='total_bill',data = data,hue='time').savefig('pngs/a1.png')
sns.catplot(x='day',y='total_bill',data = data,hue='time',row = 'sex').savefig('pngs/a1.png')
sns.catplot(x='day',y='total_bill',data = data,kind='bar').savefig('pngs/a1.png')
sns.catplot(x='day',y='total_bill',data = data,kind='bar',estimator = sum).savefig('pngs/a1.png')
sns.catplot(x='day',y='total_bill',data = data,kind='bar',estimator = sum,hue='time').savefig('pngs/a1.png')
sns.catplot(x='day',y='total_bill',data = data,kind='bar',estimator = sum,hue='time',row='sex').savefig('pngs/a1.png')
3 泰坦尼克号案例学习
需求1:分析男女获救比例
data1 = pd.read_csv('titanic.csv')
sns.catplot(x='sex',y='survived',data=data1,kind='bar').savefig('pngs/a1.png')
需求2:按舱位分析,男女获救比例
sns.catplot(x='sex',y='survived',data=data1,kind='bar',hue='class').savefig('pngs/a1.png')
可以发现:女性获救比例高于男性,说明人类在灾难面前,往往考虑更多的弱势群体。三等舱获救比例高于一二等舱,说明阶层越高获得的特权就越高
4 箱体型绘图
sns.boxplot(x='day',y='tip',data=data)
可以发现:以星期天为例,小费平均值为3,最高值将近7,最低值低于1,全天无异常值。
5 分布型绘图
sns.distplot(),bins柱子分布个数
需求1:泰坦尼克号,所有乘客年龄分布状况
sns.distplot(data1['age'],bins=20)
需求2:二变量分布图
sns.jointplot(x='total_bill',y='tip',data=data,kind='hex')
'''
参数如下:
height图形大小设置
ratio主图和副图之间的比例
space 副图与主图之间的距离
'''
sns.jointplot(x='total_bill',y='tip',data=data,kind='hex',gridsize=15,height=10,ratio=3,space=0,marginal_kws={"rug":True,"kde":True},color="red")
四变量两两关系分布图
sns.pairplot(data)