【分析工具】Python之Maplotlib01

目录

3.1基本介绍

3.1.1环境搭建

3.1.2基本特点

3.1.3图标组成

3.1.4绘制步骤

3.1.5配置参数

3.1.6简单的图形绘制

3.2基础图绘制

3.2.1条形图

3.2.2直方图

3.2.2.1普通直方图

3.2.2.2累计直方图

3.2.2.3转置直方图

3.2.3散点图

3.2.4折线图

3.2.5饼图

3.3子图的绘制

3.3.1使用subplots绘制

3.3.2使用add_plot创建子图

3.4混合图绘制

3.5图形参数

3.5.1画布的属性和方法

3.5.1.1坐标轴

3.5.1.2图例

3.5.1.3文字注释箭头

3.5.1.4设置全局属性

3.5.2线条样式

3.6加载图片和显示图片

3.6.1图片的加载

3.6.2图片的保存

3.6.3图片的生成

参看文章


3.1基本介绍

3.1.1环境搭建

  • 安装:pip3.6 install matplotlib
  • 导包:import matplotlib.pyplot as plt

%matplotlib inline  # 可以在控制台生成画布,直接生成图像,一般在jupyter中使用,其他编辑器中可能会报错

  • matplotlib:matrix:矩阵;plot:绘制;lib:库

3.1.2基本特点

  • 支持2D的绘图库,绘制各种各样的制式图
  • 线图、散点图、条状图、箱式图、雷达图
  • 有良好的操作系统的兼容性
  • 印刷级别的高质量图标
  • Python、Shell、IPython、Shell、Jupyter Notebook、Web
  • 核心对象:尺寸对象、plt绘制图片的时候自动创建一个figure对象

3.1.3图标组成

  • 图表的标题
  • 图例部分
  • xy轴标签
  • xy轴刻度部分
  • 图形部分
  • 图形标签

3.1.4绘制步骤

3.1.5配置参数

  • axex: 设置坐标轴边界和表面的颜色、坐标刻度值大小和网格的显示
  • figure: 控制dpi、边界颜色、图形大小、和子区( subplot)设置
  • font: 字体集(font family)、字体大小和样式设置
  • grid: 设置网格颜色和线性
  • legend: 设置图例和其中的文本的显示
  • line: 设置线条(颜色、线型、宽度等)和标记
  • patch: 是填充2D空间的图形对象,如多边形和圆。控制线宽、颜色和抗锯齿设置等。
  • savefig: 可以对保存的图形进行单独设置。例如,设置渲染的文件的背景为白色。
  • verbose: 设置matplotlib在执行期间信息输出,如silent、helpful、debug和debug-annoying。
  • xticks和yticks: 为x,y轴的主刻度和次刻度设置颜色、大小、方向,以及标签大小。

3.1.6简单的图形绘制

import numpy as np
import scipy.stats as stats
import matplotlib.style as style  # 调整面板的样式
import matplotlib.pyplot as plt
style.use('fivethirtyeight')  # 风格设置,画布背景
plt.rcParams['figure.figsize']=(14,7)
plt.rcParams['figure.dpi']=100

# 图形部分
X=np.linspace(-4,4,100)
y=stats.norm.pdf(X)/np.max(stats.norm.pdf(X))
plt.plot(X,y,label='PDF')
plt.fill_between(X,y,alpha=0.3)  # 填充图形
plt.plot(X,stats.norm.cdf(X),label='CDF')

plt.legend()  # 图例

# 图形的标签
plt.text(x=-1.3,y=0.7,s='PDF',rotation=60,alpha=0.75,weight='bold',size=20,color='#000FFF')
plt.text(x=0,y=0.6,s='CDF',rotation=60,alpha=0.75,weight='bold',size=20,color='#fc4000')

plt.title('Gaussian distribution')  # 标题
plt.xlabel('X',color='r')  # 标签
plt.ylabel('Y',color='r')
plt.axis([-4.2,4.2,0,1.2])  # 刻度
plt.savefig('./1.png',dpi=100)  # 保存
plt.show()  # 展示

3.2基础图绘制

3.2.1条形图

x=np.arange(1,9)
y=np.random.randint(50,150,size=8)
fig=plt.figure(figsize=(8,6),facecolor='gray')  # 画布的大小和颜色
plt.bar(
    x,y,  # 数据
    width=0.8,  # 条的宽度
    color='red'  # 图的颜色
)
labels=['Python','Java','C','C++','PHP','SQL','C#','Matlab']
plt.axis([0,9,40,150])  # 刻度范围
plt.xticks(x,labels=labels,rotation=60)  # 刻度替换,角度
plt.yticks(np.arange(40,150,10))  # 可以替换刻度,也可以指定刻度
plt.show()
fig=plt.figure(figsize=(8,6),facecolor='gray')  # 画布的大小和颜色
x=np.arange(1,9)
y=np.random.randint(50,150,size=8)
plt.barh(
    x,y,
    height=0.3,  # 条的宽度
    color='cyan'  # 图的颜色
)
labels=['Python','Java','C','C++','PHP','SQL','C#','Matlab']
plt.axis([40,150,0,9])  # 刻度范围
plt.yticks(x,labels=labels,rotation=0)  # 刻度替换,角度
plt.xticks(np.arange(40,150,10))  # 可以替换刻度,也可以指定刻度
plt.show()

3.2.2直方图

3.2.2.1普通直方图

n = np.random.randn(10000)
fig,axes = plt.subplots(1,2,figsize = (12,4))  # 生成1行两列的子图,宽12,高4,返回画布和子图
axes[0].hist(n,bins = 10) # 列数

3.2.2.2累计直方图

n = np.random.randn(10000)
axes[1].hist(n,bins = 50,cumulative = True)# 累计直方图
axes[1].set_title('Cumulative detailed histogram')
axes[1].set_xlim(min(n),max(n))

3.2.2.3转置直方图

import numpy as np
import matplotlib.pyplot as plt
u = 100 #数学期望
s = 15 #方差
x = np.random.normal(u,s,1000) # 生成正太分布数据
ax = plt.gca() #获取当前图表
ax.hist(x,bins = 100,color = 'r',orientation='horizontal')
plt.show()

反转直方图:orientation='horizontal'

3.2.3散点图

  • plt.scatter(x,y)

3.2.4折线图

  • plt.plot(x,y)

3.2.5饼图

plt.figure(figsize=(4, 4));
x = [4, 9, 21, 55, 30, 18]
labels = ['Swiss', 'Austria', 'Spain', 'Italy', 'France', 'Benelux']
explode = [0.2, 0.1, 0, 0, 0.1, 0]
colors = ['r', 'k', 'b', 'm', 'c', 'g']
plt.pie(x, # 数值列表
        labels=labels, # 标签
        labeldistance=1.2,# 各个标签与图的距离
        explode=explode,  # 表示每一块与主体独立出来的距离
        colors=colors, # 每一块的颜色
        autopct='%1.1f%%', # 占比的比例保留的位数
        pctdistance=0.5,
        shadow=True);
plt.show()

3.3子图的绘制

3.3.1使用subplots绘制

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
fig,axes=plt.subplots(
    ncols=2,  # 图的行数
    nrows=2,  # 图的列数
    figsize=(16,16),  # 图的大小
    sharex=False,  # 子图是否公用坐标轴
    sharey=False,  # 子图是否公用坐标轴
    facecolor ='gray'
)
x=np.arange(-50,50)
y1=lambda i:i**2
y2=lambda i:i**3
y3=lambda i:np.log2(i)
y4=lambda i:np.abs(i)
axes[0,0].plot(x,y1(x))
axes[0,1].plot(x,y2(x))
axes[1,0].plot(x,y3(x))
axes[1,1].plot(x,y4(x))
plt.subplots_adjust(wspace=0.2,hspace=0.2)  # 调整子图之间的距离,wspace和hspace分别用于控制间距宽度和高度的百分比
plt.show()

subplots返回两个东西,一个是fig表示大图,一个是axes表示包含很多小图对象的数组array.

3.3.2使用add_plot创建子图

fig = plt.figure(figsize=(12,8),facecolor='gray')  # 创建画布
x=np.arange(-50,50)
y1=lambda i:i**2
y2=lambda i:i**3
y3=lambda i:np.log2(i)
y4=lambda i:np.abs(i)
y=[y1(x),y2(x),y3(x),y4(x)]
for i in range(4):
    ax = fig.add_subplot(2,2,i+1)
    ax.plot(x,y[i])
    print(plt.gca())  # 获取当前子图
print(plt.gcf())  # 获取当前图表
plt.show()

3.4混合图绘制

x=np.arange(-20,21)
y1=np.sign(x)
y2=np.abs(x)
y3=np.log(y2)
fig=plt.figure(figsize=(8,6),facecolor='gray')
plt.scatter(x,y2,color='#220226')
plt.plot(x,y1,color='red')
plt.bar(x,y3)
plt.show()

3.5图形参数

3.5.1画布的属性和方法

3.5.1.1坐标轴

  • 刻度的大小:这里的ticks和labels生成的长度可以不一样,ticks表示原来的刻度,labels表示现在的刻度。x轴为xticks,y轴为yticks
plt.xticks(ticks=np.arange(-4,5,0.5),labels=[i for i in range(1,18)])
  •  刻度的范围
plt.axis([-1,14,0,3500])  # 横轴起始,纵轴起始
  • 刻度的样式
labels=['0','$\sigma$/2','$\pi$','3$\pi$/2','2$\pi$']
  • 坐标轴的形状
plt.axis('tight')  # 紧凑型
plt.axis('square')  # 正方形
plt.axis('auto')  # 自动
  • 坐标轴的标签
plt.xlabel('This is the X axis')
plt.ylabel('This is the Y axis')
plt.title("我是标题")

fontsize = 20,  # 字体大小
color = 'red'  # 颜色
fontproperties='FangSong'  # 字体

3.5.1.2图例

设置图例有两种方式.

方式一:绘制的时候设置

plt.plot(x,np.sin(x),label = '--sin--')
plt.legend(loc = 'upper left')  # 指定图例的位置

方式二:

plt.legend(
    ['--sin--','--cos--'],  # 曲线
    loc ='upper left' ,  # 图例的位置
    fontsize = 15, # 图例中字体大小
    ncol=2,  # 用来设置图例的列数
)

这里的loc属性还可以是一个两个元素的元组,表示图例的具体位置,loc默认为best表示合适的位置

3.5.1.3文字注释箭头

文字注释设置的两种方式:绝对位置

# 绝对位置
plt.text(0.2,0,s = 'sin(0)=0',fontdict={'fontsize':30})
# 相对位置
plt.figtext(0.2,0.5,'sin(0)=0')

箭头的设置-原生箭头

plt.annotate(
    s = 'max value',  # 文本内容
    xy = (5,25),  # 箭头位置
    xytext = (7,27),  # 文本位置
    fontsize = 15,  # 文本字体大小
    color = 'g',  # 文本颜色
    arrowprops=dict(arrowstyle='->',connectionstyle=style)
)

自定义箭头

plt.annotate(
    s = 'max value',  # 文本内容                
    xy = (5,25),  # 箭头位置             
    xytext = (7,27),  # 文本位置             
    fontsize = 15,  # 文本字体大小             
    color = 'g',  # 文本颜色                         
    arrowprops ={                                  
        'width':10,  # 箭头尾部宽度                 
        'headwidth':20,  # 箭头头部宽度                 
        'headlength':20,  # 箭头头部长度                 
        'shrink':0.3  # 箭头与文本距离             
    }
)

3.5.1.4设置全局属性

设置字体

plt.rcParams['font.sans-serif'] = 'SimHei'
fontproperties = 'KaiTi'

字体的大小

plt.rcParams['font.size'] = 50

用来正常显示坐标轴中的负号

plt.rcParams['axes.unicode_minus'] = False

设置网格线

sub.grid(True)

3.5.2线条样式

  • 颜色
color = 'red'
color = '#eeefff'  # 16进制
color = (0.3, 0.3, 0.4)  # 归一化到[0,1]元组格式
color=(0.1)  # 灰度
  • 透明度:alpha=0.1
  • 背景颜色:通过plt.subplot()方法传入facecolor参数来设置坐标轴的背景色
plt.subplot(facecolor='cyan')
  • 线的样式
marker='*'  # 用来设置线型
markersize = 50  # 用来设置线宽
dashes=[10, 5, 5, 2]  # 设置线的类型,试试就知道
plt.plot(x, x**3, 'go-.')  # 多参连用
linewidth=4  # 线宽
markerfacecolor='red'  # 线的颜色
markersize=12  # 线型的大小
  • 线宽:linewidth=4  # 线宽
  • line2 = plt.plot(x,y*2,x,y*3)
  • set_xticks、set_yticks、set_xticklabels、set_yticklabels方法

3.6加载图片和显示图片

3.6.1图片的加载

img=plt.imread('./a.jpg')
plt.imshow(img)

3.6.2图片的保存

fig.savefig(
    filename = "filena.eps",  # 文件路径
    dpi = 100,  # 图像分辨率
    facecolor = 'g'  # 图像的背景颜色
    edgecolor = 'orange'  # 边界颜色
)

3.6.3图片的生成

img=np.random.randint(0,255,size=(327,500,3))
plt.imshow(img)

参看文章

发布了133 篇原创文章 · 获赞 67 · 访问量 9914

猜你喜欢

转载自blog.csdn.net/weixin_43797885/article/details/104668337