科研必会Python库之 Matplotlib库教程

科研必会Python库之 Matplotlib库教程,第1张

科研必会Python库之Matplotlib库教程

文章目录
  • 科研必会Python库之Matplotlib库教程
    • 1.matplotlib安装
    • 2.Matplotlib.Pyplot介绍
    • 3.折线图绘制
      • 3.1 默认参数绘制
      • 3.2 线条样式选择
      • 3.3 线条颜色选择
      • 3.4 线条粗细选择
      • 3.5 单图多线条绘制
    • 4.轴标签
    • 5.标题
    • 6.标签和标题无法显示中文问题
    • 7.加入网格线
    • 8.单窗口多图绘制
    • 9.散点图绘制
      • 9.1 默认参数绘制
      • 9.2设置图标大小
      • 9.3自定义点的颜色
      • 9.4两组散点图
      • 9.5使用随机数来设置散点图
    • 10.柱形图绘制
      • 10.1 默认参数绘制
      • 10.2 垂直绘制
      • 10.3 自定义各个柱形的颜色
      • 10.4柱形图宽度
    • 11.饼图
      • 11.1 默认参数绘制
      • 11.2设置饼图各个扇形的标签与颜色
      • 11.3突出显示第二个扇形,并格式化输出百分比


Matplotlib 是 Python 的绘图库,它能让使用者很轻松地将数据图形化,并且提供多样化的输出格式。Matplotlib 可以用来绘制各种静态,动态,交互式的图表。可是说是科研论文必备神器了。Matplotlib 通常与 NumPy 、 SciPy、Pandas配合使用, 这几个库相互协同几乎可以代替MatLab的一些常用功能。

  • Matplotlib 官网

  • NumPy 官网

  • SciPy 官网

1.matplotlib安装

我们可以通过终端指令来安装

pip install -U matplotlib

安装后可以通过如下指令来查看matplotlib库版本

import matplotlib

print(matplotlib.__version__)

#3.5.1

2.Matplotlib.Pyplot介绍

Pyplot 是 Matplotlib 的子库,使用该子库可以很方方便的让用户绘制2D图表。

Pyplot 内置很多绘图函数,通过一些间的的调用就可以画出很多既好看又实用的图像。

在导入该库的时候,我们一般都使用如下指令给matplotlib.pyplot换一个名字

import matplotlib.pyplot as plt

3.折线图绘制 3.1 默认参数绘制
import matplotlib.pyplot as plt
import numpy as np

ypoints = np.array([6, 2, 13, 10])

plt.plot(ypoints)

plt.show()

3.2 线条样式选择

linestyle参数控制

import matplotlib.pyplot as plt
import numpy as np

ypoints = np.array([6, 2, 13, 10])

plt.plot(ypoints, linestyle = 'dotted') #linestyle
plt.show()

linestyle简写形式plt.plot(ypoints, ls = ‘-.’):

import matplotlib.pyplot as plt
import numpy as np

ypoints = np.array([6, 2, 13, 10])

plt.plot(ypoints, ls = '--')
plt.show()

线条样式对照表

类型简写说明
‘solid’ (默认)‘-’实线
‘dotted’‘:’点虚线
‘dashed’‘–’破折线
‘dashdot’‘-.’点划线
‘None’‘’ 或 ’ ’不画线
3.3 线条颜色选择

color 参数控制, color 参数同样可以简写为c,默认颜色为浅蓝色;

import matplotlib.pyplot as plt
import numpy as np

ypoints = np.array([6, 2, 13, 10])

plt.plot(ypoints, color = 'b')
plt.show()

颜色对照表

颜色标记描述
‘r’红色
‘g’绿色
‘b’蓝色
‘c’青色
‘m’品红
‘y’黄色
‘k’黑色
‘w’白色

经过测试发现自定义颜色也是支持的,只需要输入十六进制颜色值或者RGB参数就可以

这里给大家推荐一篇博文,里面给出了RGB颜色表

3.4 线条粗细选择

linewidth 参数来控制,同样可以简写为 lw,值可以是小数

import matplotlib.pyplot as plt
import numpy as np

ypoints = np.array([6, 2, 13, 10])

plt.plot(ypoints, linewidth = '10.5')
plt.show()

3.5 单图多线条绘制
import matplotlib.pyplot as plt
import numpy as np

y1 = np.array([3, 7, 5, 9])
y2 = np.array([6, 1, 12, 8])

plt.plot(y1)
plt.plot(y2)

plt.show()

这里注意一个细节,我们只给出了Y轴的数据,没有给X轴的数据,X 的值默认设置为 [0, 1, 2, 3]

我们也可以自己设置 X 坐标值


4.轴标签

xlabel() 和 ylabel() 方法来设置 x 轴和 y 轴的标签

import numpy as np
import matplotlib.pyplot as plt

x = np.array([2, 4, 6, 8])
y = np.array([1, 4, 9, 16])
plt.plot(x, y)

plt.xlabel("x - label")
plt.ylabel("y - label")

plt.show()


5.标题

title() 方法设置标题

import numpy as np
import matplotlib.pyplot as plt

x = np.array([1, 2, 3, 4])
y = np.array([1, 4, 9, 16])
plt.plot(x, y)

plt.title("TITLE")
plt.xlabel("x - label")
plt.ylabel("y - label")

plt.show()


6.标签和标题无法显示中文问题

Matplotlib 默认情况不支持中文,我们可以使用以下简单的方法来解决

你也可以在网盘下载: https://pan.baidu.com/s/10-w1JbXZSnx3Tm6uGpPGOw,提取码:yxqu。

可以下载个 OTF 字体,比如 SourceHanSansSC-Bold.otf,将该文件文件放在当前执行的代码文件中

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


# fname 为 你下载的字体库路径,注意 SourceHanSansSC-Bold.otf 字体的路径
zhfont1 = matplotlib.font_manager.FontProperties(fname="SourceHanSansSC-Bold.otf")

x = np.arange(1, 11)
y = 2 * x + 5
plt.title("测试", fontproperties=zhfont1)

# fontproperties 设置中文显示,fontsize 设置字体大小
plt.xlabel("x 轴", fontproperties=zhfont1)
plt.ylabel("y 轴", fontproperties=zhfont1)
plt.plot(x, y)
plt.show()

7.加入网格线

grid() 方法来设置图表中的网格线

参数说明:

  • b:可选,默认为 None,可以设置布尔值,true 为显示网格线,false 为不显示,如果设置 **kwargs 参数,则值为 true。
  • which:可选,可选值有 ‘major’、‘minor’ 和 ‘both’,默认为 ‘major’,表示应用更改的网格线。
  • axis:可选,设置显示哪个方向的网格线,可以是取 ‘both’(默认),‘x’ 或 ‘y’,分别表示两个方向,x 轴方向或 y 轴方向。
  • kwargs:可选,设置网格样式,可以是 color=‘r’, linestyle=‘-’ 和 linewidth=2,分别表示网格线的颜色,样式和宽度。
  • color:‘b’ 蓝色,‘m’ 洋红色,‘g’ 绿色,‘y’ 黄色,‘r’ 红色,‘k’ 黑色,‘w’ 白色,‘c’ 青绿色,‘#008000’ RGB 颜色符串。
  • linestyle:‘‐’ 实线,‘‐‐’ 破折线,‘‐.’ 点划线,‘:’ 虚线。
  • linewidth:设置线的宽度,可以设置一个数字。
matplotlib.pyplot.grid(b=None, which='major', axis='both', )

eg:
import numpy as np
import matplotlib.pyplot as plt

x = np.array([2, 4, 6, 8])
y = np.array([1, 4, 9, 16])


plt.title("grid()")
plt.xlabel("x - label")
plt.ylabel("y - label")

plt.plot(x, y)

plt.grid()

plt.show()


8.单窗口多图绘制

我们可以使用 pyplot 中的 subplot() 和 subplots() 方法来绘制多个子图。

subplot() 方法在绘图时需要指定位置,subplots() 方法可以一次生成多个,在调用时只需要调用生成对象的 ax 即可

import matplotlib.pyplot as plt
import numpy as np

#plot 1:
xpoints = np.array([0, 6])
ypoints = np.array([0, 100])

plt.subplot(1, 2, 1)
plt.plot(xpoints,ypoints)
plt.title("plot 1")

#plot 2:
x = np.array([1, 2, 3, 4])
y = np.array([1, 4, 9, 16])

plt.subplot(1, 2, 2)
plt.plot(x,y)
plt.title("plot 2")

plt.suptitle("RUNOOB subplot Test")
plt.show()

subplots()

matplotlib.pyplot.subplots(nrows=1, ncols=1, *, sharex=False, sharey=False, squeeze=True, subplot_kw=None, gridspec_kw=None, **fig_kw)

参数说明:

  • nrows:默认为 1,设置图表的行数。
  • ncols:默认为 1,设置图表的列数。
  • sharex、sharey:设置 x、y 轴是否共享属性,默认为 false,可设置为 ‘none’、‘all’、‘row’ 或 ‘col’。 False 或 none 每个子图的 x 轴或 y 轴都是独立的,True 或 ‘all’:所有子图共享 x 轴或 y 轴,‘row’ 设置每个子图行共享一个 x 轴或 y 轴,‘col’:设置每个子图列共享一个 x 轴或 y 轴。
  • squeeze:布尔值,默认为 True,表示额外的维度从返回的 Axes(轴)对象中挤出,对于 N1 或 1N 个子图,返回一个 1 维数组,对于 N*M,N>1 和 M>1 返回一个 2 维数组。如果设置为 False,则不进行挤压 *** 作,返回一个元素为 Axes 实例的2维数组,即使它最终是1x1。
  • subplot_kw:可选,字典类型。把字典的关键字传递给 add_subplot() 来创建每个子图。
  • gridspec_kw:可选,字典类型。把字典的关键字传递给 GridSpec 构造函数创建子图放在网格里(grid)。
  • fig_kw:把详细的关键字参数传给 figure() 函数。

9.散点图绘制 9.1 默认参数绘制

我们可以使用 pyplot 中的 scatter() 方法来绘制散点图。

scatter() 方法语法格式如下:

matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None,  edgecolors=None, plotnonfinite=False, data=None, kwargs)

参数说明:

  • x,y:长度相同的数组,也就是我们即将绘制散点图的数据点,输入数据。
  • s:点的大小,默认 20,也可以是个数组,数组每个参数为对应点的大小。
  • c:点的颜色,默认蓝色 ‘b’,也可以是个 RGB 或 RGBA 二维行数组。
  • marker:点的样式,默认小圆圈 ‘o’。
  • cmap:Colormap,默认 None,标量或者是一个 colormap 的名字,只有 c 是一个浮点数数组的时才使用。如果没有申明就是 image.cmap。
  • norm:Normalize,默认 None,数据亮度在 0-1 之间,只有 c 是一个浮点数的数组的时才使用。
  • vmin,vmax:亮度设置,在 norm 参数存在时会忽略。
  • alpha:透明度设置,0-1 之间,默认 None,即不透明。
  • linewidths:标记点的长度。
  • edgecolors:颜色或颜色序列,默认为 ‘face’,可选值有 ‘face’, ‘none’, None。
  • plotnonfinite:布尔值,设置是否使用非限定的 c ( inf, -inf 或 nan) 绘制点。
  • kwargs:其他参数
import matplotlib.pyplot as plt
import numpy as np

x = np.array([1, 2, 3, 4, 5, 6, 7, 8])
y = np.array([1, 4, 9, 16, 7, 11, 23, 18])

plt.scatter(x, y)
plt.show()

9.2设置图标大小
import matplotlib.pyplot as plt
import numpy as np

x = np.array([1, 2, 3, 4, 5, 6, 7, 8])
y = np.array([1, 4, 9, 16, 7, 11, 23, 18])
sizes = np.array([20,50,100,200,500,1000,60,90])
plt.scatter(x, y, s=sizes)
plt.show()

9.3自定义点的颜色
import matplotlib.pyplot as plt
import numpy as np

x = np.array([1, 2, 3, 4, 5, 6, 7, 8])
y = np.array([1, 4, 9, 16, 7, 11, 23, 18])
colors = np.array(["red","green","black","orange","purple","beige","cyan","magenta"])

plt.scatter(x, y, c=colors)
plt.show()

9.4两组散点图
import matplotlib.pyplot as plt
import numpy as np

x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
plt.scatter(x, y, color = 'hotpink')

x = np.array([2,2,8,1,15,8,12,9,7,3,11,4,7,14,12])
y = np.array([100,105,84,105,90,99,90,95,94,100,79,112,91,80,85])
plt.scatter(x, y, color = '#88c999')

plt.show()

9.5使用随机数来设置散点图

(此处敲黑板,随机数画图,科研必备,不能说太直白[手动狗头])

import numpy as np
import matplotlib.pyplot as plt

# 随机数生成器的种子
np.random.seed(19680801)


N = 50
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
area = (30 * np.random.rand(N))**2  # 0 to 15 point radii

plt.scatter(x, y, s=area, c=colors, alpha=0.5) # 设置颜色及透明度

plt.title("RUNOOB Scatter Test") # 设置标题

plt.show()

10.柱形图绘制 10.1 默认参数绘制

我们可以使用 pyplot 中的 bar() 方法来绘制柱形图。

bar() 方法语法格式如下:

matplotlib.pyplot.bar(x, height, width=0.8, bottom=None,  align='center', data=None, kwargs)

参数说明:

  • x:浮点型数组,柱形图的 x 轴数据。
  • height:浮点型数组,柱形图的高度。
  • width:浮点型数组,柱形图的宽度。
  • bottom:浮点型数组,底座的 y 坐标,默认 0。
  • align:柱形图与 x 坐标的对齐方式,‘center’ 以 x 位置为中心,这是默认值。 ‘edge’:将柱形图的左边缘与 x 位置对齐。要对齐右边缘的条形,可以传递负数的宽度值及 align=‘edge’。
  • kwargs:其他参数。
import matplotlib.pyplot as plt
import numpy as np

x = np.array(["Runoob-1", "Runoob-2", "Runoob-3", "C-RUNOOB"])
y = np.array([12, 22, 6, 18])

plt.bar(x,y)
plt.show()

10.2 垂直绘制

垂直方向的柱形图可以使用 barh() 方法来设置:

10.3 自定义各个柱形的颜色
import matplotlib.pyplot as plt
import numpy as np

x = np.array(["Runoob-1", "Runoob-2", "Runoob-3", "C-RUNOOB"])
y = np.array([12, 22, 6, 18])

plt.bar(x, y,  color = ["#4CAF50","red","hotpink","#556B2F"])
plt.show()

10.4柱形图宽度
import matplotlib.pyplot as plt
import numpy as np

x = np.array(["Runoob-1", "Runoob-2", "Runoob-3", "C-RUNOOB"])
y = np.array([12, 22, 6, 18])

plt.bar(x, y, width = 0.1)
plt.show()

11.饼图 11.1 默认参数绘制

我们可以使用 pyplot 中的 pie() 方法来绘制饼图。

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)

参数说明:

  • x:浮点型数组,表示每个扇形的面积。
  • explode:数组,表示各个扇形之间的间隔,默认值为0。
  • labels:列表,各个扇形的标签,默认值为 None。
  • colors:数组,表示各个扇形的颜色,默认值为 None。
  • autopct:设置饼图内各个扇形百分比显示格式,%d%% 整数百分比,%0.1f 一位小数, %0.1f%% 一位小数百分比, %0.2f%% 两位小数百分比。
  • labeldistance:标签标记的绘制位置,相对于半径的比例,默认值为 1.1,如 <1则绘制在饼图内侧。
  • pctdistance::类似于 labeldistance,指定 autopct 的位置刻度,默认值为 0.6。
  • shadow::布尔值 True 或 False,设置饼图的阴影,默认为 False,不设置阴影。
  • radius::设置饼图的半径,默认为 1。
  • startangle::起始绘制饼图的角度,默认为从 x 轴正方向逆时针画起,如设定 =90 则从 y 轴正方向画起。
  • counterclock:布尔值,设置指针方向,默认为 True,即逆时针,False 为顺时针。
  • wedgeprops :字典类型,默认值 None。参数字典传递给 wedge 对象用来画一个饼图。例如:wedgeprops={‘linewidth’:5} 设置 wedge 线宽为5。
  • textprops :字典类型,默认值为:None。传递给 text 对象的字典参数,用于设置标签(labels)和比例文字的格式。
  • center :浮点类型的列表,默认值:(0,0)。用于设置图标中心位置。
  • frame :布尔类型,默认值:False。如果是 True,绘制带有表的轴框架。
  • rotatelabels :布尔类型,默认为 False。如果为 True,旋转每个 label 到指定的角度。
import matplotlib.pyplot as plt
import numpy as np

y = np.array([35, 25, 25, 15])

plt.pie(y)
plt.show()

11.2设置饼图各个扇形的标签与颜色
import matplotlib.pyplot as plt
import numpy as np

y = np.array([35, 25, 25, 15])

plt.pie(y,
        labels=['A','B','C','D'], # 设置饼图标签
        colors=["#d5695d", "#5d8ca8", "#65a479", "#a564c9"], # 设置饼图颜色
       )
plt.title("RUNOOB Pie Test") # 设置标题
plt.show()

11.3突出显示第二个扇形,并格式化输出百分比
import matplotlib.pyplot as plt
import numpy as np

y = np.array([35, 25, 25, 15])

plt.pie(y,
        labels=['A','B','C','D'], # 设置饼图标签
        colors=["#d5695d", "#5d8ca8", "#65a479", "#a564c9"], # 设置饼图颜色
        explode=(0, 0.2, 0, 0), # 第二部分突出显示,值越大,距离中心越远
        autopct='%.2f%%', # 格式化输出百分比
       )
plt.title("RUNOOB Pie Test")
plt.show()


参考资料

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/869494.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-13
下一篇 2022-05-13

发表评论

登录后才能评论

评论列表(0条)

保存