- Matplotlib 线图
- Matplotlib 散点图
- Matplotlib 柱状图
- Matplotlib 饼图
- 课后作业(6必做)
1、Matplotlib 线图 1.1 Matplotlib 介绍:友情提示:将下文中代码拷贝到JupyterNotebook中直接执行即可,部分代码需要连续执行。
- Matplotlib 是 Python 的绘图库,它能让使用者很轻松地将数据图形化,并且提供多样化的输出格式。
- Matplotlib 可以用来绘制各种静态,动态,交互式的图表。
- Matplotlib 是一个非常强大的 Python 画图工具,我们可以使用该工具将很多数据通过图表的形式更直观的呈现出来。
- Matplotlib 可以绘制线图、散点图、等高线图、条形图、柱状图、3D 图形、甚至是图形动画等等。
在线安装命令:pip install matplotlib
清华镜像安装:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple matplotlib
引入相关包:import matplotlib.pyplot as plt
简单理解,只需要设置X轴和Y轴的数据,就可以画一个最基础的单线条图了,例如我们要绘制坐标 (1, 3) 到 (8, 10) 的线,我们就需要传递两个数组 [1, 8] 和 [3, 10] 给 plot 函数。
import matplotlib.pyplot as plt import numpy as np #设置X轴和Y轴数据 xpoints = np.array([1, 8]) ypoints = np.array([3, 10]) #将X轴和Y轴数据放入图中 plt.plot(xpoints, ypoints) plt.show()画单条线图语法
plot([x], y, [fmt], * , data=None, ** kwargs)
参数说明:
- x, y:点或线的节点,x 为 x 轴数据,y 为 y 轴数据,数据可以列表或数组。
- fmt:可选,定义基本格式(如颜色、标记和线条样式)。
- ** kwargs:可选,用在二维平面图上,设置指定属性,如标签,线的宽度等。
- 颜色字符:‘b’ 蓝色,‘m’ 洋红色,‘g’ 绿色,‘y’ 黄色,‘r’ 红色,‘k’ 黑色,‘w’ 白色,‘c’ 青绿色,‘#008000’ RGB 颜色符串。多条曲线不指定颜色时,会自动选择不同颜色。
- 线形字符:‘‐’ 实线,‘‐‐’ 破折线,‘‐.’ 点划线,‘:’ 虚线。
- 标记字符:‘.’ 点标记,‘,’ 像素标记(极小点),‘o’ 实心圈标记,‘v’ 倒三角标记,‘^’ 上三角标记,‘>’ 右三角标记,‘<’ 左三角标记…等等。
import matplotlib.pyplot as plt import numpy as np xpoints = np.array([1, 2, 6, 8]) ypoints = np.array([3, 8, 1, 10]) plt.plot(xpoints, ypoints,'>') plt.show()
import matplotlib.pyplot as plt import numpy as np x = np.arange(0,4*np.pi,0.1) # start,stop,step y = np.sin(x) z = np.cos(x) plt.plot(x,y,x,z) plt.show()注意:如果我们不指定 x 轴上的点,则 x 会根据 y 的值来设置为 0, 1, 2, 3…N-1,如下例:
import matplotlib.pyplot as plt import numpy as np ypoints = np.array([1,3,4,5,8,9,6,1,3,4,5,2,4]) plt.plot(ypoints, marker = 'o') plt.show()加入丰富的 fmt 参数
fmt = “[marker] [line] [color]” 定义了基本格式,如标记、线条样式和颜色。
import matplotlib.pyplot as plt import numpy as np ypoints = np.array([6, 2, 13, 10]) # o 代表实心圈 : 代表虚线 r 代表red红色 plt.plot(ypoints, 'o:r') plt.show()标记符号的大小与颜色
我们可以自定义标记的大小与颜色,使用的参数分别是:
markersize,简写为 ms:定义标记的大小。
markerfacecolor,简写为 mfc:定义标记内部的颜色。
markeredgecolor,简写为 mec:定义标记边框的颜色。
import matplotlib.pyplot as plt import numpy as np ypoints = np.array([6, 2, 13, 10]) plt.plot(ypoints, marker = 'o', ms = 20, mfc ='g') plt.show()Matplotlib 绘图线
线的类型可以使用 linestyle 参数来定义,简写为 ls。
| 类型 | 简写 | 说明 |
|---|---|---|
| 'solid' (默认) | '-' | 实线 |
| 'dotted' | ':' | 点虚线 |
| 'dashed' | '--' | 破折线 |
| 'dashdot' | '-.' | 点划线 |
| 'None' | '' 或 ' ' | 不画线 |
| 颜色标记 | 描述 | |
|---|---|---|
| 'r' | 红色 | |
| 'g' | 绿色 | |
| 'b' | 蓝色 | |
| 'c' | 青色 | |
| 'm' | 品红 | |
| 'y' | 黄色 | |
| 'k' | 黑色 | |
| 'w' | 白色 | |
线的宽度 线的宽度可以使用 linewidth 参数来定义,简写为 lw,值可以是浮点数,如:1、2.0、5.67 等。
import matplotlib.pyplot as plt import numpy as np ypoints = np.array([6, 2, 13, 10]) plt.plot(ypoints, ls = 'dashdot',color = '#8FBC8F',linewidth = '5.5') plt.show()1.4 画多条线图 画多条线图语法
plot([x], y, [fmt], [x2], y2, [fmt2], …, **kwargs)
import matplotlib.pyplot as plt import numpy as np x1 = np.array([0, 1, 2, 3]) y1 = np.array([3, 7, 5, 9]) x2 = np.array([0, 1, 2, 3]) y2 = np.array([6, 2, 13, 10]) plt.plot(x1, y1,'o-.r', x2, y2,'LightGreen',linewidth =3) plt.show()1.5 轴标签和标题
- plt.title() 设置标题
- plt.xlabel() 设置X轴标签
- plt.ylabel() 设置Y轴标签
- 轴标签和标题常用的参数有fontproperties设置字体,fontdict设置样式,loc设置位置
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()
注意:Matplotlib 默认情况不支持中文,我们可以通过下面两种方式解决:
- 下载某一个字体,将路径添加进配置文件matplotlib.font_manager.FontProperties(fname=“字体路径”),然后在标题、轴标签中通过fontproperties参数设置一下该字体即可。
- 直接设置全局字体,如通过plt.rcParams[‘font.family’]=[‘FangSong_GB2312’]将全局字体设置为仿宋_GB2312。
第1种方式,我们下载一款开源字体《思源黑体》,下载地址 https://source.typekit.com/source-han-serif/cn/ ,下载到D盘根目录,然后引用即可,如下例:
import numpy as np
from matplotlib import pyplot as plt
import matplotlib
# fname 为你下载的字体库路径
zhfont1 = matplotlib.font_manager.FontProperties(fname="D://SourceHanSans-Bold.otf")
x = np.arange(1,11)
y = 2 * x + 5
plt.title("思源黑体 - 测试标题", fontproperties=zhfont1) # 设置使用该字体
plt.xlabel("x 轴", fontproperties=zhfont1) # 设置使用该字体
plt.ylabel("y 轴", fontproperties=zhfont1) # 设置使用该字体
plt.plot(x,y)
plt.show()
第2种方式,设置全局字体
首先我们通过循环查询 Matplotlib 支持可设置的字体。
from matplotlib import pyplot as plt
import matplotlib
for i in sorted(set([f.name for f in matplotlib.font_manager.fontManager.ttflist])):
print(i)
Windows中我们常用的汉字字体名称为:
黑体 SimHei
微软雅黑 Microsoft YaHei
微软正黑体 Microsoft JhengHei
新宋体 NSimSun
新细明体 PMingLiU
细明体 MingLiU
标楷体 DFKai-SB
仿宋 FangSong
楷体 KaiTi
仿宋_GB2312 FangSong_GB2312
接下来我们通过plt.rcParams[‘font.family’]=[“字体名称”]来设置全局中文字体。
from matplotlib import pyplot as plt plt.rcParams['font.family']=['SimHei'] #设置全局字体为黑体fontdict 参数可以使用 css 来设置字体样式
如下例,设置font1和font2两种字体样式:
import numpy as np
from matplotlib import pyplot as plt
import matplotlib
# 设置两种字体样式
font1 = {'color':'blue','size':20}
font2 = {'color':'darkred','size':15}
x = np.arange(1,11)
y = 2 * x + 5
# fontdict 参数可以使用 css 来设置字体样式
plt.title("CSS样式 - 测试标题", fontdict = font1)
plt.xlabel("x 轴黑体", fontdict = font2)
plt.ylabel("y 轴黑体", fontdict = font2)
plt.plot(x,y)
plt.show()
loc 参数可以设置轴标签和标题位置
- title() 方法提供了 loc 参数来设置标题显示的位置,可以设置为: ‘left’, ‘right’, 和 ‘center’, 默认值为 ‘center’。
- xlabel() 方法提供了 loc 参数来设置 x 轴显示的位置,可以设置为: ‘left’, ‘right’, 和 ‘center’, 默认值为 ‘center’。
- ylabel() 方法提供了 loc 参数来设置 y 轴显示的位置,可以设置为: ‘bottom’, ‘top’, 和 ‘center’, 默认值为 ‘center’。
import numpy as np
from matplotlib import pyplot as plt
import matplotlib
x = np.arange(1,11)
y = 2 * x + 5
plt.title("左对齐 - 测试标题", loc="left")
plt.xlabel("x 轴下", loc="left")
plt.ylabel("y 轴左", loc="bottom")
plt.plot(x,y)
plt.show()
1.6 Matplotlib 网格线
语法:matplotlib.pyplot.grid(b=None, which=‘major’, axis=‘both’,)
参数说明:
- b:可选,默认为 None,可以设置布尔值,true 为显示网格线,false 为不显示,如果设置 **kwargs 参数,则值为 true。
- which:可选,可选值有 ‘major’、‘minor’ 和 ‘both’,默认为 ‘major’,表示应用更改的网格线。
- axis:可选,设置显示哪个方向的网格线,可以是取 ‘both’(默认),‘x’ 或 ‘y’,分别表示两个方向,x 轴方向或 y 轴方向。
- **kwargs:可选,设置网格样式,可以是 color=‘r’, linestyle=‘-’ 和 linewidth=2,分别表示网格线的颜色,样式和宽度。
import numpy as np
import matplotlib.pyplot as plt
x = np.array([1, 2, 3, 4])
y = np.array([1, 4, 9, 16])
plt.title("grid() Test")
plt.xlabel("x - label")
plt.ylabel("y - label")
plt.plot(x, y)
#加入网格线
plt.grid()
plt.show()
以下实例添加一个简单的网格线,并设置网格线的样式,格式如下:
grid(axis=‘x/y’ color = ‘color’, linestyle = ‘linestyle’, linewidth = number)
参数说明:
color:‘b’ 蓝色,‘m’ 洋红色,‘g’ 绿色,‘y’ 黄色,‘r’ 红色,‘k’ 黑色,‘w’ 白色,‘c’ 青绿色,‘#008000’ RGB 颜色符串。
linestyle:‘‐’ 实线,‘‐‐’ 破折线,‘‐.’ 点划线,‘:’ 虚线。
linewidth:设置线的宽度,可以设置一个数字。
axis:设置 ‘y’ 则垂直于y轴显示,设置 ‘x’ 则垂直于x轴显示。
import numpy as np
import matplotlib.pyplot as plt
x = np.array([1, 2, 3, 4])
y = np.array([1, 4, 9, 16])
plt.title("grid() Style Test")
plt.xlabel("x - label")
plt.ylabel("y - label")
plt.plot(x, y,'k-',linewidth=2.5)
plt.grid(axis='y' ,color = 'grey', linestyle = '--', linewidth = 2)
plt.show()
1.7 Matplotlib 绘制多图
我们可以使用 pyplot 中的 subplot() 和 subplots() 方法来绘制多个子图。
subplot() 方法在绘图时需要指定位置,subplots() 方法可以一次生成多个,在调用时只需要调用生成对象的 ax 即可。
即将整个绘图区域分成 nrows 行和 ncols 列,然后从左到右,从上到下的顺序对每个子区域进行编号 1…N ,左上的子区域的编号为 1、右下的区域编号为 N,编号可以通过参数 index 来设置。
如下例:设置 numRows = 2,numCols = 2,就是将图表绘制成 2x2 的图片区域, 对应的坐标为:
(1, 1), (1, 2) (2, 1), (2, 2)
plotNum = 1, 表示的坐标为(1, 1), 即第一行第一列的子图。
plotNum = 2, 表示的坐标为(1, 2), 即第一行第二列的子图。
plotNum = 3, 表示的坐标为(2, 1), 即第二行第一列的子图。
plotNum = 4, 表示的坐标为(2, 2), 即第二行第二列的子图。
import matplotlib.pyplot as plt
import numpy as np
#plot 1:
x = np.array([0, 6])
y = np.array([0, 100])
plt.subplot(2, 2, 1)
plt.plot(x,y)
plt.title("plot 1")
#plot 2:
x = np.array([1, 2, 3, 4])
y = np.array([1, 4, 9, 16])
plt.subplot(2, 2, 2)
plt.plot(x,y)
plt.title("plot 2")
#plot 3:
x = np.array([1, 2, 3, 4])
y = np.array([3, 5, 7, 9])
plt.subplot(2, 2, 3)
plt.plot(x,y)
plt.title("plot 3")
#plot 4:
x = np.array([1, 2, 3, 4])
y = np.array([4, 5, 6, 7])
plt.subplot(2, 2, 4)
plt.plot(x,y)
plt.title("plot 4")
plt.suptitle("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(轴)对象中挤出,对于 N * 1 或 1 * N 个子图,返回一个 1 维数组,对于 N * M,N>1 和 M>1 返回一个 2 维数组。如果设置为 False,则不进行挤压操作,返回一个元素为 Axes 实例的2维数组,即使它最终是1x1。
- subplot_kw:可选,字典类型。把字典的关键字传递给 add_subplot() 来创建每个子图。
- gridspec_kw:可选,字典类型。把字典的关键字传递给 GridSpec 构造函数创建子图放在网格里(grid)。
- ** fig_kw:把详细的关键字参数传给 figure() 函数。
fig,ax = plt.subplots() 是面向对象写法,fig为画布,ax为对象,其等价于:
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
import matplotlib.pyplot as plt
import numpy as np
# 创建一些测试数据
x = np.linspace(0, 2*np.pi, 400)
y = np.sin(x**2)
t = np.linspace(-1,1,200)
# 创建一个画像和子图 -- 图1
fig, ax = plt.subplots(1,1)#fig 画布
ax.plot(x, y)
ax.set_title('Simple plot')
ax.set_ylabel('y - label')
# 创建两个子图 ,设置Y轴共享 -- 图2
f, (ax1, ax2) = plt.subplots(1, 2, sharey=True)
ax1.plot(x, y)
ax1.set_title('Sharing Y axis')
ax2.scatter(x, y)
ax2.set_title('Sharing Y axis 2')
ax1.set_ylabel('share - y - label')
# 创建四个子图 -- 图3
fig, axs = plt.subplots(2, 2, subplot_kw=dict(projection="polar"))
axs[0, 0].plot(x, y)
axs[1, 1].scatter(x, y)
plt.show()
创建4个子图,测试共享X轴,共享Y轴和同时共享X轴Y轴的效果,如下例:
import matplotlib.pyplot as plt # 共享 x 轴 plt.subplots(2, 2, sharex='col') # 共享 y 轴 plt.subplots(2, 2, sharey='row') # 同时共享 x 轴和 y 轴 plt.subplots(2, 2, sharex='all', sharey='all') plt.show()2、Matplotlib 散点图 2.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]) sizes = np.array([20,50,100,200,500,1000,60,90]) colors = np.array(["red","green","black","orange","purple","beige","cyan","magenta"]) plt.scatter(x, y, c=colors,s=sizes) plt.show()
设置两组散点图,如下例:
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()2.2 随机数设置散点图,加入颜色条
如下例,我们通过随机函数生成50样本,坐标、颜色和大小均根据样本随机设置,坐标0-1,颜色0-100,大小0-900,alpha=0.5设置透明度,plt.colorbar()加入颜色渐变条。
import numpy as np
import matplotlib.pyplot as plt
# 随机数生成器的种子
np.random.seed(19680801)
N = 50 #样本数
# 返回一组服从“0~1”均匀分布的随机样本值
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)*100 # 将颜色范围设定在0到100
sizes = (30 * np.random.rand(N))**2 # 将大小泛微设定在0到900
plt.scatter(x, y, s=sizes, c=colors, alpha=0.5) # 设置大小,颜色及透明度
plt.title("Random Scatter Test") # 设置标题
plt.colorbar() # 添加 颜色条或渐变色条
plt.show()
2.3 颜色条 Colormap
Matplotlib 模块提供了很多可用的颜色条。
颜色条就像一个颜色列表,其中每种颜色都有一个范围从 0 到 100 的值。
设置颜色条需要使用 cmap 参数,默认值为 ‘viridis’,之后颜色值设置为 0 到 100 的数组。
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]) colors = np.array([0, 10, 20, 30, 40, 45, 50, 55, 60, 70, 80, 90, 100]) plt.scatter(x, y, c=colors, cmap='viridis') #plt.scatter(x, y, c=colors, cmap='afmhot_r') plt.colorbar() plt.show()3、Matplotlib 柱形图 3.1 我们可以使用 pyplot 中的 bar() 方法来绘制柱形图。
bar() 方法语法格式如下:
matplotlib.pyplot.bar/barh(x, height, width=0.8, bottom=None, *, align=‘center’, data=None, ** kwargs)
参数说明:
- bar:竖状。
- barh:横状。
- x:浮点型数组,柱形图的 x 轴数据。
- height:浮点型数组,柱形图的高度。
- width:浮点型数组,柱形图的宽度。
- bottom:浮点型数组,底座的 y 坐标,默认 0。
- align:柱形图与 x 坐标的对齐方式,‘center’ 以 x 位置为中心,这是默认值。 ‘edge’:将柱形图的左边缘与 x 位置对齐。要对齐右边缘的条形,可以传递负数的宽度值及 align=‘edge’。
- **kwargs::其他参数。
竖状,加入颜色参数color和柱宽度参数width,如下例:
import matplotlib.pyplot as plt
import numpy as np
x = np.array(["season-1", "season-2", "season-3", "season-4"])
y = np.array([12, 22, 6, 18])
plt.bar(x,y,color="#8696a7",width=0.6)
plt.title("Year Bar Test")
plt.show()
横状,加入多颜色和柱高度height参数(在这里是等同于竖状图中的柱宽度参数width),如下例:
import matplotlib.pyplot as plt
import numpy as np
x = np.array(["season-1", "season-2", "season-3", "season-4"])
y = np.array([12, 22, 6, 18])
plt.barh(x,y,color = ["#dadad8","#f8ebd8","#965454","#6b5152"],height = [0.3,0.4,0.5,0.6])
plt.title("Year Barh Test")
plt.show()
4、 Matplotlib 饼图
4.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)[source]
参数说明:
- 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)和比例文字的格式。
- enter :浮点类型的列表,默认值:(0,0)。用于设置图标中心位置。
- frame :布尔类型,默认值:False。如果是 True,绘制带有表的轴框架。
- rotatelabels :布尔类型,默认为 False。如果为 True,旋转每个 label 到指定的角度。
设置饼图标签labels,标签距离圆心距离labeldistance,饼图颜色colors,如下例:
import matplotlib.pyplot as plt
import numpy as np
y = np.array([35, 25, 25, 15])
plt.pie(y,
labels=['A','B','C','D'], # 设置饼图标签
labeldistance=0.7, # 标签距离圆心的距离
colors=["#d5695d", "#5d8ca8", "#65a479", "#a564c9"], # 设置饼图颜色
)
plt.title("Pie Test") # 设置标题
plt.show()
设置饼图各个扇形之间的间隔explode(突出显示),扇形百分比显示autopct,如下例:
进阶提示:默认情况下,第一个扇形的绘制是从 X 轴开始并逆时针移动绘制的。
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.4), # 第二部分突出显示,值越大,距离越远
autopct='%.2f%%', # 格式化输出百分比显示
)
# 默认情况下,第一个扇形的绘制是从 x 轴开始并逆时针移动
plt.title("Pie Test")
plt.show()
Matplotlib更多用法请参看
https://matplotlib.org/stable/tutorials/introductory/usage.html
5、课后作业,答案在下一讲 1、完成一个简单的单线条图满足以下要求:公式:$ f(x) = sin^2(x - 2)e^{ -x^2} $
要求:
- 将[0,2]等分30次写入x轴,使用上述公式得出y轴值
- 标题为公式(公式显示用法请自行搜索),X轴label为 asis-X,Y轴label为 asis-Y
- 线条样式要求:黑色、破折线、粗细2
- 其他样式要求:X轴Y轴标签单独定义font:均为darkred色,字体大小15,X轴标签左对齐,Y轴标签靠上对齐
- 加入灰色网格线,粗细1,垂直于x轴
您的代码:2、完成一个简单的多线条图满足以下要求:
- 将[0,2]等分100次写入x轴,y轴分别为x,x平方,x立方
- 在一张画布中展示出三个线条x(蓝色),x平方(橙色),x立方(绿色)
- 三条曲线图例标题"linear",“quadratic”,“cubic”
- x轴命名x-label,y轴命名y-label,标题为Simple Plot,画布大小8 * 5
提示:
- 使用plt.figure(figsize=(8,5))定义画布大小
- 使用plt.legend()显示图例标题
您的代码:3、使用面向对象写法fig,ax =plt.subplots()绘制多图满足以下要求:
- 完成一个2行1列子画布图形上下展示,画布整体大小8 * 8,上图数据来源于x,y和x,w,下图数据来源于x,z,整体共享x轴
- x轴为[0,0.5]按0.01递增的数组,y轴为公式 c o s ( 2 ∗ π ∗ x ) cos(2 * pi * x) cos(2∗π∗x),z轴为range(len(x)),w轴为公式 c o s ( 1.5 ∗ π ∗ x ) cos(1.5 * pi * x) cos(1.5∗π∗x)
- 上图中x,y图例标题为2pi,x,w图例标题为1.5pi,下图中线条颜色为红色
提示:
- 子画布可以使用fig,ax = subplots(),ax[0],ax[1],ax[3]…的方式展现或fig,(ax1,ax2,ax3…) = subplots(),ax1,ax2,ax3…的方式展现
- 定义画布大小可以在plt.subplots()中使用figsize=(m,n)参数
- 显示图例仍然使用legend()
您的代码:4、使用面向对象写法fig,ax =plt.subplots()绘制多图满足以下要求:
- 完成一个1行2列子画布图形左右展示,左图为线图,右图为散点图,画布整体大小10 * 4,数据data1~4来源于4组0-1随机取样100个
- 左图直接输出四组数据,分别使用点状o、菱形d、倒三角v、正方形s,显示图例标题data1 data2 data3 data4,标题为My Plot
- 右图x轴为data1,y轴为data2,颜色为data3(0-100),大小为data4(0-900),透明度0.4,需要输出渐变色条,标题为My Scatter
提示:
- 数据定义可以使用data1, data2, data3, data4 = np.random.rand(4, 100)
- 左图画布输出可以使用ax1.plot(data1,“o”,label=“data1”) ax2.plot(data2,“d”,label=“data2”)…
- 右图颜色定义可以使用colors = data3 * 100,大小定义可以使用sizes = (data4 * 30) ** 2
- 右图画布输出可以使用ax2array = ax2.scatter(data1,data2,s=sizes,c=colors)
- 输出渐变色条可以使用fig.colorbar(ax2array)
您的代码:5、完成A公司销售数据柱状图满足以下要求:
-
销售数据为
data = {‘Barton LLC’: 109438.50,
‘Frami, Hills and Schmidt’: 103569.59,
‘Fritsch, Russel and Anderson’: 112214.71,
‘Jerde-Hilpert’: 112591.43,
‘Keeling LLC’: 100934.30,
‘Koepp Ltd’: 103660.54,
‘Kulas Inc’: 137351.96,
‘Trantow-Barrows’: 123381.38,
‘White-Trantow’: 135841.99,
‘Will LLC’: 104437.60} -
横向,x轴为销售额,y轴为分公司名
销售额 group_data = list(data.values())
分公司名 group_names = list(data.keys())
销售平均值 group_mean = np.mean(group_data) -
标题为Company Revenue
-
显示平均线,红色,虚线
-
分公司名为’Jerde-Hilpert’,‘Koepp Ltd’,'White-Trantow’的在y轴右侧显示注释文本"New Comany"
提示:
- 平均线设置可以使用plt.axvline(group_mean,color=“red”,linestyle=“–”)
- 在y轴右侧显示注释文本可以使用下列语法:
for group in [3,5,8]:
plt.text(145000,group,“New Company”)
您的代码:6、完成西南5省2021GDP饼状图满足以下要求:
-
GDP数据为
data = {‘四川省’: 53850,
‘重庆市’: 27894,
‘云南省’: 27146,
‘贵州省’: 19568,
‘西藏自治区’: 2000} -
省份及gdp
province = list(data.keys())
gdp = list(data.values()) -
饼状图标签为省份名字,标题为"西南5省2021GDP统计"
-
输出百分比%.2f%%,重庆市突出显示,突出距离0.1
-
字体均为黑体
提示:
- 设置全局字体可使用 plt.rcParams[‘font.family’]=[‘SimHei’]
您的代码:



