转载 Python 学习-Matplotlib库

本文详细介绍了Python的Matplotlib库,包括如何导入模块、设置图像参数、创建画布、绘制简单图像、创建子图、调整子图间距、使用plot函数绘制线条、设置标题和标签、添加注释、箭头和边框,以及保存和显示图像。此外,还涵盖了散点图、柱状图、直方图和饼图的绘制方法,以及解决中文乱码问题的策略。
摘要由CSDN通过智能技术生成

Python学习-Matplotib


载出处:https://blog.csdn.net/weixin_60535956/article/details/128311973

目录

Matplotlib简介

导入matplotlib模块

 图的参数说明

matplotlib图像组成部分介绍

matplotlib绘图步骤分析

matplotlib实现简单图像

matplotlib画布

画布-plt.figure()

实例

 同一画布制作多张图像

 创建多个子图

实例

plt.subplots

相关参数

调整subplot周围的间距

 实例

plot函数

format_string参数

颜色字符

标记字符

风格字符

 效果图

简单案例

完整案例

更多参数设定

设置标题、轴标签、刻度及刻度标签

实例

注释

matplotlib.pyplot.text()

在图中添加箭头

实例

边框设定

 pyplot文本显示函数

 图例

更多参数设定

同一窗口生成多个图

 不均衡布局

 图的保存

基础图标函数

 散点图

plt.colorbar

柱状图和直方图

 柱状图

 柱状图plt.bar

 柱状图实例

 堆叠柱状图实例

双向柱状图

 柱状图和直方图:柱状图实例

 水平柱状图

水平柱状图实例

直方图

 plt.hist

直方图实例

 饼图

plt.pie

饼图实例

 误差图

误差图实例

中午乱码问题

解决坐标轴负号显示问题、中文乱码问题(一次性使用)

永久更改方法 


Matplotlib简介

 matplotlib 是 Python 的 2D & 3D 绘图库。
 可以处理数学运算、绘制图表,或者在图像上绘制点、直线和曲线。
 matplotlib 通过 pyplot 模块提供了和 MATLAB 类似的绘图 API ,将众多绘图对象所构成的复杂结构隐藏在这套API 内部。
 安装 matplotlib 之前先要安装 numpy 。
 matplotlib 是开源库,可以从 https://matplotlib.org/ 下载。
 最好将输入数据转换为 np.array 类型
matplotlib 库由各种可视化类构成,内部结构复杂,受 Matlab 启发。
matplotlib.pyplot 是绘制各类可视化图形的命令子库,相当于快捷方式。

导入matplotlib模块

import matplotlib.pyplot as plt

 图的参数说明

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

matplotlib图像组成部分介绍

matplotlib绘图步骤分析

① 创建窗口、设置子图,每个figure 对象是一个图
② 绘制图形 plot 、设置横纵坐标等参数
③ 图形展示及保存

matplotlib实现简单图像


   
   
  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. # 定义 x 变量的范围 (-3,3) 数量 50
  4. x=np.linspace(- 3, 3, 50)
  5. y=x** 2
  6. plt.figure()
  7. plt.plot(x, y)
  8. plt.show()

 

matplotlib画布

画布-plt.figure()

plt.figure(num=None,figsize=None,dpi=None,facecolor=None,edgecolor=None, frameon=True)
• num: 图像编号或名称,数字为编号 ,字符串为名称
• figsize: 指定 figure 的宽和高,单位为英寸;
• dpi 参数指定绘图对象的分辨率,即每英寸多少个像素,缺省值为 80 1 英寸等于 2.5cm , A4纸是 21*30cm 的纸张
• facecolor: 背景颜色
• edgecolor: 边框颜色
• frameon: 是否显示边框

实例


   
   
  1. import matplotlib.pyplot as plt
  2. fig=plt.figure(num= "蓝色背景",figsize=( 4, 3),facecolor= "blue")
  3. plt.show()
  4. fig=plt.figure(num= "红色背景",figsize=( 4, 3),facecolor= "red")
  5. plt.show()

 同一画布制作多张图像

① 确定区域
plt.figure().add_subplot(*)
② 制作子图
plt.subplot(*)

 创建多个子图

plt.figure(**). add_subplot(nrows, ncols, index, **kwargs)
plt.figure(**). add_subplot(pos, **kwargs)
• 子图将采用 nrows * ncols 的网格上的 index 位置
• pos 是一个三位整数,其中第一个数字是行数,第二个数字是列数和第三个数字是子图的索引。
• 例如: plt.figure(**). add_subplot(235) 与 plt.figure(**). add_subplot(2,3,5) 等价

实例


   
   
  1. import matplotlib.pyplot as plt
  2. fig = plt.figure()
  3. axl = fig.add_subplot( 121)
  4. ax2 = fig.add_subplot( 122)
  5. plt.show()


   
   
  1. import matplotlib.pyplot as plt
  2. fig = plt.figure()
  3. axl = fig.add_subplot( 121)
  4. ax2 =fig.add_subplot( 122)
  5. ax2.axis(“off”) #不显示第二个子图
  6. plt.show()


   
   
  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. fig = plt.figure()
  4. axl = fig.add_subplot( 121)
  5. ax2 = fig.add_subplot( 122)
  6. plt.plot(np.random.randn( 50).cumsum(), 'k--')
  7. #默认最后一个子图
  8. plt.show()

图像默认绘制在最后一个子图上面


   
   
  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. fig = plt.figure()
  4. ax1 = fig.add_subplot( 121)
  5. ax2 = fig.add_subplot( 122)
  6. ax1.hist(np.random.randn( 100), bins= 20, color= 'k', alpha= 0.3)
  7. ax2.scatter(np.arange( 30), np.arange( 30) + 3 * np.random.randn( 30))
  8. plt.show()

plt.subplots

matplotlib 有一个更为方便的方法 plt.subplots ,它可以创建一个新的 Figure , 并返回一个含有已创建的 subplot 对象的 NumPy 数组。

    
    
  1. >>> fig, axes = plt.subplots( 2, 3)
  2. array([[<matplotlib.axes._subplots.AxesSubplot object at 0x7fb626374048>,
  3. <matplotlib.axes._subplots.AxesSubplot object at 0x7fb62625db00>,
  4. <matplotlib.axes._subplots.AxesSubplot object at 0x7fb6262f6c88>],
  5. [<matplotlib.axes._subplots.AxesSubplot object at 0x7fb6261a36a0>,
  6. <matplotlib.axes._subplots.AxesSubplot object at 0x7fb626181860>,
  7. <matplotlib.axes._subplots.AxesSubplot object at 0x7fb6260fd4e0>]], dtype
  8. = object)

相关参数

plt.subplots(nrows=1, ncols=1, *, sharex=False, sharey=False, subplot_kw=None, **fig_kw)

参数
说明
nrows
subplot 的行数
ncols
subplot 的列数
sharex
所有 subplot 应该使用相同的 X 轴刻度 ( 调节 xlim 将会影响所有
subplot)
sharey
所有 subplot 应该使用相同的 Y 轴刻度 ( 调节 ylim 将会影响所有
subplot)
subplot_ kw
用于创建各 subplot 的关键字字典
**fig_ kw
创建 figure 时的其他关键字,如 plt.subplots(2,2,figsize=(8,6))

调整subplot周围的间距

默认情况下,matplotlib 会在 subplot 外围留下一定的边距,并在 subplot 之间留下一定的间距。间距跟图像的高度和宽度有关,因此,如果你调整了图像大小(不管是编程还是手工),间距也会自动调整。利用 Figure 的 subplots_adjust方法可以轻而易举地修改间距。

plt.subplots_adjust(left=None,bottom=None,right=None,top=None,wspace=None, hspace=None
• left: 此参数是该图子图的左侧。
• right: 此参数是该图子图的右侧。
• bottom: 此参数是该图子图的底部。
• top: 此参数是该图子图的顶部。
• wspace: 此参数是为子图之间的空间 保留的宽
度量,表示为平均轴宽度的 一部分。
• hspace: 此参数是为子图之间的空间保 留的高
度量,表示为平均轴高度的一 部分。
• 注意这些值都是 0 到 1 之间的值,代表 百分比。

 实例


   
   
  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. fig, axes = plt.subplots( 2, 2, sharex= True, sharey= True)
  4. for i in range( 2):
  5. for j in range( 2):
  6. axes[i, j].hist(np.random.randn( 500))
  7. plt.subplots_adjust(wspace= 0.2, hspace= 0)
  8. plt.show()

plot函数

plt.plot(x, y, format_string, **kwargs)

  可以绘制点和线, 并且对其样式进行控制

 tip:当绘制多条曲线时各条曲线的x不能省略

format_string参数

颜色字符

标记字符

风格字符

 效果图

简单案例

单个图像

    
    
  1. plt.plot([ 3, 1, 2, 5, 4])
  2. plt.show()

 多个图像


    
    
  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. a=np.arange( 10)
  4. plt.plot(a, a* 1.5,a, a* 2.5, a* 3.5) #横坐标相同
  5. plt.show()

完整案例


   
   
  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. x=np.arange( 10)
  4. y1=x* 1.5;
  5. y2=x* 2.5;
  6. y3=x* 3.5;
  7. y4=x* 4.5
  8. plt.figure()
  9. plt.plot(x,y1,’go- ',x,y2,'rx ',y3,'* ',x,y4,'b-.’)
  10. plt.show()

更多参数设定

 

设置标题、轴标签、刻度及刻度标签

函数说明
set_title(*)
设定图像的标题
plt.set_xticks(ticks=None, labels=None)
设定 X 轴数据刻度以及标签
set_xticklabels(*,*)
设定 X 轴刻度的标签
set_xlabel(*,*)
设定 X 轴的名称
plt.set_yticks(ticks=None, labels=None)
设定 Y 轴数据刻度以及标签
set_yticklabels(*,*)
设定 Y 轴刻度的标签
set_ylabel(*,*)
设定 Y 轴的名称

实例


   
   
  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. fig = plt.figure()
  4. ax = fig.add_subplot( 1, 1, 1)
  5. ax.plot(np.random.randn( 1000).cumsum())
  6. ticks = ax.set_xticks([ 0, 250, 500, 750, 1000])
  7. labels = ax.set_xticklabels([ 'one', 'two', 'three', 'four', 'five'],rotation= 30,
  8. fontsize= 'small')
  9. ax.set_title( 'My first matplotlib plot')
  10. plt.show()

注释

matplotlib.pyplot.text()

plt.text(x, y, s, fontdict=None, **kwargs)

 功能用于将文本添加到数据坐标中x,y位置的轴上。

参数描述
x , y : float
放置文本的位置。默认情况下,这是在数据坐标中。
可以使用变换参数来更改坐标系。
s : str
文本。
fontdict : dict 默认无
用于覆盖默认文本属性的字典。如果 fontdict 为 None
则默认值由 rcParams 确定。
** 夸克
文字属性

 实例


   
   
  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. t = np.arange( 0.0, 2.0, 0.01)
  4. s = np.sin( 2*np.pi*t)
  5. plt.plot(t, s)
  6. plt.title( r'$\alpha_i > \beta_i$', fontsize= 20)
  7. plt.text( 1, - 0.6, r'$\sum_{i=0}^\infty x_i$', fontsize= 20)
  8. plt.text( 0.6, 0.6, r'$\mathcal{A}\mathrm{sin}(2 \omega t)$',fontsize= 20)
  9. plt.xlabel( 'time (s)')
  10. plt.ylabel( 'volts (mV)')
  11. plt.show()

 tip:图片内部的字体需要掌握一定的Latex语言才可以

在图中添加箭头

plt.arrow(x, y, dx, dy, **kwargs)
作用是向子图中添加箭头
• x, y : 箭头起点坐标
• dx, dy : 箭头x上的长度和y轴上的长度
• width:箭头尾部的宽度。类型为浮点数,默认值为0.001。
• head_width:完全箭头头部的宽度。类型为浮点数或None,默认值为3*width。
• head_length:完全箭头头部的长度。类型为浮点数或None,默认值为
• 1.5*head_width

实例


   
   
  1. import matplotlib.pyplot as plt
  2. fig,axes=plt.subplots( 3, 4)
  3. axes[ 0, 0].arrow( 0, 0, 1, 1)
  4. axes[ 0, 1].arrow( 0, 0, 1, 1,width= 0.2,head_width= 0.5)
  5. axes[ 0, 2].arrow( 0, 0, 1, 1,width= 0.2,head_width= 0.5,head_length= 0.2)
  6. axes[ 0, 3].arrow( 0, 0, 1, 1,width= 0.2,head_width= 0.5,head_length= 0.2,length_includes_head= True)
  7. axes[ 1, 0].arrow( 0, 0, 1, 1,width= 0.2)
  8. axes[ 1, 1].arrow( 0, 0, 1, 1,width= 0.2,shape= 'full')
  9. axes[ 1, 2].arrow( 0, 0, 1, 1,width= 0.2,shape= 'left')
  10. axes[ 1, 3].arrow( 0, 0, 1, 1,width= 0.2,shape= 'right')
  11. axes[ 2, 0].arrow( 0, 0, 1, 1,width= 0.2)
  12. axes[ 2, 1].arrow( 0, 0, 1, 1,width= 0.2,overhang= 0.2)
  13. axes[ 2, 2].arrow( 0, 0, 1, 1,width= 0.2)
  14. axes[ 2, 3].arrow( 0, 0, 1, 1,width= 0.2,head_starts_at_zero= True)
  15. plt.show()

边框设定

隐藏右边框和上边框
• 使用 plt.gca 获取当前坐标轴信息。
• 使用 .spines 分别设置边框右侧边框和上边框,并用 .set_color 设置边框颜色:默认白色;

    
    
  1. ax=plt.gca()
  2. # right 、 top 、 bottom 、 left
  3. ax.spines[‘right’].set_color( 'none')
  4. ax.spines[ 'top'].set_color( 'none')

 

添加定制图像

matplotlib.axes.Axes.add_patch(p)
matplotlib 有一些表示常见图形的 对象。这些对象被称为块( patch ), 其中有些(如 Rectangle 和 Circle )。要在图表中添加一个 图 形,你需要创建一个块对象 shp , 然后通过 ax.add_patch(shp) 将其 添加到 subplot 中


   
   
  1. import matplotlib.pyplot as plt
  2. fig = plt.figure()
  3. ax = fig.add_subplot( 1, 1, 1)
  4. rect = plt.Rectangle(( 0.2, 0.75), 0.4, 0.15, color= 'k', alpha= 0.3)
  5. circ = plt.Circle(( 0.7, 0.2), 0.15, color= 'b', alpha= 0.3)
  6. pgon = plt.Polygon([[ 0.15, 0.15], [ 0.35, 0.4], [ 0.2, 0.6]],color= 'g', alpha= 0.5)
  7. ax.add_patch(rect)
  8. ax.add_patch(circ)
  9. ax.add_patch(pgon)
  10. plt.show()

 pyplot文本显示函数


   
   
  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. x=np.arange( 0, 5, 0.02)
  4. plt.plot(x,np.cos( 2*np.pi*x), 'r--')
  5. plt.xlabel( '横轴:时间',fontproperties= 'SimHei',fontsize= 15,color= 'green')
  6. plt.ylabel( '纵轴:振幅',fontproperties= 'SimHei',fontsize= 15)
  7. plt.title( r'正弦波实例$y=cos(2\pix)$',fontproperties= 'SimHei',fontsize= 25)
  8. plt.show()
在有中文输出的处增加一个属性:fontproperties

 

 

 图例

ax.legend([line1, line2, line3], labels=['label1', 'label2’, 'label3'],lloc='lower right', fontsize=12, frameon=True, title=None)

 实例


   
   
  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. from numpy.random import randn
  4. fig = plt.figure()
  5. ax = fig.add_subplot( 1, 1, 1)
  6. ax.plot(randn( 1000).cumsum(), 'k', label= 'one')
  7. ax.plot(randn( 1000).cumsum(), 'k--', label= 'two')
  8. ax.plot(randn( 1000).cumsum(), 'k.', label= 'three')
  9. ax.legend(labels=[ "1", "2", "3"],loc= 'best')
  10. plt.show()

更多参数设定

设置图例边框及背景
• plt.legend(loc=‘best’,frameon=False) # 去掉图例边框
• plt.legend(loc=‘best’,edgecolor=‘blue’) # 设置图例边框颜色
• plt.legend(loc='best',facecolor='blue') # 设置图例背景颜色 , 若无边框 , 参数无效
设置图例标题
• plt.legend(loc='best',title='figure 1 legend') # 去掉图例边框
设置位置
• 0: ‘best‘
1: ‘upper right‘
2: ‘upper left‘
3: ‘lower left‘
4: ‘lower right'
5: ‘right‘
6: ‘center left‘
7: ‘center right
'8: ‘lower center'
9: ‘upper center‘
10: ‘center'

同一窗口生成多个图

plt.subplot(nrows, ncols, plot_number)

在全局绘图区域中创建一个分区体系,并定位到一个子绘图区域。 

plt.subplot(3,2,4)或plt.subplot(324)


   
   
  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. x = np.arange( 0, 100)
  4. plt.subplot( 221) #作图1
  5. plt.plot(x, x)
  6. plt.subplot( 222) #作图2
  7. plt.plot(x, -x)
  8. plt.subplot( 223) #作图3
  9. plt.plot(x, x ** 2)
  10. plt.grid(color= 'r', linestyle= '--', linewidth= 1,alpha= 0.3) #作图4
  11. plt.subplot( 224)
  12. plt.plot(x, np.log(x))
  13. plt.show()

 不均衡布局

plt.subplot2grid(shape, loc, rowspan, colspan)
参数shape 所划定的网格布局作为绘图区域以实现在参数loc 位置处绘制图形的目的。其中,shape,loc取值均为元组。

 


    
    
  1. ax1 = plt.subplot2grid(( 3, 3), ( 0, 0), colspan= 3)
  2. ax2 = plt.subplot2grid(( 3, 3), ( 1, 0), colspan= 2)
  3. ax3 = plt.subplot2grid(( 3, 3), ( 1, 2), rowspan= 2)
  4. ax4 = plt.subplot2grid(( 3, 3), ( 2, 0))
  5. ax5 = plt.subplot2grid(( 3, 3), ( 2, 1))
  6. plt.suptitle( "subplot2grid")

    
    
  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. import math
  4. x = np.arange( 1, 10)
  5. a1 = plt.subplot2grid(( 3, 3),( 0, 0),colspan = 2)
  6. a1.plot(x, np.exp(x))
  7. a1.set_title(‘指数’
  8. ,fontproperties= 'SimHei',fontsize= 15)
  9. a2 = plt.subplot2grid(( 3, 3),( 0, 2), rowspan = 3)
  10. a2.plot(x, x*x)
  11. a2.set_title(‘平方’
  12. ,fontproperties= 'SimHei',fontsize= 15)
  13. a3 = plt.subplot2grid(( 3, 3),( 1, 0),rowspan = 2, colspan = 2)
  14. a3.plot(x, np.log(x))
  15. a3.set_title(‘log’)
  16. plt.tight_layout(); plt.suptitle( "subplot2grid")
  17. plt.show()

 图的保存

plt.savefig() #函数plt.show()之前调用,否则空白
     
     
将输出图形存储为文件,默认 PNG 格式,可以通过 dpi 修改输出质量。
支持格式: eps, pdf, pgf, png, ps, raw, rgba, svg, svgz

     
     
  1. x = np.arange( 1, 11)
  2. a=plt.plot(x, 2*x,x, 3*x)
  3. plt.legend([ 'a', 'b'])
  4. plt.savefig( 'text.eps',dpi= 600)
  5. plt.show()

基础图标函数

 

 散点图

散点图也叫 X-Y 图,它将 所有的数据以点的形式展 现在直角坐标系 上,以显 示变量之间的相互影响程 度,点的位置由变量的数 值决定。
通过观察散点图上数据点 的分布情 况,我们可以推 断出变量间的相关性。

plt.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None,
vmin=None, vmax=None, alpha=None, linewidths=None,
verts=None,edgecolors=None, hold=None, data=None, **kwargs)
• x , y :输入数据, array_like , shape (n,)
• s :点的大小 , 标量或 array_like , shape (n,),可选大小以点数 ^ 2 。
• c :点的颜色
• marker :点的形状 cmap : cmap 仅在 c 是浮点数组时使用。如果没有,默认为
rcimage.cmap 。 norm :实例用于缩放亮度数据为 0,1 。 norm 只有在 c 是一个数组时才被使用 彩车。alpha :标量, 可选,默认值:无 alpha 混合值,介于 0 (透明)和 1 (不透明)之间, linewidths :标量或 array_like ,可选,默认值:无 如果无,则默认为 (lines.linewidth ,)。 verts :(x, y )的序列,可选 如果 marker 为 None ,这些顶点将用于构建标记。标记的中心位于 在(0,0 )为标准化单位。整体标记重新调整 由 s 完成。
• edgecolors :颜色或颜色顺序。

scatter(x, y, s=None, c=None, marker=None, alpha=None)


   
   
  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. np.random.seed( 222)
  4. x=np.random.rand( 20)
  5. y=np.random.rand( 20)
  6. s = np.array( range( 10, 110, 5))
  7. c = np.array( range( 0, 20))
  8. plt.scatter(x, y,s=s, c=c)
  9. plt.colorbar()
  10. plt.show()

plt.colorbar

颜色条是从标量值到颜色的映射的可视化。在 Matplotlib 中,被绘制到专用轴。matplotlib的 pyplot 模块中的 colorbar() 函数将色条添加到指示色标的图
plt.colorbar(mappable=None, cax=None, ax=None, **kwarg)
• cax: 指定颜色条绘制的轴
• ax: 此参数是可选参数,它包含轴或轴列表。
• ** kwarg( 关键字参数 ) :此参数是可选参数,有两种: colorbar
properties:extend:{‘neither’, ‘both’ ,‘ min’, ‘max’} 的尖头超出范围值。 label: 彩条的长轴上的标签。刻度:没有或没有刻度或定位器列表。返 回值:colorbar 是
“ matplotlib.colorbar.Colorbar” 类的实例

    
    
  1. import matplotlib.pyplot as plt
  2. fig, axes = plt.subplots(nrows= 2, ncols= 2)
  3. for ax in axes.flat:
  4. im = ax.imshow(np.random.random(( 10, 10)), vmin= 0, vmax= 1)
  5. plt.colorbar(im, ax=axes.ravel().tolist())
  6. plt.show()

柱状图和直方图

柱状图=条形图
1. 柱状图一般用于描述离散型分类数据的对比
2. 每根柱子宽度固定,柱子之间会有间距
3. 横轴变量可以任意排序
直方图
1. 直方图一般用于描述连续型数据的分布关系
2. 每根柱子宽度可以不一样,且一般没有间距
3. 横轴变量有一定顺序规则

 柱状图

 基础柱状图,使用垂直或水平的柱子显示类别之间的数值比较。其中一个轴表示
需要对比的分类维度,另一个轴代表相应的数值。
 适合应用到分类数据对比
 分类太多不适合使用
 纵向柱状图
 不适合表示趋势

 

 

 

 柱状图plt.bar

plt.bar(left, height, width=0.8, bottom=None, hold=None, data=None, **kwargs)

 柱状图实例


   
   
  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. data_X = [ 'l1', 'l2', 'l3', 'l4', 'l5']
  4. data_Y = [ 0.96332673, 0.41957767, 0.28530194, 0.66399872, 0.39162668]
  5. data_Y1 = [ 0.95827706, 0.570968, 0.1820442, 0.6373498, 0.3974183]
  6. x = np.arange( len(data_X)) # 设定步长
  7. width = 0.4 # 设置数据条宽度
  8. fig, ax = plt.subplots()
  9. p1 = ax.bar(x - width / 2, data_Y, width)
  10. p2 = ax.bar(x + width / 2, data_Y1, width)
  11. ax.set_xticks(x)
  12. ax.set_xticklabels(data_X)
  13. plt.show()

 堆叠柱状图实例


   
   
  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. data_X = [ 'l1', 'l2', 'l3', 'l4', 'l5']
  4. data_Y = [ 0.96332673, 0.41957767, 0.28530194, 0.66399872, 0.39162668]
  5. data_Y1 = [ 0.95827706, 0.570968, 0.1820442, 0.6373498, 0.3974183]
  6. data_Y2 = [ 0.52999985, 0.54202189, 0.6418166, 0.69023167, 0.90743048]
  7. x = np.arange( len(data_X)) # 设定步长
  8. p1 = plt.bar(x, data_Y )
  9. p2 = plt.bar(x, data_Y1, bottom=data_Y) #bottom 为数据条距坐标轴的距离
  10. p3 = plt.bar(x, data_Y2, bottom=[data_Y1[i]+data_Y[i] for i in range( min( len(data_Y1), len(data_Y)))])
  11. plt.xticks(x, data_X)
  12. plt.show()

双向柱状图


   
   
  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. data_X = [ 'l1', 'l2', 'l3', 'l4', 'l5']
  4. data_Y = [ 0.96332673, 0.41957767, 0.28530194, 0.66399872, 0.39162668]
  5. data_Y1 = [ 0.95827706, 0.570968, 0.1820442, 0.6373498, 0.3974183]
  6. data_Y2 = [ 0.52999985, 0.54202189, 0.6418166, 0.69023167, 0.90743048]
  7. x = np.arange( len(data_X)) # 设定步长
  8. p1 = plt.bar(x, data_Y)
  9. p2 = plt.bar(x, [-data_Y1[i] for i in range( len(data_Y1))]) #将数据取成负数
  10. plt.xticks(x, data_X)
  11. plt.show()

 柱状图和直方图:柱状图实例


   
   
  1. rects1 = ax.bar(index, means_men, bar_width,
  2. alpha=opacity, color= 'b',
  3. yerr=std_men, error_kw=error_config,
  4. label= 'Men')
  5. rects2 = ax.bar(index + bar_width, means_women, bar_width,
  6. alpha=opacity, color= 'r',
  7. yerr=std_women, error_kw=error_config,
  8. label= 'Women')

 水平柱状图

plt.barh(y, width, height=0.8, left=None, *, align=’center’, **kwargs)

 

水平柱状图实例


   
   
  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. data_X = [ 'l1', 'l2', 'l3', 'l4', 'l5']
  4. data_Y = [ 0.96332673, 0.41957767, 0.28530194, 0.66399872, 0.39162668]
  5. plt.barh(data_X, data_Y)
  6. plt.show()

 

直方图

        直方图牵涉统计学的概念,首先要对数据进行分组,然后统计每个分组内数据元的数量。 在平面直角坐标系中,横轴标出每个组的端点,纵轴表示频数,每个矩形的高代表对应的频数,频数乘以组距的计算过程得出每个分组的数量,同一个直方图的组距是一个固定不变的值,所以如果直接用纵轴表示数量,每个矩形的高代表对应的数据元数量,既能保持分布状态不变,又能直观的看出每个分组的数量。

 plt.hist

plt.hist(x, bins=None, range=None, density=None, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid’, orientation='vertical', rwidth=None,
log=False, color=None, label=None, stacked=False, normed=None)
•x :指定要绘制直方图的数据;输入值,这需要一个数组或者一个序列,不需要长度相同的数组。
•bins :指定直方图条形的个数;
•range :指定直方图数据的上下界,默认包含绘图数据的最大值和最小值;
•density :布尔 , 可选。如果 "True" ,返回元组的第一个元素将会将计数标准化以形成一个概率密度, 也就是说,直方图下的面积(或积分)总和为1 。这是通过将计数除以数字的数量来实现的观察乘以箱子的宽度而不是除以总数数量的观察。如果叠加也是“真实”的,那么柱状图被规范化为1。 ( 替代normed)
• weights :该参数可为每一个数据点设置权重;
• cumulative :是否需要计算累计频数或频率;
• bottom :可以为直方图的每个条形添加基准线,默认为 0 ;
• histtype :指定直方图的类型,默认为 bar ,除此还有’ barstacked’, ‘step’, ‘stepfilled’ ;
• align :设置条形边界值的对其方式,默认为 mid ,除此还有’ left’ 和’ right’ ;
• orientation :设置直方图的摆放方向,默认为垂直方向;
• rwidth :设置直方图条形宽度的百分比;
• log :是否需要对绘图数据进行 log 变换;
• color :设置直方图的填充色;

直方图实例


    
    
  1. import matplotlib.pyplot as plt
  2. # matplotlib.axes.Axes.hist() 方法的接口
  3. n, bins, patches = plt.hist(x=d, bins= 'auto', color= '#0504aa',
  4. alpha= 0.7, rwidth= 0.85)
  5. plt.grid(axis= 'y', alpha= 0.75)
  6. plt.xlabel( 'Value')
  7. plt.ylabel( 'Frequency')
  8. plt.title( 'My Very Own Histogram')
  9. plt.text( 23, 45, r'$\mu=15, b=3$')
  10. maxfreq = n. max()
  11. # 设置y轴的上限
  12. plt.ylim(ymax=np.ceil(maxfreq / 10) * 10 if maxfreq % 10 else maxfreq + 10)

 饼图

         饼图广泛得应用在各个领域,用于表示不同分类的占比情况,通过弧度大小来对比各种分类。饼图通过将一个圆饼按照分类的占比划分成多个区块,整个圆饼代表数据的总量,每个区块(圆弧)表示该分类占总体的比例大小,所有区块(圆 弧)的加和等于 100%。
        饼图不适用于多分类的数据,原则上一张饼图不可多于 9 个分类。
        相比于具备同样功能的其他图表(比如百分比柱状图、环图), 饼图需要占据更大的画布空间。
        很难进行多个饼图之间的数值比较。

plt.pie

plt.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6,
shadow=False, labeldistance=1.1, startangle=0, radius=1, counterclock=True,
wedgeprops=None, textprops=None, center=0, 0, frame=False, rotatelabels=False, *,
normalize=None, data=None)
• x :各个饼块的尺寸。类 1 维数组结构。
• explode :每个饼块相对于饼圆半径的偏移距离,取值为小数。类 1 维数组结构。 labels :每个饼块
的标签。字符串列表。
• colors :每个块的颜色。类数组结构。 autopct :饼块内标签。 None 或字符串或可调用对象。
pctdistance :饼块内标签与圆心的距离。浮点数。
• shadow :饼图下是否有阴影。布尔值。默认值为 False 。
• labeldistance :饼块外标签与圆心的距离。浮点值或 None 。默认值为 1.1 。如果设置为 None ,标签
不会显示, 但是图例可以使用标签。 startangle :饼块起始角度。浮点数。默认值为 0 ,即从 x 轴开
始。角度逆时针旋转。
• radius :饼图半径。浮点数。默认值为 1.counterclock :角度是否逆时针旋转。布尔值。默认值为
True 。
• wedgeprops :饼块属性。字典。默认值为 None 。

 

饼图实例


   
   
  1. import matplotlib.pyplot as plt
  2. plt.rcParams[ 'font.sans-serif']=[ 'SimHei'] #用来正常显示中文标签
  3. labels = 'A', 'B', 'C', 'D'
  4. explode = ( 0, 0, 0.1, 0) #将第三块分离出来
  5. sizes = [ 10, 10, 10, 70]
  6. colors = [ 'r', 'g', 'y', 'b']
  7. plt.pie(sizes,explode=explode,labels=labels,colors=colors,autopct= '%1.2f%%',
  8. pctdistance= 0.4,shadow= True,labeldistance= 0.8,startangle= 30,radius= 1.3,
  9. counterclock= False,textprops={ 'fontsize': 20, 'color': 'black'})
  10. plt.title( "饼图详解示例")
  11. plt.text( 1,- 1.2, 'By:Biyoulin')
  12. plt.legend(loc= "upper right",fontsize= 10,bbox_to_anchor=( 1.1, 1.05),borderaxespad= 0.3)
  13. plt.show()

 误差图

 matplotlib errorbar正误差棒

plt.errorbar(x, y, yerr=None, xerr=None, fmt=u'', ecolor=None, elinewidth=None,
capsize=None, barsabove=False, lolims=False, uplims=False, xlolims=False,
xuplims=False, errorevery=1, capthick=None, hold=None, data=None, **kwargs) 
• x,y : 标量或数组矩阵形式
• xerr/yerr : 标量或数组矩阵形式,若为数组或矩阵形式时,可以是 1 × N维(1 行 N 列) 矩阵或 2 × N 维 (2行 N 列)矩阵。
• ecolor : 误差条的颜色
• elinewidth : 标量,可选,误差条的线的宽度
• capsize : 标量,每点的误差条的上下横线的长度
• capthick : 标量,可选, 每点的误差条的上下横线的厚度
• lolims / uplims / xlolims / xuplims : bool (布尔)类型,参数被用来表明图像仅提供上限或者下限 .

误差图实例


   
   
  1. import matplotlib.pyplot as plt
  2. x = [ 1, 2, 3, 4, 5]
  3. y = [ 1, 2, 1, 2, 1]
  4. y_errormin = [ 0, 0, 0, 0, 0]
  5. y_errormax = [ 0.2, 0.4, 0.6, 0.4, 0.2]
  6. x_error = 0.5
  7. y_error = [y_errormin, y_errormax]
  8. plt.bar(x, y)
  9. plt.errorbar(x, y,yerr=y_error,capsize = 8,fmt= 'o', color= "r")
  10. plt.show()

 

中午乱码问题

原则上 matplotlib 是支持中文的,只是在配置信息里没有中文字体的相关信息。
准备工作:
• 1 、获取 matplotlib 包所在的配置文件的路径
         import matplotlib
         print(matplotlib.matplotlib_fname())# 输出 matplotlib 包所在的配置文件的
         D:\Anaconda3\lib\site-packages\matplotlib\mpl-data\matplotlibrc
• 2 、根据上面的路径打开文件夹(根据自己实际的输出路径去
         D:\Anaconda3\lib\site-packages\matplotlib\mpl-data\fonts\ttf
• 3 、加入中文字体
         把中文字体文件放到文件夹里

解决坐标轴负号显示问题、中文乱码问题(一次性使用)


   
   
  1. import matplotlib.pyplot as plt
  2. import seaborn as sns
  3. plt.rcParams[ 'font.sans-serif'] = [ 'SimHei']
  4. # Matplotlib中设置字体-黑体,解决Matplotlib中文乱码问题
  5. plt.rcParams[ 'axes.unicode_minus'] = False
  6. # 解决Matplotlib坐标轴负号'-'显示为方块的问题
  7. sns. set(font= 'SimHei')
  8. # Seaborn中设置字体-黑体,解决Seaborn中文乱码问题

永久更改方法 

1 、根据上面准备工作获取matplotlib包所在的配置文件的路径,打开matplotlibrc 文件( 以记事本方式或其他编辑器方式打开)
2. 找到 #font.sans-serif ,去掉前 面的# ,并在:后面写上在准备工作加入的中文字体的名称 SimHei
3. 找到 #axes.unicode_minus ,去掉前面的# ,并在:改为False

 

 

C:\Users\Alice\.matplotlib ,打开该路径下的文件夹,删除tex.cache 文件和 fontList.json 文件

 

 

Python全套学习笔记

            </div><div><div></div></div><div><div></div></div>
    </div>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值