matplotlib基础知识(图形绘制&坐标轴、标签、刻度&字体设置&图例&脊柱移动&风格样式&多图布局&双轴显示)(1)


前言

python学习笔记—matplotlib day8(仅供学习使用)

软件的安装

pip3 install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple

介绍:在数据分析与机器学习中,我们经常要用到大量的可视化操作。一张制作精美的数据图片,可以展示大量的信息,一图顶千言。
而在可视化中,Matplotlib算得上是最常用的工具。Matplotlib 是 python 最著名的绘图库,它提供了一整套 API,十分适合绘制图表,或修改图表的一些属性,如字体、标签、范围等。
Matplotlib 是一个 Python 的 2D 绘图库,它交互式环境生成出版质量级别的图形。通过 Matplotlib这个标准类库,开发者只需要几行代码就可以实现生成绘图,折线图、散点图、柱状图、饼图、直方图、
组合图等数据分析可视化图表。


一、图形绘制

import numpy as np

import matplotlib.pyplot as plt

x = np.linspace(0,2 * np.pi,100)

# 说明:正弦波。x:NumPy数组
# 所有的数据,进行正弦计算
y = np.sin(x)


plt.plot(x,y)#这里绘制的图是默认的,以下代码是进行图片美化

plt.xlim(-1,10)#x的坐标轴范围
plt.ylim(-1.5,1.5)#y轴的范围

plt.grid(color = 'green',alpha = 0.5,linestyle = '--',linewidth = 1)#grid指网格线,alpha透明度,linestyle指虚线,linewidth虚线宽度

在这里插入图片描述

二、坐标轴刻度、标签、标题

1.寻找字体

from matplotlib import font_manager
fm = font_manager.FontManager()
[font.name for font in fm.ttflist] # 列表生成式

在这里插入图片描述
可使用command+f进行搜索字体:(如图所示共有五种楷体 )
在这里插入图片描述

2.设置

plt.figure(figsize=(9,6))#调整图片尺寸
plt.plot(x,y)

# 设置字体
plt.rcParams['font.family'] = 'Adobe Kaiti Std'
#设置字体大小
plt.rcParams['font.size'] = 28
# 设置数字负号(等于false时表示负号可以正常展示)
plt.rcParams['axes.unicode_minus'] = False

plt.title('正弦波',fontsize = 18,color = 'red',pad = 20)

plt.xlabel('X')#x轴标签
plt.ylabel('f(x) = sin(x)',rotation = 0,horizontalalignment = 'right')#rotation,fx旋转

a = plt.yticks([-1,0,1])#y轴刻度

#设置x轴刻度
_ = plt.xticks([0,np.pi/2,np.pi,1.5*np.pi,2*np.pi],
               [0,r'$\frac{\pi}{2}$',r'$\pi$',r'$\frac{3\pi}{2}$',r'$2\pi$'],color = 'red')# 字符串前面+r表示转义,$pi$=希腊字母的pi
#frac表示分号,前面的大括号表示分子,后面的大括号表示分母。

在这里插入图片描述

三、图例

import numpy as np
import matplotlib.pyplot as plt

# 1、图形绘制
x = np.linspace(0,2*np.pi) # x轴
# y轴
y = np.sin(x) # 正弦
# 绘制线形图
# 调整尺寸
plt.figure(figsize=(9,6))
plt.plot(x,y)
plt.plot(x,np.cos(x)) # 余弦波
plt.plot(x,np.sin(x) + np.cos(x))


# 2、图例
plt.legend(['Sin','Cos','Sin + Cos'],fontsize = 18,
           loc = 'center',
           ncol = 3,
           bbox_to_anchor = (0,1,1,0.2)) # x,y,widht,height
           #坐标轴左下角表示(0,0)右上角表示(1,1)

在这里插入图片描述

四、脊柱移动

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-np.pi,np.pi,50)
plt.rcParams['axes.unicode_minus'] = False
plt.figure(figsize=(9,6),facecolor='green')#这里的颜色是图形边框的颜色设置。

# plot绘制了两个图形,x-y成对出现,可以!!!
plt.plot(x,np.sin(x),x,np.cos(x),color = 'cyan')#这里的颜色设置是sin,cos线的颜色。

# 获取当前子视图
ax = plt.gca() # 获取当前视图

ax.set_facecolor(np.random.rand(3))#这里设置的是背景填充颜色。


# 右边和上面脊柱消失
ax.spines['right'].set_color('white') # 白色
ax.spines['top'].set_color('#FFFFFF') # rgb白色

# ax.spines['right'].set_alpha(0)
# ax.spines['top'].set_alpha(0)

# # 设置下面左边脊柱位置,data表示数据,axes表示相对位置0~1
ax.spines['bottom'].set_position(('data',0)) # 中间,竖直中间
ax.spines['left'].set_position(('data',0)) # 水平中间

plt.yticks([-1,0,1],labels=['-1','0','1'],fontsize = 18)
_ = plt.xticks([-np.pi,-np.pi/2,np.pi/2,np.pi],
           labels=[r'$-\pi$',r'$-\frac{\pi}{2}$',r'$\frac{\pi}{2}$',r'$\pi$'],
           fontsize = 18)

plt.grid()#背景网格位置。

plt.savefig('./2.pdf',dpi = 300)#dpi表示像素,分辨率

在这里插入图片描述

寻找颜色:

plt.colormaps()

在这里插入图片描述

五、风格样式-颜色、线形、点形、线宽、透明度

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0,2*np.pi,20) # 等差数列,20个
y1 = np.sin(x)
y2 = np.cos(x)

# 设置颜色,线型,点型
plt.plot(x,y1,color = 'indigo',ls = '-.',marker = 'p')
# rgb颜色表示 256 0 ~ 255 
# 0 、1、2……A、B、C、D、E、F
#marker=o就是线上的点点 p是五边形
plt.plot(x,y2,color = '#FF00EE',ls = '--',marker = 'o')

# 0 ~ 1之间
plt.plot(x,y1 + y2,color = (0.2,0.7,0.2),marker = '*',ls = ':')

plt.plot(x,y1 + 2*y2,linewidth = 5,alpha = 0.3,color = 'orange') # 线宽、透明度

# b --- blue o marker圆圈, --虚线# 参数连用
plt.plot(x,2*y1 - y2,'bo--') 

在这里插入图片描述

2.更多属性设置

import numpy as np
import pandas as pd

def f(x):
    return np.exp(-x) * np.cos(2*np.pi*x)

x = np.linspace(0,5,50)
plt.figure(figsize=(9,6))


# plot 参数
plt.plot(x,f(x),color = 'purple',
         marker = 'o', # marker
         ls = '--', # 样式
         lw = 2, # 线宽
         alpha = 0.6,#透明度
         markerfacecolor = 'red',# 点颜色
         markersize = 10,# 点大小
         markeredgecolor = 'green',#点边缘颜色
         markeredgewidth = 3)#点边缘宽度


plt.xticks(size = 18) # 设置刻度大小
_ = plt.yticks(size = 18)

在这里插入图片描述

六、多图布局

1.子视图

import numpy as np

import matplotlib.pyplot as plt

x = np.linspace(0,2*np.pi)

plt.figure(figsize=(9,6))
# 创建子视图
# 2行,1列,1第一个图
ax = plt.subplot(2,1,1)
ax.plot(x,np.sin(x))

# 后面这个2就是编号,从1,开始
# 1,2,3,4
# 5,6,7,8
# 9,10,11,12
ax = plt.subplot(2,1,2) # 2行,1列,第二个视图
ax.plot(x, np.cos(x))

在这里插入图片描述

fig,axes = plt.subplots(2,2) # 四个图

# 索引,0开始
axes[0,0].plot(x,np.sin(x),color = 'red')

axes[0,1].plot(x,np.sin(x),color = 'green')

axes[1,0].plot(x,np.cos(x),color = 'purple')

axes[1,1].plot(x,np.cos(x))

在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-np.pi,np.pi,20)
y = np.sin(x)

# 子视图1
plt.figure(figsize=(9,6))
ax = plt.subplot(221) # 两行两列第一个子视图
ax.plot(x,y,color = 'red')
ax.set_facecolor('green') # 调用子视图设置方法,设置子视图整体属性


# 子视图2
ax = plt.subplot(2,2,2) # 两行两列第二个子视图
line, = ax.plot(x,-y) # 返回绘制对象,列表中只有一个数据,取出来
line
line.set_marker('*') # 调用对象设置方法,设置属性
line.set_markerfacecolor('red')
line.set_markeredgecolor('green')
line.set_markersize(10)


# 子视图3
ax = plt.subplot(2,1,2) # 两行一列第二行视图

plt.sca(ax) # 设置当前视图

x = np.linspace(-np.pi,np.pi,200)

# 直接调用plt
plt.plot(x,np.sin(x*x),color = 'red')

在这里插入图片描述

2.视图嵌套

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-np.pi,np.pi,25)
y = np.sin(x)
fig = plt.figure(figsize=(9,6)) # 创建视图
plt.plot(x,y)



# 嵌套方式一,axes轴域(横纵坐标范围),子视图
# x,y,width,height
ax = plt.axes([0.2,0.55,0.3,0.3]) # 参数含义[left, bottom, width, height]
ax.plot(x,y,color = 'g')

# 嵌套方式二
# 具体对象,添加子视图
ax = fig.add_axes([0.55,0.2,0.3,0.3]) # 使用视图对象添加子视图
ax.plot(x,y,color = 'r')

在这里插入图片描述

3.多图布局

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0,2*np.pi)
# sharex:所有小图共享x轴  sharey:表示所有小图共享y轴  坐标轴以所有小图中范围最大的进行显示
fig, ((ax11,ax12,ax13), (ax21,ax22,ax23),(ax31,ax32,ax33)) = plt.subplots(3, 3)

# 也可通过plt.subplot() 一个个添加子视图
fig.set_figwidth(9)
fig.set_figheight(6)

ax11.plot(x,np.sin(x))
ax12.plot(x,np.cos(x))
ax13.plot(x,np.tanh(x))
ax21.plot(x,np.tan(x))
ax22.plot(x,np.cosh(x))
ax23.plot(x,np.sinh(x))
ax31.plot(x,np.sin(x) + np.cos(x))
ax32.plot(x,np.sin(x*x) + np.cos(x*x))
ax33.plot(x,np.sin(x)*np.cos(x))

# 紧凑显示,边框会比较小,可以注释掉该行查看效果
plt.tight_layout()
plt.show()

在这里插入图片描述

4.不平均分布

import numpy as np
import matplotlib.pyplot as plt


x = np.linspace(0,2*np.pi,200)
fig = plt.figure(figsize=(12,9))


# 使用切片方式设置子视图
ax1 = plt.subplot(3,1,1) # 视图对象添加子视图
ax1.plot(x, np.sin(10*x))
# 设置ax1的标题,xlim、ylim、xlabel、ylabel等所有属性现在只能通过set_属性名的方法设置
ax1.set_title('ax1_title')  # 设置小图的标题


# 添加:第二行,第一和第二列
ax2 = plt.subplot(3,3,(4,5))
ax2.set_facecolor('green')
ax2.plot(x,np.cos(x),color = 'red')


# 添加,右下角,那一列
ax3 = plt.subplot(3,3,(6,9))
ax3.plot(x,np.sin(x) + np.cos(x))


ax4 = plt.subplot(3,3,7)
ax4.plot([1,3],[2,4])


ax5 = plt.subplot(3,3,8)
ax5.scatter([1,2,3], [0,2, 4])
ax5.set_xlabel('ax5_x',fontsize = 12)
ax5.set_ylabel('ax5_y',fontsize = 12)

plt.show()

在这里插入图片描述

7、双轴显示

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-np.pi, np.pi,50)

y = np.sin(x)

plt.plot(x,y,color = 'blue')
_ = plt.yticks(np.linspace(-1,1,11),color = 'blue')
ax = plt.gca()# 获取当前视图
# twinx 请问是否有twiny呢?有的 ,就是公用y轴,然后两个x轴。
ax2 = ax.twinx() # 双胞胎,两个X轴合到一起的,两个X轴,对应着两个Y轴
# 其中一个视图,纵坐标范围:-1~1.0
# 另一个视图,范围 0 ~ 25
# 刻度会自适应
y2 = np.exp(x)
plt.plot(x,y2,color = 'red') # 默认向ax2这个子视图中绘制
_ = plt.yticks(np.arange(0,26,5),color = 'red')

在这里插入图片描述


总结

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

周小唁

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

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

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

打赏作者

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

抵扣说明:

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

余额充值