天天看点

Python Matplotlib绘图

  1. Matplotlib安装

    cmd输入:pip install Matplotlib

    点我进入Matplotlib官网

  1. 画布(fig)与子图(ax)

    需要导入:

    form matplotlib import pyplt as plt

plt.figure(figsize,dpi)

创建画布

plt.figure(属性)
figsize = (widtht,hight) 设置画布宽度和高度
dpi 画布透明度

plt.subplot(x y index)

创建子图

plt.subplot(属性)
x 行数
y 列数
index 索引(从1开始,从左往右,从上往下)

plt.subplots(nrows, ncols, sharex = False, sharey = False)

创建画布和子图

返回值:fig,ax

plt.subplots(属性)
nrows 子图的行数
ncols 子图的列数
sharex 所有子图使用相同的x轴刻度
sharey 所有子图使用相同的y轴刻度
通用方法
plt.figure(figsize=None,dpi=None) 生成新的画布,figsize:画布大小(传参:元组),dpi:透明度
plt.savefig(fname) 保存图片,fname:保存图片位置
plt.xticks(ticks=None,lables=None) ticks:设置x轴刻度的值,labels:刻度标签
plt.yticks(ticks=None,lables=None) ticks:设置y轴刻度的值,labels:刻度标签
plt.xlabel(xlabel) 设置x轴标签
plt.ylabel(ylabel) 设置y轴标签
plt.title() 设置图标题
plt.grid() 根据x轴和y轴的数值展示轴网格
plt.legend(prop) 显示图例标签,prop:局部字体设置
plt.annotate(text,xy,xytext,arrowprops = {}) 数据标签,text:文本标签,xy:标点位置(元组),xytext:文本位置(元组),arrowprops:箭头设置
plt.show() 释放空间,并显示已绘制的图
plt.subplots_adjust(wspace,hspace) 调整子图之间的间距,wspace(左右间距),hspace(上下间距)

zip() 函数

作用:用于生成坐标

zip(x,y)

生成坐标(x,y必须数量一致)

zip(属性)
x x轴上的位置
y y轴上的位置
  1. 中文显示问题

    解决方法:

方法一:

import matplotlib
font = {
    'family':'SimHei',
    'weight':'bold',
    'size':12
}
matplotlib.rc("font", **font)
           

方法二:

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # 步骤一(替换sans-serif字体)
plt.rcParams['axes.unicode_minus'] = False   # 步骤二(解决坐标轴负数的负号显示问题)
           

方法三:

from matplotlib import pyplot as plt
from matplotlib.font_manager import FontProperties 
font = FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=14)
x = [1,2,3,4]
y = [3,2,1,3]
plt.plot(x,y)
plt.xlabel("x轴标签",fontproperties=font)
plt.show()
           
  1. 折线图

    折线图以折线的上升或下降来表示统计数量的增减变化的统计图

    特点:能够显示数据的变化趋势,反映事物的变化情况

    折线图可以通过plt.plot()函数来绘制

plt.plot(x,y,color,linestyle,marker,label)

构件折线图

(x,y元素必须一致)

plt.plot(属性)
x 在x轴上的点
y 在y轴上的点
color 设置线的颜色
linestyle 设置线的样式
marker 标记样式
label 图例标签
  1. 散点图

    散点图用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或总结坐标点的分布模式

    特点:判断变量之间是否存在数量关联趋势,表示离群点(分布规律)

    散点图通过plt.scatter() 函数

plt.scatter(x,y)

来构件散点图

plt.scatter(属性)
x 在x轴上的点
y 在y轴上的点
  1. 柱状图及条形图

    条形图是用宽度相同的条形的高度或长短来表示数据多少的图形。条形图可以横置或纵置,纵置时也称为柱形图。

    特点:1.能够使人们一眼看出各个数据的大小。

            2.易于比较数据之间的差别。

    通过 plt.bar() 方法绘制柱状图, plt.barh() 方法绘制条形图

plt.bar(x,height,width = 0.8,bottom,align = "center")

构建 柱状图

plt.bar(属性)
x 在x轴上的位置
height 在y轴上的高度
width = 0.8 柱子的宽度
bottom = “None” 柱子底部的起始位置
align = “center” 校准位置

plt.barh(y,width,height = 0.8,align = "center")

构建 条形图

bar.barh(属性)
y 在x轴上的长度
width 在y轴上的位置
height 柱子的宽度
align = “center” 校准位置
  1. 直方图

    直方图由一系列高度不等的纵向条纹或线段表示数据分布的情况,一般用横轴表示数据范围,纵轴表示分布情况

    特点:绘制连续性的数据,展示一组或者多组数据的分布情况(统计)

    通过 plt.hist() 方法绘制

plt.hist(x,bins = None,density =False)

构建图形

plt.hist(属性)
x 在x轴上的位置
bins = None 组数(默认为10)
density = False 频率(默认为频数)
  1. 扇形图

    扇形图,用整个圆表示总数,用圆内各个扇形的大小表示各部分数量占总数的百分数。

    通过 plt.pie() 方法绘制

plt.pie(x, explode=None, labels=None,autopct=None,shadow=False)

构建图形

plt.pie(属性)
x 扇形数据
explode = None 设置某几个分块是否要分离饼图
labels = None 每块扇形标签
autopct = None 百分比数据标签
shadow = False 是否显示阴影
plt.pie返回值
patchs 绘制饼图每块对象
texts 文本列表
autotexts 百分比的文本列表
  1. 箱型图

    箱线图是一种直观简洁的方式去呈现一组数据的分布。 箱线图广泛用于各个数据分析领域,它能非常简单明了地显示一组数据中5个重要数值,并且还能发现一组数据中的存在的异常值。

五个重要数值
最大值 最小值 中位数 下四分位数 上四分位数

通过 plt.boxplot() 方法绘制

ply.boxplot(x,notch=None,sym=None,vert=None,whis=None,positions=None,widths=None,labels=None,meanline=None,showmeans=None)

构建图形

plt.boxplot(属性)
x 需要绘制的箱型图的数据
notch = None 是否展示置信区间 默认为False
sym = None 代表异常点的符号表示 默认为圆点
vert = None 是否是垂直的 默认是True
whis = None 上下限系数 默认为1.5
positions = None 设置每个盒子的位置
widths = None 设置每个盒子的宽度
labels = None 每个盒子的label
meanline和showmean 都为True的时候 会展示平均线
  1. 雷达图

    雷达图(Radar Chart)又被叫做蜘蛛网图,适用于显示三个或更多的维度的变量的强弱情况。比如某个企业在哪些业务方面的投入等,都可以用雷达图方便的表示。

用过 plt.polar() 来绘制

plt.polar(theta,r)

来构建图形

plt.polar
theta 分割区块
r 数据

(区块和数据个数必须相等)

  1. Axes (子画)

    Axes容器是用来创建具体的图形的。比如画曲线,柱状图,都是画在上面。所以之前我们学的使用plt.xx绘制各种图形(比如条形图,直方图,散点图等)都是对Axes的封装

方法
axes.set_xlim(min,max) 限制x轴的范围
axes.set_ylim(min,max) 限制y轴的范围
axes.text(x,y,text) 在坐标位置标注文本
axes.set_xlabel(text) 设置x轴文本标签
axes.set_ylabel(text) 设置y轴文本标签
axes.twinx() 共享x轴
axes.twiny() 共享y轴
axes.minorticks_on() 显示x与y轴的子刻度
  1. Axis(轴)

    Axis代表的是x轴或者y轴的对象。包含Tick(刻度)对象,TickLabel刻度文本对象,以及AxisLabel坐标轴文本对象。axis对象有一些方法可以操作刻度和文本等。

axis: xaxis,yaxis

方法
axes.axis.set_label_coords(x,y) 设置x或y轴的文本标签位置

自定义刻度格式

from matplotlib import ticker

formatter = ticker.FormatStrFormatter("自定义格式")

ax1.yaxis.set_major_formatter(formatter)
           
  1. 多图布局

调整子图间距

fig.tight_layout(h_pad=None,v_pad=None)

(不传参,默认自动调整)

fig.tight_layout(属性)
h_pad 上下间距
v_pad 左右间距

自定义布局

方法一:

from matplotlib import pyplot as plt
plt.figure()
plt.subplot(221)
plt.subplot(223)
plt.subplot(122)
           
Python Matplotlib绘图

方法二:

fig.add_gridspec(nrows=1, ncols=1,width_ratios,height_ratios)

创建栅栏模式

fig.add_gridspec(属性)
nrows
nclos
width_ratios 宽的比值
height_ratios 高的比值
from matplotlib import pyplot as plt
fig = plt.figure()
gs = fig.add_gridspec(2,2)
fig.add_subplot(gs[0,:])
fig.add_subplot(gs[1,0])
fig.add_subplot(gs[1,1])
           
Python Matplotlib绘图