【数据可视化】


前言

2023/10/31
这是一篇基于pandas的关于数据可视化的学习笔记


一、Matplotlib的使用

1.1 基础绘图

import numpy as np
import matplotlib.pyplot as plt
x=np.linspace(0,10,100)
y=np.sin(x)
z=np.cos(x)
plt.plot(x, y)
plt.plot(x,z)

在这里插入图片描述

1.2 面向对象绘图流程

可以把Matplotlib的面向对象绘图流程简单地类比在画布上画图的过程,大致流程分成3步,这3步也对应画图的3层,从外到内分别是画布、子图、绘图元素(如线、文字等)。
  1. 创建Figure对象
fig1 = plt.figure(1)
fig2 = lit.figure(2)

运行之后,可以得到两张空图

  • 为Figure对象添加Axes对象(子图)
    使用add_subplot()函数
  • 为Axes对象添加Artist对象——在某一个画图区域添加绘图元素

1.3 图片对象

  • Matplotlib所绘制的图位于图片Figure对象中,调用plt.figure()函数可以创建一个图片对象(figure)。如果用户没有调用plt.figure()函数创建Figure对象,Matplotlib也会自动创建一个Figure对象。plt.figure()函数的语法格式如下。
plt.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, 
frameon=True)

【实例】创建Figure对象,并指定Figure对象的宽和高分别为4英寸和3英寸,背景颜色为蓝色,并在该Figure对象上绘制正弦和余弦函数图形

x=np.linspace(0,10,100)
y=np.sin(x)
z=np.cos(x)
plt.plot(x, y)
plt.plot(x,z)

在这里插入图片描述

1.4 子图

⦁ 使用fig.add_subplot()函数可以在一个Figure对象中创建一个或多个子图。
fig.add_subplot()函数的格式如下。

fig.add_subplot(nrows, ncols, index, **kwargs)

【实例】使用fig.add_subplot()函数绘制子图

ax1=fig.add_subplot(2,1,1)
x=np.linspace(0,10,100)
y=np.sin(x)
ax1.plot(x,y)
ax2=fig.add_subplot(2,1,2)
x=np.linspace(0,10,100)
z=np.cos(x)
ax2.plot(x,z)
fig

在这里插入图片描述

1.5 图像设置

1.5.1 图像线形设置

  • Matplotlib的plot()函数的参数除了有绘图数据的x和y,还有format_string字符串参数来指明颜色和线形。
    plt.plot()函数语法格式如下。
plt.plot(x,y,format_string,**kwargs)
  • format_string:提供一定格式的字符串,指定简单的绘图样式。用一个字符代表点的形状,例如,句点(.)表示小圆点,小写字母o表示大圆点,*表示五角星,小写字母p表示五边形;用一个字母表示颜色,例如,r表示红色,b表示蓝色,g表示绿色;用一些符号表示线条的样式,例如,-表示实线,–表示虚线等。
  • 还可以把这些符号组合起来,并且没有先后顺序,例如pr–表示采用五边形的红色的虚线来绘制图形。因此,简单的样式直接用样式字符串的组合就可以实现了。

1.6 坐标轴设置

1.6.1 坐标轴基本设置

  • 在绘图的过程中,有时会遇到坐标轴的单位刻度不当,导致图形不美观或信息缺失的情况,这时需要对坐标轴进行修改或替换。对坐标轴进行修改和替换可以对pyplot进行设置,pyplot设置坐标轴的主要函数如下。
    ⦁ ① xlabel()、ylabel():分别设置x、y坐标轴标签。
    ⦁ ② titile():设置子图的标题。
    ⦁ ③ xlim():分别设置x、y轴的显示范围。
    ⦁ ④ xticks()、yticks():分别设置x、y轴的刻度。
    ⦁ 当然也可以对子图对象(Axes对象)进行设置,子图对象设置坐标轴的主要函数如下。
    ⦁ ① set_xlabel()、set_ylabel():分别设置x、y坐标轴标签。
    ⦁ ② set_title():设置子图的标题。
    ⦁ ③ set_xlim()、set_ylim():分别设置x、y轴的显示范围。
    ⦁ ④ set_xlticks()、set_yticks():分别设置x、y轴的刻度。

1.6.2 轴线隐去设置

⦁ ① gca():激活当前坐标轴。
⦁ ② ax.spine(‘top’)、spine(‘bottom’)、spine(‘left’)、spine(‘right’):轴线选择选项,分别用来选择上、下、左、右的轴线。
⦁ ③ ax.spine(‘top’).set_color():设置上面的轴线的颜色,当设置为none时,表示无色。
【实例】去除上面和右面的坐标轴

ax=plt.gca()
ax.spines['right'].set_color('none')#背景色是无色,因此设置为无色即可隐去
ax.spines['top'].set_color('none')

在这里插入图片描述

1.6.3 轴线移动设置

移动坐标轴需要经过以下几个步骤:第一步隐去非坐标轴框线,第二步确定待移动的坐标轴,第三步移动坐标轴。

⦁ ① ax.xaxis.set_ticks_position(‘bottom’):将bottom作为x轴移动。
⦁ ② ax.spines[‘bottom’].set_position((‘data’,0)):移动作为x轴的轴线bottom到坐标刻度为0的地方。
⦁ ③ ax.yaxis.set_ticks_position(‘left’):将left作为y轴移动。
⦁ ④ ax.spines[‘left’].set_position((‘data’,0)):移动作为y轴的轴线left到坐标刻度为0的地方。
⦁ set_position()函数第一个参数取值一般为’data’。‘data’表示当进行bottom或left轴设置时,移动相应坐标轴到第二个参数设置的坐标刻度处。第二个参数的取值范围是[相应坐标轴的最小刻度,相应坐标轴的最大刻度]。除此之外,set_position()函数第一个参数取值还可以是’axes’和’outward’,'axes’的移动规则与’data’相同,但是第一个参数为’axes’时,第二个参数的取值范围为[0,1],所取小数为整个坐标轴的相对位置。

【实例】绘制图5-15的图像。第一步隐去top和right的轴线;第二步将bottom作为x轴,移动到x轴坐标为0的地方;第三步将left作为y轴移动到y轴坐标为0的地方。

xtick=[-3,-1,0,1,3]
ytick=[-6,-2,0,2,6]
x=[-3,-1,0,1,3]
y=2*np.array(x)
fig,ax=plt.subplots(1,1)
ax.set_xlabel("x")
ax.set_ylabel("y")
ax.set_xticks(xtick)
ax.set_yticks(ytick)
#第一步,隐去top和right的轴线
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
#第二步,将bottom作为x轴进行移动
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
#将left作为y轴进行移动
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))
plt.plot(x,y)

在这里插入图片描述

二、Pandas绘图

2.1条形图

  • 绘制垂直条形图
DataFrame.plot.bar(self, x=None, y=None, **kwargs)
  • 绘制水平条形图
DataFrame.plot.barh(self, x=None, y=None, **kwargs)
  • 绘制堆积条形图
DataFrame.plot.bar(stacked=True)
DataFrame.plot.barh(stacked=True)

【实例】绘制三种条形图

import matplotlib as mpl
import seaborn as sns
mpl.rcParams['font.sans-serif'] = ['simhei.ttf']
mpl.rcParams['font.serif'] = ['simhei.ttf']
sns.set_style("darkgrid",{"font.sans-serif":['KaiTi', 'Arial']})
ax_1 = plt.subplot2grid((2,2),(0,0))
ax_2 = plt.subplot2grid((2,2),(0,1))
ax_3 = plt.subplot2grid((2,2),(1,0),colspan=2)
data1 = {'英语' : [74,85,96], '数学' : [87,78,89],'语文' : [81,92,83]};
df1 = pd.DataFrame(data1,index=["张三","李四","王五"]);
df1.plot.bar(ax=ax_1,figsize=(15,10),title="学生成绩表格")
df1.plot.barh(ax=ax_2,title="学生成绩表格")
df1.plot.barh(stacked=True,ax=ax_3,title="学生成绩表格")

在这里插入图片描述

2.2 直方图

  • DataFrame.plot.hist(bins=100)
  • bins:指定密度,也就是分组的数量。
    在这里插入图片描述

2.3 散点图

⦁ DataFrame.plot.scatter(x,y,s,c)
常用参数说明如下。
⦁ ① x:每个点的水平坐标的列名称或列位置。
⦁ ② y:每个点的垂直坐标的列名称或列位置。
⦁ s:每个点的大小。可以是单个标量,也可以是一个列表。当值是单个标量时,所有点都具有相同的大小;当值是一个列表时,将递归地用于每个点的大小。例如,当s=[2,14]时,如果有4个点,则第一个点的大小为2,第二个为14,第三个为2,第四个为14。
⦁ ④ c:每个点的颜色。可能的值是由名称、RGB或RGBA代码引用的单个颜色字符串,例如red或#a98d19。由名称、RGB或RGBA代码引用的一系列颜色字符串将被递归地用于每个点的颜色。例如[“绿色”,“黄色”]表示所有点都将被绿色或黄色填充。
【实例】

dict1 = {"销售量":[1000,2000,5000,2000,4000,3000,5000,6000,4000,4600],'时间':[1,2,3,4,5,6,7,8,9,10],'评价数':[20,400,30,50,500,80,200,300,240,300]}
df = pd.DataFrame(dict1)
df.plot.scatter(x='时间',y='销售量',s=df['评价数'],c="red")

在这里插入图片描述

2.4 饼图

  • 在Pandas绘图中,绘制饼图的函数格式如下。
DataFrame.plot.pie(subplots,y,figsize,autopct,radius,startangle,legend)
Series.plot.pie(subplots,figsize,autopct,radius,startangle,legend)

【常用参数】
⦁ ① subplots:DataFrame绘图时的必要参数,设置为True表示为所有列绘制饼图,当然也可以通过指定y轴的值为指定列绘制饼图。
⦁ ② figsize:设置图片的大小。
⦁ ③ autopct:设置百分比的显示格式。不设置则不显示百分比,设置格式为字符串形式,例如autopct='%0.1f%%'表示精准到小数点后一位。
⦁ ④ radius:设置圆的半径。
⦁ ⑤ startangle:设置饼图的初始摆放角度,例如startangle=90。
⦁ ⑥ legend:图例。

2.5 箱线图

⦁ 箱线图由5个数值点组成:下限(其值为Q1-1.5IQR),下四分位数(Q1)25%,中位数(Q2)50%,上四分位数(Q3)75%,上限(其值为Q3+1.5IQR)。其中IQR为四分位距,IQR=Q3-Q1。在上限和下限之外的点为异常值,图5-33所示为箱线图的5个数值点的说明。箱线图为我们提供了识别异常值的一个标准:异常值被定义为小于Q1-1.5IQR或大于Q3+1.5IQR的值。虽然这种标准有点任意性,但它来源于经验判断,经验表明它在处理需要特别注意的数据方面表现不错。

  • Pandan绘制箱线图的函数格式如下。
DataFrame.boxplot(column = None,by = None,ax = None,fontsize = None,rot = 0,
grid = True,figsize = None,layout = None,return_type = None,** kwds)

【主要参数】
⦁ ① column:str或str的列表,可选列名、名称列表或向量,按照给出的列或列表绘制箱线图。
⦁ ② by:str或array-like,可选,按照DataFrame对象中的某个分组绘制箱线图。
⦁ ③ ax:类matplotlib.axes.Axes的对象,可选。
⦁ ④ fontsize:float或str,以标签或字符串标记标签的字体大小。
⦁ ⑤ rot:int或float,默认为0,标签的旋转角度(以度为单位,相对于屏幕坐标系)。
⦁ ⑥ grid:布尔值,默认为True,将此设置为True将显示网格。
⦁ ⑦ figsize:以英寸为单位的元组(宽度,高度),表示在Matplotlib中创建的图形的大小。
⦁ ⑧ layout:元组(行,列),可选,例如(3,5)将从左上角开始使用3行和5列显示子图。

【实例】

plt.rcParams['axes.unicode_minus'] = False    #解决无法显示负数的问题
values= np.random.randn(200, 3)
ind = pd.date_range("2020-12-25", periods = 200)
df = pd.DataFrame(values, index = ind, columns = ["A", "B", "C"])
df.boxplot()

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liflysheep04

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值