Matplotlib教程代码复现(上)

  整个8月有限的学习时间都用来复习画图代码,主要就是以一篇博客文章为基础复现。现记录复现过程,算作笔记、方便后续查找。欢迎各位关注原作者,他的整理真的很棒,详见参考学习资料。

 

1、参考学习资料

(1)Python、R、可视化、统计、perl原创合集

(2)Matplotlib 1.4W+字教程

(3)GitHub-scientific-visualization-book

(4)GitHub-Official Matplotlib cheat sheets

(5)Seaborn 0.9 中文文档

2、图形代码复现

  作者总共从matplotlib官网复现了常见的18种图形:

star1、line plot【折线图】  
star2、scatter plot【散点图】  
star3、bar plot【条形图】  
star4、imshow plot【格子图】  
star5、contour plot【等高线图】  
star6、quiver plot【箭头】  
star7、pie plot【饼图】  
star8、text plot【添加文本】  
star9、fill_between plot【曲线填充图】  
star10、step plot【阶梯图】  
star11、box plot【箱图】  
star12、errorbar plot【误差棒】  
star13、hist plot【直方图】  
star14、violin plot【小提琴图】  
star15、barbs plot【风羽图】  
star16、even plot【栅格图】  
star17、hexbin plot【二元直方图】  
star18、xcorr plot【相关图】

2.1 line plot【折线图】

import numpy as np  
import matplotlib as mpl  
import matplotlib.pyplot as plt

my_dpi = 126  
fig = plt.figure(figsize=(580/my_dpi, 480/my_dpi)) # 画布大小 4.63*3.8mpl.rcParams['axes.linewidth'] = 0.5  
mpl.rcParams['xtick.major.size'] = 0.0  
mpl.rcParams['ytick.major.size'] = 0.0

d = 0.1
ax = fig.add_axes([d, d, 1-2*d, 1-2*d])

X = np.linspace(0, 10, 100) # 0,10范围内取100个位点, 步长一致;  
Y = 4 + 2*np.sin(2*X)
ax.plot(X, Y, color="C1", linewidth=0.75)

ax.set_xlim(0, 8), ax.set_xticks(np.arange(1,8))  
ax.set_ylim(0, 8), ax.set_yticks(np.arange(1,8))
ax.grid(linewidth=0.125)  
plt.show()

 

学习笔记

(1)官网示例

  https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.plot.html

(2)figure函数
  figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True)

num:图像编号或名称,数字为编号 ,字符串为名称
figsize:指定figure的宽和高,单位为英寸;dpi参数指定绘图对象的分辨率,即每英寸多少个像素

facecolor:背景颜色
edgecolor:边框颜色
frameon:是否显示边框

(3)rc配置
 https://blog.csdn.net/HHG20171226/article/details/103370347

pylot使用rc配置文件来自定义图形的各种默认属性,称之为rc配置或rc参数。

序号 属性 说明
1 plt.rcParams[’axes.unicode_minus’] = False 字符显示
2 plt.rcParams[’font.sans-serif’] = ‘SimHei’ 设置字体

线条样式:lines

3 plt.rcParams[’lines.linestyle’] = ‘-.’ 线条样式
4 plt.rcParams[’lines.linewidth’] = 3 线条宽度
5 plt.rcParams[’lines.color’] = ‘blue’ 线条颜色
6 plt.rcParams[’lines.marker’] = None 默认标记
7 plt.rcParams[’lines.markersize’] = 6 标记大小
8 plt.rcParams[’lines.markeredgewidth’] = 0.5 标记附近的线宽

横、纵轴:xtick、ytick

9 plt.rcParams[’xtick.labelsize’] 横轴字体大小
10 plt.rcParams[’ytick.labelsize’] 纵轴字体大小
11 plt.rcParams[’xtick.major.size’] x轴最大刻度
12 plt.rcParams[’ytick.major.size’] y轴最大刻度

figure中的子图:axes
13 plt.rcParams[’axes.titlesize’] 子图的标题大小
14 plt.rcParams[’axes.labelsize’] 子图的标签大小

图像、图片:figure、savefig
15 plt.rcParams[’figure.dpi’] 图像分辨率
16 plt.rcParams[’figure.figsize’] 图像显示大小
17 plt.rcParams[’savefig.dpi’] 图片像素

(4)add_axes
https://blog.csdn.net/qq_41011336/article/details/83017101

  主要用来做子图(图中图)。新增子区域,该区域可位于figure(画布)内任意位置,,且该区域可任意设置大小。
  left, bottom, width, height = 0.1, 0.1, 0.8, 0.8
  #figure的百分比,从figure 10%的位置开始绘制, 宽高是figure的80%

(5) plt.plot 参数
  https://blog.csdn.net/pcx171/article/details/115421476

line = plt.plot(

np.sin(np.arange(0, 10)), antialiased=True, #指定进行抗锯齿
scalex=True, #X轴受数据制约
scaley=True, #Y轴受数据制约

linewidth=1.0, #指定线宽1.0
linestyle=None, #指定线条样式为默认
color=‘#FF0000’, #指定线条颜色为RGB(255,0, 0)

marker=‘o’, #指定标记点样式o
markersize=7.0, #指定标记点大小7.0
markeredgewidth=0.0, #指定标记点边缘宽度0.0
markeredgecolor=‘#F0E68C’, #指定边缘颜色
markerfacecolor=‘#000000’, #指定标记点颜色
markerfacecoloralt=‘#FF0000’, #指定标记点备用颜色

fillstyle=‘full’, #指定填充模式为完全填充
drawstyle=‘default’, #指定绘图模式为默认线形图
solid_capstyle=‘butt’, #指定实线笔帽样式
label=‘第’ + ‘1’ + ‘条线’,
)

(6)set_xlim
  https://blog.csdn.net/weixin_45671036/article/details/112555427
  Matplotlib会自动得出沿x、y(和z轴,如果是3D图)轴显示的变量的最小值和最大值。 然而,可以通过使用set_xlim()和set_ylim()函数明确地设置限制。

(7)set_xticks、set_xticklabels
  https://blog.csdn.net/weixin_45671036/article/details/112555427

	set_xticks([0,2,4,6])    set_xticklabels([‘zero’,‘two’,‘four’,‘six’])  
	xticks就是轴刻度对应的数;xticklabels就是把数字替换成其他指定字符;

(8)grid()
  https://blog.csdn.net/weixin_41789707/article/details/81035997
  https://www.zhuxianfei.com/python/45231.html

生成网格线并对其进行设置:
  plt.grid(axis=“x”, which=“major”) ax.grid(axis=‘x’, which=‘minor’)
  plt.grid(linestyle=‘-.’) # 设置linestyle
  plt.grid(c=‘r’) # 设置color=‘r’
 

2.2 scatter plot【散点图】

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt

my_dpi=126
fig = plt.figure(figsize=(580/my_dpi,480/my_dpi))  # 画布大小 4.63*3.8
mpl.rcParams['axes.linewidth'] = 0.5
mpl.rcParams['xtick.major.size'] = 0.0
mpl.rcParams['ytick.major.size'] = 0.0

d = 0.01
ax = fig.add_axes([d,d,1-2*d,1-2*d]) # figure的百分比,从 figure 1%的位置开始绘制, 宽高是figure的98%

np.random.seed(3)
X = 4+np.random.normal(0, 1.25, 24)
Y = 4+np.random.normal(0, 1.25, len(X))

ax.scatter(X, Y, s=55, zorder=10,
           edgecolor="white", facecolor="C1", linewidth=0.25)

ax.set_xlim(0, 8), ax.set_xticks(np.arange(1,8))
ax.set_ylim(0, 8), ax.set_yticks(np.arange(1,8))
ax.grid(linewidth=0.125)
plt.show()

 
学习笔记

(1)官网示例

  https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.scatter.html

(2)np.random.seed(3)
  保证下面每次拿出的随机数相同
  https://blog.csdn.net/weixin_41571493/article/details/80549833

(3)np.random.normal

https://github.com/wzy6642/numpy-translate  
从正态(高斯)分布中抽取随机样本
	X = 4+np.random.normal(0, 1.25, 24)     # 从均值=0,标准差为1.25的正态分布中取24个位点。

(4)pyplot.scatter参数
pyplot.scatter(x,y,s=None,c=None,marker=None,camp=None,norm=None,vmin=None,vmax=None,alpha=None,linewidths=None,verts=None,edgecolors=None,hold=None,data=None,**kwargs)

x,y:表示 x 轴和 y 轴对应的数据。
s:指定点的大小。若传入的是一维数组,则表示每个点的大小。
c:指定散点的颜色,若传入的是一维数组,则表示每个点的颜色。
marker:表示绘制的散点类型。
alpha:表示点的透明度,接受0~1之间的小数。
order:线条、文本中轴的默认绘制顺序(很少用)

 

2.3 bar plot【条形图】

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt

my_dpi=126
fig = plt.figure(figsize=(580/my_dpi,480/my_dpi))
mpl.rcParams['axes.linewidth'] = 0.5
mpl.rcParams['xtick.major.size'] = 0.0
mpl.rcParams['ytick.major.size'] = 0.0
d = 0.01
ax = fig.add_axes([d,d,1-2*d,1-2*d])

np.random.seed(3)
X = 0.5 + np.arange(8)  # [0.5 1.5 2.5 3.5 4.5 5.5 6.5 7.5]
Y = np.random.uniform(2, 7, len(X)) # [4.75398951 5.54073911 3.45452369 4.55413803 6.46473477 6.48146544 2.62792655 3.03621439]

ax.bar(X, Y, bottom=0, width=1,
       edgecolor="white", color="C1", linewidth=0.25)

ax.set_xlim(0, 8), ax.set_xticks(np.arange(1,8))
ax.set_ylim(0, 8), ax.set_yticks(np.arange(1,8))
ax.set_axisbelow(True)
ax.grid(linewidth=0.125)
plt.show()

学习笔记

(1)官网示例

  https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.bar.html

(2)np.random.uniform
从一个均匀分布[low,high)中随机采样,注意定义域是左闭右开,即包含low,不包含high.

(3)plt.bar

plt.bar(np.arange(len(labels)),#每个柱子的名称
year_2019, #每个柱子的高度
width=0.4, #柱子宽度,默认宽度: 0.8
bottom=0, #柱子起始位置对应纵坐标,默认从0开始
align=‘center’, #柱子名称位置,默认为’center’,可选’edge’
color/facecolor=‘pink’, #柱子填充色,
edgecolor=‘b’, #柱子外框线xian色
linewidth=1, #柱子外框线宽度
tick_label=labels, #自定义每个柱子的名称
yerr=[0.1,0.2,0.3], #添加误差棒
ecolor=‘red’, #误差棒颜色,默认为黑色
capsize=5, #误差棒上下的横线长度
log=False, #y轴坐标取对数
)

(4)set_axisbelow
  设置轴刻度和网格线在图片内容的上层(False)还是下层(True)
  Python Matplotlib.axes.Axes.set_axisbelow()用法及代码示例 - 纯净天空
 

2.4 imshow plot【格子图】

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt

my_dpi=126
fig = plt.figure(figsize=(580/my_dpi,480/my_dpi))
mpl.rcParams['axes.linewidth'] = 0.5
mpl.rcParams['xtick.major.size'] = 0.0
mpl.rcParams['ytick.major.size'] = 0.0
d = 0.01
ax = fig.add_axes([d,d,1-2*d,1-2*d])

np.random.seed(3)
I = np.zeros((8,8,4)) # 8个 8行4列矩阵,值均为0;
I[:,:] = mpl.colors.to_rgba("C1") # 矩阵4例的值对应to_rgba函数返回的4个RGBA颜色数值()# (1.0, 0.4980392156862745, 0.054901960784313725, 1.0)  ,变为8个 8行值一样的矩阵;
I[...,3] = np.random.uniform(0.25,1.0,(8,8)) # 用8*8的随机值(0.25<=x<1)填充矩阵的第4列, 前3列保持不变

ax.imshow(I, extent=[0,8,0,8], interpolation="nearest")

ax.set_xlim(0, 8), ax.set_xticks(np.arange(1,8))
ax.set_ylim(0, 8), ax.set_yticks(np.arange(1,8))
ax.grid(linewidth=0.25, color="white")
plt.show()

 

学习笔记

(1)官网示例
  https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.imshow.html

(2)np.zeros
  zeros(shape, dtype=float, order=‘C’) ,np.zeros()函数返回一个元素全为0且给定形状和类型的数组。
  np.zeros((2,5))= np.zeros((1,2,5)), 一个2行5列的矩阵,均为浮点数0
  np.zeros((2,5), dtype=np.int), 一个2行5列的矩阵,均为整数0

(3)mpl.colors.to_rgba(“C1”)
  https://blog.csdn.net/weixin_43636051/article/details/108604602
  http://www.manongjc.com/detail/30-cumxwkercbboqss.html
  https://www.osgeo.cn/matplotlib/api/_as_gen/matplotlib.colors.to_rgba.html

  matplotlib.colors.to_rgba()函数将颜色名称转换为RGBA编码颜色的数组,它从0-1返回四个浮点数的RGBA元组。

(4)ax.imshow

    https://vimsky.com/examples/usage/matplotlib-axes-axes-imshow-in-python.html         

    Axes.imshow(self, X, cmap=None, norm=None, aspect=None, interpolation=None, alpha=None, vmin=None, vmax=None, origin=None, extent=None, shape=, filternorm=1, filterrad=4.0, imlim=, resample=None, url=None, *, data=None, **kwargs)

X:此参数是图像的数据。
cmap:此参数是颜色图实例或注册的颜色图名称。
norm:此参数是Normalize实例,将数据值缩放到规范的颜色图范围[0,1]以映射到颜色
vmin, vmax:这些参数本质上是可选的,它们是颜色栏范围。
alpha:此参数是颜色的强度。
aspect:此参数用于控制轴的纵横比。
interpolation:此参数是用于显示图像的插值方法。
origin:此参数用于将数组的[0,0]索引放置在轴的左上角或左下角。
resample:此参数是用于类似的方法。
extent:此参数是数据坐标中的边界框。
filternorm:此参数用于防颗粒图像调整大小过滤器。
filterrad:此参数是具有半径参数的滤镜的滤镜半径。
url:此参数设置创建的AxesImage的url。

 

2.5 contour plot【等高线图】

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt

my_dpi=126
fig = plt.figure(figsize=(580/my_dpi,480/my_dpi))
mpl.rcParams['axes.linewidth'] = 0.5
mpl.rcParams['xtick.major.size'] = 0.0
mpl.rcParams['ytick.major.size'] = 0.0
d = 0.01
ax = fig.add_axes([d,d,1-2*d,1-2*d])

np.random.seed(1)
X, Y = np.meshgrid(np.linspace(-3, 3, 256), np.linspace(-3, 3, 256))
Z = (1 - X/2. + X**5 + Y**3)*np.exp(-X**2-Y**2)
Z = Z - Z.min()
colors = np.zeros((5,4))
colors[:] = mpl.colors.to_rgba("C1")
colors[:,3] = np.linspace(0.15, 0.85, len(colors))
plt.contourf(Z, len(colors), extent=[0,8,0,8], colors=colors)
plt.contour(Z, len(colors), extent=[0,8,0,8], colors="white", linewidths=0.125,
            nchunk=10)

ax.set_xlim(0, 8), ax.set_xticks(np.arange(1,8))
ax.set_ylim(0, 8), ax.set_yticks(np.arange(1,8))
plt.show()

 

学习笔记

(1)官网示例

        https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.contour.html

(2)np.linspace
  numpy.linspace()函数主要用来创建等差数列。
  np.linspace(-3, 3, 256),-3开始,3结束,步长一致的256个位点

(3)np.meshgrid
  生成网格点坐标矩阵。通俗理解,在二维坐标下,形成的一个一个的网格点 。
  https://zhuanlan.zhihu.com/p/41968396
  https://blog.csdn.net/qq_46456049/article/details/112755442

(4)plt.contourf、plt.contour区别
  https://www.jb51.net/article/253619.htm
  https://blog.csdn.net/lens___/article/details/83960810
  contour和contourf都是画三维等高线图的,不同点在于contour() 是绘制轮廓线,contourf()会填充轮廓。
 

2.6 quiver plot【箭头】

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt

my_dpi=126
fig = plt.figure(figsize=(580/my_dpi,480/my_dpi))
mpl.rcParams['axes.linewidth'] = 0.5
mpl.rcParams['xtick.major.size'] = 0.0
mpl.rcParams['ytick.major.size'] = 0.0
d = 0.01
ax = fig.add_axes([d,d,1-2*d,1-2*d])

np.random.seed(1)
T = np.linspace(0, 2*np.pi, 8)
X, Y = 4 + 1*np.cos(T), 4 + 1*np.sin(T)
U, V = 1.5*np.cos(T), 1.5*np.sin(T)

plt.quiver(X, Y, U, V, color="C1",
           angles='xy', scale_units='xy', scale=0.5, width=.05)

ax.set_xlim(0, 8), ax.set_xticks(np.arange(1,8))
ax.set_ylim(0, 8), ax.set_yticks(np.arange(1,8))
ax.set_axisbelow(True)
ax.grid(linewidth=0.125, color="0.75")
plt.show()or="0.75")
plt.show()

 

学习笔记

(1)官网示例

    quiver在可视化梯度变化时非常有用
    https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.quiver.html

(2)plt.quiver
  https://blog.csdn.net/qq_41345173/article/details/111352817
  https://blog.csdn.net/liuchengzimozigreat/article/details/84566650

quiver([X, Y], U, V, [C], **kw):

X, Y 定义了箭头的位置,

U, V 定义了箭头的方向,

C 作为可选参数用来设置颜色。

angles: 此参数指定了确定箭头角度的方法  
scale: 此参数是每个箭头长度单位的数据单位数,通常该值越小,意味着箭头越长,  
scale_units: 此参数是可选参数,其中包含以下值:{'width', 'height', 'dots', 'inches', 'x', 'y', 'xy'}, 一般当 scale=None 时该选项指示长度单位。

 

2.7 pie plot【饼图】

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt

my_dpi=126
fig = plt.figure(figsize=(580/my_dpi,480/my_dpi))
mpl.rcParams['axes.linewidth'] = 0.5
mpl.rcParams['xtick.major.size'] = 0.0
mpl.rcParams['ytick.major.size'] = 0.0
d = 0.01
ax = fig.add_axes([d,d,1-2*d,1-2*d])

X = 1,2,3,4
colors = np.zeros((len(X),4)) # # 4*4矩阵, 值均为0
colors[:] = mpl.colors.to_rgba("C1")
colors[:,3] = np.linspace(0.25, 0.75, len(X))

ax.set_xlim(0, 8), ax.set_xticks(np.arange(1,8))
ax.set_ylim(0, 8), ax.set_yticks(np.arange(1,8))
ax.set_axisbelow(True)
ax.grid(linewidth=0.25, color="0.75")

# ax.pie(X, colors=["black",]*len(X), radius=3, center=(4,4), wedgeprops = {"linewidth": 0.25, "edgecolor": "white"}, frame=True)
ax.pie(X, colors=colors, radius=3, center=(4,4),
        wedgeprops = {"linewidth": 0.25, "edgecolor": "white"}, frame=True)

plt.show())frame=True)

plt.show()

 

学习笔记

(1)官网示例

    https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.pie.html

(2)plt.pie
  matplotlib.pyplot.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)

(3)默认参数
  x=[1,2,3], #指定绘图数据
  labels=[‘A’,‘B’,‘C’], #为饼图添加标签说明

(4)修改配色
  colors=[“#d5695d”, “#5d8ca8”, “#65a479”], #修改饼图颜色,传入颜色list
  colors=plt.cm.get_cmap(‘Set3’)(range(5)), #使用matplotlib自带颜色
  colors=palettable.cartocolors.qualitative.Bold_9.mpl_colors, #使用palettable配色库

(5)饼图某部分突出or爆炸显示
  explode=(0, 0.2, 0), #某部分突出显示,值越大,距离中心越远,该法可解决饼图字体重叠的问题

(6)格式化显示每部分数据
   autopct=‘%.2f%%’, #格式化输出百分比

(7)圈中文字与中心距离
  pctdistance=0.8, #百分比标签与圆心的距离

(8)周围标签名与中心距离
  labeldistance=1.5, #labels与圈边界的距离,默认为1.1

(9)饼图开始角度
   startangle=45, #饼图的开始角度,默认为0度

(10)饼图半径

  radius=1.3, #饼图半径,默认为1

(11)顺时针or逆时针显示
  counterclock=False, #关闭逆时针显示

(12)饼图框属性设置
  wedgeprops={‘edgecolor’:‘r’, #内外框颜色,
      ‘linestyle’:‘–’, #线型
      ‘alpha’:0.5, #透明度
  #更多参考matplotlib.patches.Wedge }

(13)饼图中文本属性
  textprops={‘color’:‘r’, #文本颜色,
      ‘fontsize’:16, #文本大小
      ‘fontfamily’:‘Microsoft JhengHei’, #设置微软雅黑字体
      #更多参考matplotlib.pyplot.text }

(14)饼图高度个性化设置
  饼图中每一部分都可以拆开单独个性化设置。
  plt.pie返回以下三个对象,相应个性化设置都可参考Matplolib详细文档
  matplotlib.patches.Wedge、matplotlib.text.Text、matplotlib.text.Text

(15)添加图例
  plt.legend(patches, list(ascii_letters[26:])[0:11], #添加图例
  {title=“Pie Learning”, loc=“center left”, bbox_to_anchor=(1, 0, 0.5, 1), ncol=2, #控制图例中按照两列显示,默认为一列显示)}

&nbsp

2.8 text plot【添加文本】

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt

my_dpi=126
fig = plt.figure(figsize=(580/my_dpi,480/my_dpi))
mpl.rcParams['axes.linewidth'] = 0.5
mpl.rcParams['xtick.major.size'] = 0.0
mpl.rcParams['ytick.major.size'] = 0.0
d = 0.01
ax = fig.add_axes([d,d,1-2*d,1-2*d])

ax.set_xlim(0, 8), ax.set_xticks(np.arange(1,8))
ax.set_ylim(0, 8), ax.set_yticks(np.arange(1,8))
ax.set_axisbelow(True)
ax.grid(linewidth=0.25, color="0.75")
ax.text(4, 4, "TEXT", color="C1", size=38, weight="bold",
        ha="center", va="center", rotation=25)

plt.show()

 

学习笔记

(1)官网示例
  https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.text.html

(2)添加文本(matplotlib.pyplot.text)
  matplotlib.pyplot.text(x, y, s, fontdict=None, **kwargs)

plt.text(

x=2.2,    #文本x轴坐标  
y=8,     #文本y轴坐标  
s='basic unility of text',     #文本内容  
rotation=1,    #文字旋转  
ha='left',    #x=2.2是文字的左端位置,可选'center', 'right', 'left'  
va='baseline',    #y=8是文字的低端位置,可选'center', 'top', 'bottom',                                 'baseline', 'center_baseline'  
fontdict=dict(fontsize=12, color='r', family='monospace',    #字体,可选'serif',                                  'sans-serif', 'cursive', 'fantasy', 'monospace')

weight=‘bold’, #磅值,可选’light’, ‘normal’, ‘medium’, ‘semibold’, ‘bold’, ‘heavy’, ‘black’)#字体属性设置
)

(3)给文本加上背景框

bbox={‘facecolor’: ‘#74C476’, #填充色
‘edgecolor’:‘b’, #外框色
‘alpha’: 0.5, #框透明度
‘pad’: 8, #本文与框周围距离
}

text.set_color(‘b’) #修改文字颜色

(4)背景文本框形状

bbox={‘facecolor’: ‘#74C476’, #填充色
‘edgecolor’:‘b’,#外框色
‘alpha’: 0.5, #框透明度
‘pad’: 0.8,#本文与框周围距离
‘boxstyle’:‘sawtooth’

}

(5)添加注释(matplotlib.pyplot.annotate)
  matplotlib.pyplot.annotate (text, xy, *args, **kwargs)

结合matplotlib.pyplot.text添加注释内容
基本参数设置、修改箭头形状、箭头弯曲、跨子图注释

 

2.9 fill_between plot【曲线填充图】

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt

my_dpi=126
fig = plt.figure(figsize=(580/my_dpi,480/my_dpi))
mpl.rcParams['axes.linewidth'] = 0.5
mpl.rcParams['xtick.major.size'] = 0.0
mpl.rcParams['ytick.major.size'] = 0.0
d = 0.01
ax = fig.add_axes([d,d,1-2*d,1-2*d])

np.random.seed(1)
X = np.linspace(0, 8, 16) # 0-8步长一致的16个位点
# Y1,Y2均为列表,各自含有16个值, 也即完成了每个X对应两个Y值的dict构建;
Y1 = 3 + 4*X/8 + np.random.uniform(0.0, 0.5, len(X)) # 从0-0.5范围内中随机取值,与X的矩阵一致即可;
Y2 = 1 + 2*X/8 + np.random.uniform(0.0, 0.5, len(X))

plt.fill_between(X, Y1, Y2, color="C1", alpha=.5, linewidth=0)
plt.plot(X, (Y1+Y2)/2, color="C1", linewidth=0.5)

ax.set_xlim(0, 8), ax.set_xticks(np.arange(1,8))
ax.set_ylim(0, 8), ax.set_yticks(np.arange(1,8))
ax.set_axisbelow(True)
ax.grid(linewidth=0.125, color="0.75")
plt.show()

 

学习笔记

(1)官网示例
  https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.fill_between.html
  plt.fill_between(x, y1, y2),其中x是横坐标,y1和y2是两条曲线,这个函数的作用是用颜色填充y1和y2这两条曲线之间的区域。

(2)plt.fill_between
  https://blog.csdn.net/weixin_38314865/article/details/104504485

    fill_between(x, y1, y2=0, where=None, interpolate=False, step=None, *, data=None, **kwargs)

    利用plt模块的fill_between方法可以绘制出填充区域,where参数接受一个bool对象, 表示在哪些地方填充(bool为True的地方)。

    alpha是填充空间的透明度, x是水平轴上的点, y1是数据集竖直轴上的点, y2是要与y1在每一个水平轴点处计算差值然后填充这两部分的区域, y2的默认值是0。

    interpolate只有在使用了where参数同时两条曲线交叉时才有效, 使用这个参数会把曲线交叉处也填充使得填充的更完整。

 

2.10 step plot【阶梯图】

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt

my_dpi=126
fig = plt.figure(figsize=(580/my_dpi,480/my_dpi))
mpl.rcParams['axes.linewidth'] = 0.5
mpl.rcParams['xtick.major.size'] = 0.0
mpl.rcParams['ytick.major.size'] = 0.0
d = 0.01
ax = fig.add_axes([d,d,1-2*d,1-2*d])

X = np.linspace(0, 10, 16)
Y = 4+2*np.sin(2*X)
ax.step(X, Y, color="C1", linewidth=0.75)

ax.set_xlim(0, 8), ax.set_xticks(np.arange(1,8))
ax.set_ylim(0, 8), ax.set_yticks(np.arange(1,8))
ax.grid(linewidth=0.125)
plt.show()

 

学习笔记

(1)官网示例

    https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.step.html

 

2.11 box plot【箱图】

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt

my_dpi=126
fig = plt.figure(figsize=(580/my_dpi,480/my_dpi))
mpl.rcParams['axes.linewidth'] = 0.5
mpl.rcParams['xtick.major.size'] = 0.0
mpl.rcParams['ytick.major.size'] = 0.0
d = 0.01
ax = fig.add_axes([d,d,1-2*d,1-2*d])

np.random.seed(10)
D = np.random.normal((3,5,4), (1.25, 1.00, 1.25), (100,3))
VP = ax.boxplot(D, positions=[2,4,6], widths=1.5, patch_artist=True,
                showmeans=False, showfliers=False,
                medianprops = {"color": "white", "linewidth": 0.75},
                boxprops = {"facecolor": "C1", "edgecolor": "white", "linewidth": 0.25},
                whiskerprops = {"color": "C1", "linewidth": 0.75},
                capprops = {"color": "C1", "linewidth": 0.75})
ax.set_axisbelow(True)
ax.grid(linewidth=0.125)
plt.show()

 

学习笔记

(1)官网示例

https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.boxplot.html

详细实战教程:
Python可视化21|Seaborn.catplot(上)-小提琴图等四类图

Python可视化17seborn-箱图boxplot

(2)np.random.normal

GitHub - 对numpy包中常用函数的官方文档进行翻译

  从正态(高斯)分布中抽取随机样本;概率分布的均值,对应着整个分布的中心center;概率分布的标准差,对应于分布的宽度,scale越大越矮胖,scale越小,越瘦高。

np.random.randn(size)所谓标准正太分布(μ=0, σ=1),相当于np.random.normal(loc=0, scale=1, size)

X = 4+np.random.normal(0, 1.25, 24)     # 从均值=0,标准差为1.25的正态分布中取24个位点 
np.random.normal(0, 1, (2, 4))     # 均值=0, 标准差=1的正态分布中,取2行4列的矩阵;     

np.random.normal((3,5,4), (1.25, 1.00, 1.25), (100,3))     # 一个100行3列的矩阵,第一列的均值=3,标准差=1.25,第二列的均值=5,标准差=1;

(3)ax.boxplot

orient=‘v’#箱子垂直显示,默认为’h’水平显示
(1)箱图异常值属性设置
showfliers=False, #异常值关闭显示

          异常值marker大小设置  
     fliersize=15,    #设置离散值marker大小,默认为5  
   异常值marker形状、填充色、轮廓设置  
     flierprops = {'marker':'o',    #异常值形状  
                'markerfacecolor':'red',    #形状填充色  
              'color':'black',    #形状外廓颜色}  

(2)箱图上下横线属性设置
showcaps=False, #上下横线关闭
上下横线颜色、线型、线宽等设置
capprops={‘linestyle’:‘–’,‘color’:‘red’}, #设置上下横线属性
(3)箱图上下须线属性设置
whiskerprops={‘linestyle’:‘–’,‘color’:‘red’}, #设置上下须属性
(4)箱图箱子设置
箱子设置缺口
notch=True,#箱子设置缺口
箱子不填充颜色
color=‘white’,#箱子不填充颜色
箱子外框、内部填充色
boxprops = {‘color’:‘red’,#箱子外框
‘facecolor’:‘pink’#箱子填充色},#设置箱子属性
箱图中位数线属性设置
medianprops = {‘linestyle’:‘–’,‘color’:‘red’},#设置中位数线线型及颜色
(5)箱图均值属性设置

         均值使用点显示、设置点形状、填充色  
     showmeans=True,    #箱图显示均值,  
     meanline=True,    #显示均值线  
      meanprops = {'marker':'D','markerfacecolor':'red'},    #设置均值属性
 均值使用线显示 、线型、颜色设置  
     showmeans=True,    #箱图显示均值,  
     meanline=True,    #显示均值线  
     meanprops = {'linestyle':'--','color':'red'},    #设置均值线属性  

(6)箱图中所有线属性设置
linewidth=8#设置箱子等线的宽度

(4)sns.boxplot

(1) 箱子颜色设置
palette=palettable.tableau.TrafficLight_9.mpl_colors, #设置每个箱子颜色
saturation=0.3, #设置颜色饱和度

(2) 箱子间距设置
palette=palettable.tableau.TrafficLight_9.mpl_colors,
  saturation=0.3, #设置颜色饱和度
width=1.0, #设置箱子之间距离,为1时,每个箱子之间距离为0

 

2.12 errorbar plot【误差棒】

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt

my_dpi=126
fig = plt.figure(figsize=(580/my_dpi,480/my_dpi))
mpl.rcParams['axes.linewidth'] = 0.5
mpl.rcParams['xtick.major.size'] = 0.0
mpl.rcParams['ytick.major.size'] = 0.0
d = 0.01
ax = fig.add_axes([d,d,1-2*d,1-2*d])

np.random.seed(1)
X = [2,4,6]
Y = [4,5,4]
E = np.random.uniform(0.5, 1.5, 3)

ax.errorbar(X, Y, E, color="C1", linewidth=0.75, capsize=1)

ax.set_xlim(0, 8), ax.set_xticks(np.arange(1,8))
ax.set_ylim(0, 8), ax.set_yticks(np.arange(1,8))
ax.set_axisbelow(True)
ax.grid(linewidth=0.125)
plt.show()

 

学习笔记

(1)官网示例
  https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.errorbar.html

(2)x轴刻度标签倾斜
  ax.set_xticklabels(col,rotation=45) #设置x轴刻度标签,并使其倾斜45度,不至于重叠
(3)ax.errorbar
Axes.errorbar(self, x, y, yerr=None, xerr=None, fmt=”, ecolor=None, elinewidth=None, capsize=None, barsabove=False, lolims=False, uplims=False, xlolims=False, xuplims=False, errorevery=1, capthick=None, *, data=None, **kwargs)

参数:
x, y:这些参数是数据点的水平和垂直坐标。
xerr, yerr:这些参数包含一个数组,并且错误数组应为正值

fmt:此参数是可选参数,它包含字符串值。  
ecolor:此参数是可选参数。它是错误栏行的颜色,默认值为NONE。  
elinewidth:此参数也是可选参数。它是错误栏行的线宽,默认值为NONE。  
capsize:此参数也是可选参数。它是误差栏上限的长度(以磅为单位),默认值为NONE。  
barsabove:此参数也是可选参数。它包含用于在图形符号上方绘制误差条的布尔值True,其默认值为False。  
lolims, uplims, xlolims, xuplims:这些参数也是可选参数。它们包含布尔值,该布尔值用于指示值仅给出上限/下限。  
errorevery:此参数也是可选参数。它们包含整数值,该整数值用于在数据子集上绘制误差线。

 

2.13 hist plot【直方图】

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt

my_dpi=126
fig = plt.figure(figsize=(580/my_dpi,480/my_dpi))
mpl.rcParams['axes.linewidth'] = 0.5
mpl.rcParams['xtick.major.size'] = 0.0
mpl.rcParams['ytick.major.size'] = 0.0
d = 0.01
ax = fig.add_axes([d,d,1-2*d,1-2*d])

np.random.seed(1)
X = 4 + np.random.normal(0,1.5,200)

ax.hist(X, bins=8, facecolor="C1", linewidth=0.25, edgecolor="white",)

ax.set_xlim(0, 8), ax.set_xticks(np.arange(1,8))
ax.set_ylim(0, 80), ax.set_yticks(np.arange(1,80,10))
ax.set_axisbelow(True)
ax.grid(linewidth=0.125)
plt.show()

 

学习笔记

(1)官网示例
  https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.violinplot.html
  直方图(histogram)展示离散型数据分布情况,直观理解为将数据按照一定规律分区间,统计每个区间中落入的数据频数,绘制区间与频数的柱状图即为直方图。
Python可视化21|Seaborn.catplot(上)-小提琴图等四类图

(2)ax.hist

n, bins, patches=plt.hist(x=data,
  ##箱子数(bins)设置,以下三种不能同时并存
  #bins=20, #default: 10
  #bins=[4,6,8], #分两个箱子,边界分别为[4,6),[6,8]
  #bins=‘auto’, # 可选’auto’, ‘fd’, ‘doane’, ‘scott’, ‘stone’, ‘rice’, ‘sturges’, or ‘sqrt’
  #选择最合适的bin宽,绘制一个最能反映数据频率分布的直方图

    range=(5,7),        #最左边和最右边箱子边界,不指定时,为(x.min(), x.max())
    density=True,     #默认为False,y轴显示频数;为True,则y轴显示频率,频率统计结果=该区间频数/(x中总样本数*该区间宽度)
    weights=np.random.rand(len(x)),    #对x中每一个样本设置权重,这里随机设置了权重
    cumulative=False,    #默认False,是否累加频数或者频率,及后面一个柱子是前面所有柱子的累加
    bottom=0,    #设置箱子y轴方向基线,默认为0,箱子高度=bottom to bottom + hist(x, bins)
    histtype='bar',    #直方图的类型默认为bar{'bar', 'barstacked', 'step', 'stepfilled'}
    lign='mid',        #箱子边界值的对齐方式,默认为mid{'left', 'mid', 'right'}
    orientation='vertical',    #箱子水平还是垂直显示,默认垂直显示('vertical'),可选'horizontal'
    rwidth=1.0,    #每个箱子宽度,默认为1,此时显示50%  
    log=False,       #y轴数据是否取对数,默认不取对数为False  
    color=palettable.colorbrewer.qualitative.Dark2_7.mpl_colors[3],  
    label='sepal length(cm)',#图例  
    #normed=0,    #功能和density一样,二者不能同时使用  
    facecolor='black',    #箱子颜色  
    edgecolor="black",    #箱子边框颜色  
    stacked=False,    #多组数据是否堆叠  
   alpha=0.5    #箱子透明度
   }
plt.xticks(bins)    #x轴刻度设置为箱子边界
for patch in patches:    #每个箱子随机设置颜色  
    patch.set_facecolor(random.choice(palettable.colorbrewer.qualitative.Dark2_7.mpl_colors))

#直方图三个返回值  
 print(n)#频数  
 print(bins)#箱子边界  
 print(patches)#箱子数
  
#直方图绘制分布曲线  
 plt.plot(bins[:10],n,'--',color='#2ca02c')  
 plt.hist(x=[i+0.1 for i in data],label='new sepal length(cm)',alpha=0.3)  
 plt.legend()

 

2.14 violin plot【小提琴图】

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt

my_dpi=126
fig = plt.figure(figsize=(580/my_dpi,480/my_dpi))
mpl.rcParams['axes.linewidth'] = 0.5
mpl.rcParams['xtick.major.size'] = 0.0
mpl.rcParams['ytick.major.size'] = 0.0
d = 0.01
ax = fig.add_axes([d,d,1-2*d,1-2*d])

np.random.seed(10)
D = np.random.normal((3,5,4), (0.75, 1.00, 0.75), (200,3))
VP = ax.violinplot(D, [2,4,6], widths=1.5,
                   showmeans=False, showmedians=False, showextrema=False)
for body in VP['bodies']:
    body.set_facecolor('C1')
    body.set_alpha(1)

ax.set_xlim(0, 8), ax.set_xticks(np.arange(1,8))
ax.set_ylim(0, 8), ax.set_yticks(np.arange(1,8))
ax.set_axisbelow(True)
ax.grid(linewidth=0.125)
plt.show()

 

学习笔记

(1)官网示例
  https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.violinplot.html
  Python可视化21|Seaborn.catplot(上)-小提琴图等四类图

(2)ax.violinplot
  showextrema=True, # 增加竖线, 标记四分位值
 

2.15 barbs plot【风羽图】

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt

my_dpi=126
fig = plt.figure(figsize=(580/my_dpi,480/my_dpi))
mpl.rcParams['axes.linewidth'] = 0.5
mpl.rcParams['xtick.major.size'] = 0.0
mpl.rcParams['ytick.major.size'] = 0.0
d = 0.01
ax = fig.add_axes([d,d,1-2*d,1-2*d])

np.random.seed(1)
X = [[2,4,6]]
Y = [[1.5,3,2]]
U = -np.ones((1,3))*0 # [[-0. -0. -0.]]
V = -np.ones((1,3))*np.linspace(50,100,3) # [[-1. -1. -1.]], [ 50.  75. 100.]3个位点, 步长一致;
ax.barbs(X,Y,U,V, barbcolor="C1", flagcolor="C1", length=15, linewidth=0.5)

ax.set_xlim(0, 8), ax.set_xticks(np.arange(1,8))
ax.set_ylim(0, 8), ax.set_yticks(np.arange(1,8))
ax.set_axisbelow(True)
ax.grid(linewidth=0.125)
plt.show()

 

学习笔记

(1)官网示例
  https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.barbs.htm
  为了简单而有效的表达出风的大小和方向,长杆代表风向,短杆和小旗子代表风速
  python画风羽及风羽定义-CSDN博客

(2)np.zeros()
  返回来一个给定形状和类型的用1填充的数组
  np.ones((1, 3)), # 1行3列的数组, 用1填充。

(3)ax.barbs

        X:风场数据X坐标  
        Y:风场数据Y坐标  
        U:风的水平方向分量  
        V:风的垂直方向分量

 

2.16 even plot【栅格图】

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt

my_dpi=126
fig = plt.figure(figsize=(580/my_dpi,480/my_dpi))
mpl.rcParams['axes.linewidth'] = 0.5
mpl.rcParams['xtick.major.size'] = 0.0
mpl.rcParams['ytick.major.size'] = 0.0
d = 0.01
ax = fig.add_axes([d,d,1-2*d,1-2*d])

np.random.seed(1)
X = [2,4,6]
D = np.random.gamma(4, size=(3, 50)) #随机生产3组,50个数字的二维列表;
ax.eventplot(D, colors="C1", orientation="vertical", lineoffsets=X, linewidth=0.45)

ax.set_xlim(0, 8), ax.set_xticks(np.arange(1,8))
ax.set_ylim(0, 8), ax.set_yticks(np.arange(1,8))
ax.set_axisbelow(True)
ax.grid(linewidth=0.125)
plt.show()

 

学习笔记

(1)官网示例
  https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.eventplot.html

(2)np.random.gamma
  伽马分布的随机样本, 使用此方法返回numpy数组的随机样本。
  numpy.random.gamma(shape, scale=1.0, size=None)
  伽马分布常被用来模拟电子元件的失效时间,并且在泊松分布事件之间的等待时间相关的过程中自然产生。

(3)ax.eventplot
  这种图形通常在神经科学中用于表示神经事件,通常称为尖峰栅格(spike raster)、点栅格( dot raster)或栅格图(raster plot)。也可用于显示多组离散事件的时间或位置。   ax.eventplot(positions,orientation=‘horizontal’,lineoffsets=1,linelengths=1,linewidths=None,colors=None,linestyles=‘solid’,*,data=None,**kwargs)

positions,输入的数据,代表数据的位置,如果是横向,则是x坐标,如果是纵向,则是y坐标。  
orientation,作图的方向,{'horizontal', 'vertical'}, default: 'horizontal'  
lineoffsets,每个数据组的偏移量,float or array-like, default: 1  
linelengths,线长,float or array-like, default: 1  
linewidths,线宽,float or array-like  
colors,线的颜色,color or list of colors  
linestyles,线型,str 或 符号化的线性,['solid', 'dashed', 'dashdot', 'dotted', '-', '--', '-.', ':']

 

2.17 hexbin plot【二元直方图】

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt

my_dpi=126
fig = plt.figure(figsize=(580/my_dpi,480/my_dpi))
mpl.rcParams['axes.linewidth'] = 0.5
mpl.rcParams['xtick.major.size'] = 0.0
mpl.rcParams['ytick.major.size'] = 0.0
d = 0.01
ax = fig.add_axes([d,d,1-2*d,1-2*d])

np.random.seed(1)
X = np.random.uniform(1.5,6.5,100)
Y = np.random.uniform(1.5,6.5,100)
C = np.random.uniform(0,1,10000)

ax.hexbin(X, Y, C, gridsize=4, linewidth=0.25, edgecolor="white",
          cmap=plt.get_cmap("Wistia"), alpha=1.0)

ax.set_xlim(0, 8), ax.set_xticks(np.arange(1,8))
ax.set_ylim(0, 8), ax.set_yticks(np.arange(1,8))
ax.set_axisbelow(True)
ax.grid(linewidth=0.125)
plt.show()

 

学习笔记

(1)官网示例
   https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.hexbin.html
  Python Matplotlib.axes.Axes.hexbin()用法及代码示例 - 纯净天空

(2)np.random.uniform
  从一个均匀分布[low,high)中随机采样,注意定义域是左闭右开,即包含low,不包含high.

(3)ax.hexbin

参数:
x, y:这些参数是数据序列。 x和y的长度必须相同。
C:此参数是存储在箱中的值。

gridsize:此参数表示x方向或两个方向上的六边形数量。  
xscale:此参数在水平轴上使用线性或对数刻度。  
xycale:此参数在垂直轴上使用线性或log10标度。  
mincnt:此参数用于显示单元格中具有最少点数的单元格。  
marginals:此参数用于沿x轴底部和y轴左侧绘制颜色映射为矩形的边际密度。   
extent:此参数是箱子的极限。

 

2.18 xcorr plot【相关图】

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt

my_dpi=126
fig = plt.figure(figsize=(580/my_dpi,480/my_dpi))
mpl.rcParams['axes.linewidth'] = 0.5
mpl.rcParams['xtick.major.size'] = 0.0
mpl.rcParams['ytick.major.size'] = 0.0
mpl.rcParams['axes.unicode_minus'] =False
d = 0.01
ax = fig.add_axes([d,d,1-2*d,1-2*d])

np.random.seed(3)
Y = np.random.uniform(-4, 4, 250)
X = np.random.uniform(-4, 4, 250)
ax.xcorr(X, Y, usevlines=True, maxlags=6, normed=True, lw=2,
         color="C1")

ax.set_xlim(-8, 8), ax.set_xticks(np.arange(-8,8,2))
ax.set_ylim(-.25, .25), ax.set_yticks(np.linspace(-.25,.25,9))
ax.set_axisbelow(True)
ax.grid(linewidth=0.125)
plt.show()

 

学习笔记

(1)官网示例
  https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.xcorr.html
   Python Matplotlib.axes.Axes.xcorr()用法及代码示例

(2)ax.xcorr
  Axes.xcorr(self, x, y, normed=True, detrend=, usevlines=True, maxlags=10, *, data=None, **kwargs)

参数:
x, y:这些参数是标量的序列。
detrend:此参数是可选参数。默认值为mlab.detrend_none
normed:此参数也是可选参数,包含bool值。其默认值为True
usevlines:此参数也是可选参数,包含bool值。其默认值为True
maxlags:此参数也是可选参数,包含整数值。其默认值为10
linestyle:该参数也是可选参数,仅当usevlines为False时才用于绘制数据点。
marker:此参数也是可选参数,包含字符串。其默认值为‘o’

  后面会重现下坐标轴、图例、调色盘的设置等代码,敬请期待(也许又是一个月后emoj)。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值