plot参数详解python_数据分析--Part 6:Python-Matplotlib数据可视化

本文详细解析Python的Matplotlib库在数据可视化中的应用,包括图形绘制、坐标轴设置、图例、脊柱移动和图片保存。此外,还介绍了风格和样式的调整,如颜色、线型和透明度,并探讨了多图布局的各种方法,如子视图、嵌套和均匀布局。
摘要由CSDN通过智能技术生成

c7cf6dd38883cf7c66fff23e6c1482f0.png

(接上文)


九、Matplotlib数据可视化

数据可视化旨在将数据呈现为更直接的表示形式,例如散点图,密度图,条形图等。通过可视化数据,可以检测到潜在的异常值。在 Python 中,可以使用各种模块或库来可视化数据。Matplotlib 是主流模块之一。可以使用Matplotlib 以各种绘图样式来可视化数据。但是,Matplotlib 无法显示动态图。如果要创建一个巨大的动态图,则可以从 plotly 中使用 Dash 。

Matplotlib 是⼀个 Python 的 2D 绘图库,它交互式环境⽣成出版质量级别的图形。通过 Matplotlib这个标准类库,开发者只需要⼏⾏代码就可以实现⽣成绘图,折线图、散点图、柱状图、饼图、直⽅图、组合图等数据分析可视化图表。

安装:

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

可以通过下面的代码检查所安装的版本号:

pip show matplotlib

更新 Matplotlib 的版本可以使用下面的代码:

pip install matplotlib --upgrade

官方介绍:

https://matplotlib.org/api/index.html

下面用jupyter notebook演示操作详解:

1 基础知识

1.1 图形绘制

8f0dadc1400375dbb06ee9df296de2ea.png
jupyter notebook操作详解
import numpy as np
import matplotlib.pyplot as plt # 画图的画笔

In [17]:

x = np.linspace(start=0,stop=2*np.pi,num=100) # x轴
y = np.sin(x)  # y 轴
​
# 图形尺寸
plt.figure(figsize=(9,6))
​
# 绘制线形图
plt.plot(x,y)
​
# 设置网格线
plt.grid(linestyle='--',  # 网格线样式,样式有['-', '--', '-.', ':']
        color='skyblue',  # 颜色
        alpha=0.5)   # 透明度
​
# 设置坐标轴范围
plt.axis([-1,10,-1.5,1.5])   # xmin, xmax, ymin, ymax = axis()

In [18]:

plt.plot(x,y,'ro')  # 使用红色圆圈标记绘制x和y
​
# 设置坐标轴范围
plt.xlim([-1,10])
plt.ylim([-1.5,1.5])

In [20]:

# 绘制散点图
plt.scatter(x,y,color='green')  

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

9cb7184864b875995ee2e24b53274251.png
jupyter notebook操作详解

In [56]:

plt.plot(x,y)
# 1、设置x、y轴刻度
plt.yticks(ticks=[-1,0,1])
plt.xticks(np.arange(0,7,np.pi/2))

In [67]:

plt.plot(x,y)
# 2、设置x和y轴刻度标签,格式,用_= 接收是为了输出时只输出图
_ = plt.yticks(ticks=[-1,0,1],labels=['min',0,'max'],fontsize=8)
_ = plt.xticks(ticks=[0,np.pi/2,np.pi,np.pi*3/2,2*np.pi],
           labels=[0,r'$frac{pi}{2}$', '$pi$', '$frac{3pi}{2}$', r'$2*pi$'],  
                   # frac{分子}{分母},加r表示是一个正则表达式,不加r避免理解为转义,需要两个
           fontsize=10,
            color='red')
                   
# 3、设置y坐标轴标题
_ = plt.ylabel('y=sinx') 

In [73]:

plt.plot(x,y)
# 2、设置x和y轴刻度标签,格式,用 _= 接收是为了输出时只输出图
_ = plt.yticks(ticks=[-1,0,1],labels=['min',0,'max'],fontsize=8)
_ = plt.xticks(ticks=[0,np.pi/2,np.pi,np.pi*3/2,2*np.pi],
           labels=[0,r'$frac{pi}{2}$', '$pi$', '$frac{3pi}{2}$', r'$2*pi$'],  
                   # frac{分子}{分母},加r表示是一个正则表达式,不加r避免理解为转义,需要两个
           fontsize=10,
            color='red')
​
# 4、设置y坐标轴标题和格式
_ = plt.ylabel('y=sinx',
           rotation=0,  # 旋转的角度
           fontsize=15,
           ha='right')  # 水平对齐的方向    
​
# 5、设置图标题
_ = plt.title(label='正弦波',fontsize=12,color='red')   # 中文名会出现乱码

In [79]:

# 获取电脑上的字体库
from matplotlib.font_manager import FontManager
fm = FontManager()

In [80]:

fm.ttflist  # 查看所有的字体

In [81]:

 [font.name for font in fm.ttflist] # 获取所有的字体名

In [82]:

plt.plot(x,y)
# 2、设置x和y轴刻度标签,格式,用 _= 接收是为了输出时只输出图
_ = plt.yticks(ticks=[-1,0,1],labels=['min',0,'max'],fontsize=8)
_ = plt.xticks(ticks=[0,np.pi/2,np.pi,np.pi*3/2,2*np.pi],
           labels=[0,r'$frac{pi}{2}$', '$pi$', '$frac{3pi}{2}$', r'$2*pi$'],  
                   # frac{分子}{分母},加r表示是一个正则表达式,不加r避免理解为转义,需要两个
           fontsize=10,
            color='red')
​
# 4、设置y坐标轴标题和格式
_ = plt.ylabel('y=sinx',
           rotation=0,  # 旋转的角度
           fontsize=15,
           ha='right')  # 水平对齐的方向    
​
# 6、设置图标题,解决中文乱码的问题,设置fontfamily或family
_ = plt.title(label='正弦波',fontsize=12,color='red',fontfamily='Kaiti')    # 解决中文乱码问题

In [88]:

# 解决中文乱码问题,也可以用下面方法:每次编写代码时进行参数设置:
​
#coding:utf-8
plt.rcParams['font.sans-serif']=['Microsoft YaHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
​
​
plt.plot(x,y)
# 2、设置x和y轴刻度标签,格式,用 _= 接收是为了输出时只输出图
_ = plt.yticks(ticks=[-1,0,1],labels=['min',0,'max'],fontsize=8)
_ = plt.xticks(ticks=[0,np.pi/2,np.pi,np.pi*3/2,2*np.pi],
           labels=[0,r'$frac{pi}{2}$', '$pi$', '$frac{3pi}{2}$', r'$2*pi$'],  
                   # frac{分子}{分母},加r表示是一个正则表达式,不加r避免理解为转义,需要两个
           fontsize=10,
            color='red')
​
# 4、设置y坐标轴标题和格式
_ = plt.ylabel('y=sinx',
           rotation=0,  # 旋转的角度
           fontsize=15,
           ha='right')  # 水平对齐的方向    
​
# 5、设置图标题
_ = plt.title(label=u'正弦波',fontsize=12,color='red')   # 有中文出现的情况,需要u'内容'

1.3 图例

8f073c4ac5e90d3962e8be1a710b7303.png
Jupyter notebook 操作详解

bbox_to_anchor的位置参考:

195699d684cf468c97c11d3d80897b53.png

In [7]:

x = np.arange(start=0,stop=2*np.pi,step=np.pi/50)
​
# 绘制图形
plt.plot(x,np.sin(x),color='orange')
plt.plot(x,np.cos(x),color='pink')
​
# 1、添加图例
plt.legend(['Sin','Cos'])

In [54]:

x = np.arange(start=0,stop=2*np.pi,step=np.pi/50)
​
plt.plot(x,np.sin(x),color='orange')
plt.plot(x,np.cos(x),color='pink')
​
# 2、添加图例,设置格式
​
_ = plt.legend(['Sin','Cos'],fontsize=14,
           loc='upper right',    # 图例在边界里面的位置
           ncol=2)    # 图例的列数

In [56]:

x = np.arange(start=0,stop=2*np.pi,step=np.pi/50)
​
plt.plot(x,np.sin(x),color='orange')
plt.plot(x,np.cos(x),color='pink')
​
# 3、添加图例,设置格式
x = 1  # 图例边框着陆点的横坐标
y = 0.5  # 图例边框着陆点的纵坐标
width = 0.5  # 相对图的宽度
height = 0.6  # 相对图的高度
​
_ = plt.legend(['Sin','Cos'],fontsize=14,
           loc='upper right',    # 这里loc指示了anchor的着陆点是右上角
           ncol=2,    # 图例的列数
          bbox_to_anchor=(x,y,width,height))   # 图例相对位置   

1.4 脊柱移动

b10cf705cf7faf788d0bf3c028d434c8.png
Jupyter notebook 操作详解

In [58]:

x = np.linspace(start=-np.pi,stop=np.pi,num=50)
# 绘制图形
_ = plt.plot(x,np.sin(x),x,np.cos(x)) 

In [67]:

x = np.linspace(start=-np.pi,stop=np.pi,num=50)
# 绘制图形
_ = plt.plot(x,np.sin(x),x,np.cos(x)) 
​
# 1、get current axes获取子视图,轴面, (axes轴)
axes = plt.gca()
​
# 2、设置右边和上⾯脊柱消失
axes.spines['top'].set_color('white')  # spines脊柱
axes.spines['right'].set_color('white')
​
# 3、设置下⾯和左边脊柱位置,data表示数据
axes.spines['left'].set_position(('data',0))
axes.spines['bottom'].set_position(('data',0))
​
# 设置轴刻度
plt.yticks([-1,1])
_ = plt.xticks(ticks=[-np.pi,-np.pi/2,0,np.pi/2,np.pi],
          labels=[r'$-pi$',r'$-frac{pi}{2}$',0,r'$frac{pi}{2}$',r'$pi$'],
          fontsize = 12,
          color = 'red')

1.5 图片保存

5193584a8681daa38f2d4a55c495d625.png
Jupyter notebook 操作详解

保存的图片:

34eee6ad30f88e76ea41c3951c8f1d26.png

In [83]:

plt.figure(figsize=(9,6),linewidth=4)  # 创建了一个figure图片,设置线宽
x = np.linspace(start=-np.pi,stop=np.pi,num=50)  
plt.plot(x,np.sin(x),x,np.cos(x))   # 在轴面中进行图的绘制
plt.legend(['sin','cos'],loc='lower center',fontsize=15,
          ncol=2,bbox_to_anchor=[1,0.5,0.5,0.6])  # 图例
axes = plt.gca()  
​
# 1、设置视图背景颜⾊
axes.set_facecolor('lightblue')  # 轴面,被figure包围着
​
# 2、保存图片
plt.savefig('./image.png', # ⽂件名:png、jpg、pdf
            dpi = 100,   # 保存图⽚像素密度,越大图片越清楚
            facecolor = 'violet', # 视图与边界之间颜⾊设置
            edgecolor = 'lightgreen', # 视图边界颜⾊设置
            bbox_inches = 'tight')  # 设置紧凑显示,保存图⽚完整

In [84]:

plt.figure(figsize=(9,6),linewidth=4)  # 创建了一个figure图片,设置线宽
x = np.linspace(start=-np.pi,stop=np.pi,num=50)  
plt.plot(x,np.sin(x),x,np.cos(x))   # 在轴面中进行图的绘制
plt.legend(['sin','cos'],loc='lower center',fontsize=15,
          ncol=2,bbox_to_anchor=[1,0.5,0.5,0.6])  # 图例
axes = plt.gca()  
​
# 1、设置视图背景颜⾊
axes.set_facecolor('lightblue')  # 轴面,被figure包围着
​
# 2、保存图片,⾃动调整布局空间
plt.tight_layout() # ⾃动调整布局空间,就不会出现图⽚保存不完整
plt.savefig('./image2.png', # ⽂件名:png、jpg、pdf
            dpi = 100,   # 保存图⽚像素密度,越大图片越清楚
            facecolor = 'violet', # 视图与边界之间颜⾊设置
            edgecolor = 'lightgreen') # 视图边界颜⾊设置

2 风格和样式

2.1 颜⾊、线形、点形、线宽、透明度

301e33f1a7f95b643ca9505758d8ddde.png

In [114]:

x = np.linspace(0,2*np.pi,20)
y1 = np.sin(x)
y2 = np.cos(x)
​
# 1、设置颜⾊,线型,点型
plt.plot(x,y1,color='red',linestyle='--',alpha=0.7,marker='o')  
plt.plot(x,y2,color='orange',ls=':',marker='x')   # ls是linestyle的缩写,marker标记
plt.plot(x,y1+y2,color='blue',ls='-',marker='d')
plt.plot(x,y1-2*y2,color= '#FF00EE',ls='-',marker='1')  # 颜色可以是RGB
plt.plot(x,2*y1+y2,
         color=(0.2,0.4,0.6),  # 颜色是红绿蓝,三原色
         ls='-.',linewidth=6,    # 线型和线宽
         marker='3',markersize=10)   # marker标记和大小
_ = plt.plot(x,2*y1 - y2,'ko--') # 参数连⽤,黑色,标记为圆点的--线型

Out[114]:

f726b2d5057c05ccf32e8a38f291a264.png

97d75600907ded5dc60ccebfab31db04.png

2.2 更多属性设置

In [120]:

x = np.linspace(0,5,50)
def f(x):
     return np.exp(-x) * np.cos(2*np.pi*x) 
y= f(x)
plt.figure(figsize=(9,6))
​
plt.xticks(size = 18) # 设置刻度字体⼤⼩
plt.yticks(fontsize = 18)  # 设置刻度字体⼤⼩
​
_=plt.plot(x,y,color = 'blue',
         marker = 'o',
         ls = '--',
         lw = 2,   # 线宽
         alpha = 0.6,
         markerfacecolor = 'red',# 点颜⾊
         markersize = 10, # 点⼤⼩
         markeredgecolor = 'green',#点边缘颜⾊
         markeredgewidth = 3)#点边缘宽度

0066c6fe280f0be236e5bfe34240531f.png

3 多图布局

3.1 子视图

In [149]:

plt.figure(figsize=(9,6))
x = np.linspace(0,2*np.pi,20)
y = np.sin(x)
​
# 1、子视图1
axes = plt.subplot(2,2,1)  # 子视图,轴面,两⾏两列第⼀个⼦视图
axes.plot(x,y,color = 'red')
axes.set_facecolor('lightgreen') # 设置子视图背景,调⽤⼦视图设置⽅法设置⼦视图整体属性
​
# 2、子视图2
axes = plt.subplot(222)  # 可以连起来写,轴面,两⾏两列第二个⼦视图
# 第一种方法设置线的格式
axes.plot(x,y,'bo--') 
# 第二种方法设置线的格式
line,= axes.plot(x,2*y)  # 调用plot返回绘制对象,一条线
line.set_color('orange')   # 调⽤对象设置⽅法,设置属性
line.set_lw(3)
line.set_marker('d')
line.set_markerfacecolor('green')
line.set_markeredgecolor('red')
line.set_markersize(10)

c3c993eca0fd8c4f0bccdf0546811dfd.png

In [150]:

plt.figure(figsize=(9,6))
x = np.linspace(0,2*np.pi,20)
y = np.sin(x)
​
# 1、子视图1
axes = plt.subplot(2,2,1)  # 子视图,轴面,两⾏两列第⼀个⼦视图
axes.plot(x,y,color = 'red')
axes.set_facecolor('lightgreen') # 设置子视图背景,调⽤⼦视图设置⽅法设置⼦视图整体属性
​
# 2、子视图2
axes = plt.subplot(222)  # 可以连起来写,轴面,两⾏两列第二个⼦视图
# 第一种方法设置线的格式
axes.plot(x,y,'bo--') 
# 第二种方法设置线的格式
line,= axes.plot(x,2*y)  # 调用plot返回绘制对象,一条线
line.set_color('orange')   # 调⽤对象设置⽅法,设置属性
line.set_lw(3)
line.set_marker('d')
line.set_markerfacecolor('green')
line.set_markeredgecolor('red')
line.set_markersize(10)
​
# 3、子视图
axes = plt.subplot(2,1,2)  # 两⾏一列第二行⼦视图,就是已经画好的子视图下面的区域
axes.plot(x,y)  
​
# 也可以用plt.plot方法绘制
plt.sca(axes) # 设置当前视图
x = np.linspace(-np.pi,np.pi,200)
plt.plot(x,np.sin(x*x),color = 'red')  # 默认持有最近的这个子视图,所以调用plot方法绘制图形就是向最近这个子视图(轴面)绘制

Out[150]:

[<matplotlib.lines.Line2D at 0x1c012252a30>]

bcdc4cd779c7195c115ff703838bb965.png

3.2 嵌套

In [172]:

fig = plt.figure(figsize=(9,6))
x = np.linspace(0,2*np.pi,200)
y = np.sin(x)
plt.plot(x,y)
​
# 1、嵌套⽅式⼀,axes轴域(横纵坐标范围),⼦视图
# left,bottom坐标位置,范围0~1,0表示左下角,1表示右上角
# width,height宽度和高度
axes = plt.axes([0.6,0.6,0.2,0.2]) # 轴面 ,参数: [left, bottom, width, height]
axes.plot(x,y,color='green')
​
# 2、 嵌套⽅式⼆
ax = fig.add_axes([0.2,0.2,0.2,0.2]) # 使⽤视图对象添加⼦视图
ax.plot(x,y,'ro--')

Out[172]:

[<matplotlib.lines.Line2D at 0x1c00f75b310>]

e45643012023b525e3cde581eabe65a1.png

3.3 多图布局分格显示

3.3.1 均匀布局

In [185]:

x = np.linspace(0,2*np.pi,200)
​
# 1、创建一个figure图片,返回子视图
fig,((axes11,axes12,axes13),(axes21,axes22,axes23),(axes31,axes32,axes33)) = plt.subplots(3,3) 
# 2、设置figure尺寸
fig.set_size_inches(12,9)
​
axes11.plot(x,np.sin(x))
axes12.plot(x,np.cos(x))
axes13.plot(x,np.tanh(x))
axes21.plot(x,np.tan(x))
axes22.plot(x,np.sin(x*x))
axes23.plot(x,np.cos(x*x))
axes31.plot(x,np.sin(x) + np.cos(x))
axes32.plot(x,np.sin(x*x) + np.cos(x*x))
axes33.plot(x,np.sin(x)*np.cos(x))   
# 也可通过plt.subplot() ⼀个个添加⼦视图

Out[185]:

[<matplotlib.lines.Line2D at 0x1c0147cc970>]

732d20029890fd4f9cc7aea5ebc69064.png

In [188]:

x = np.linspace(0,2*np.pi,200)
​
# 1、创建一个figure图片,返回子视图
fig,((axes11,axes12,axes13),(axes21,axes22,axes23),(axes31,axes32,axes33)) = plt.subplots(3,3) 
# 2、设置figure尺寸,第二种方法
fig.set_figwidth(12)
fig.set_figheight(9)
​
axes11.plot(x,np.sin(x))
axes12.plot(x,np.cos(x))
axes13.plot(x,np.tanh(x))
axes21.plot(x,np.tan(x))
axes22.plot(x,np.sin(x*x))
axes23.plot(x,np.cos(x*x))
axes31.plot(x,np.sin(x) + np.cos(x))
axes32.plot(x,np.sin(x*x) + np.cos(x*x)) 
axes33.plot(x,np.sin(x)*np.cos(x))   # 也可通过plt.subplot() ⼀个个添加⼦视图
​
# 3、紧凑显示,边框会⽐较⼩
plt.tight_layout()
plt.show()

7edd04472e2677093c74a53b3efcbffd.png

(未完待续)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值