matplotlib 总的来说由三个“元素”组成:
画 布: Figure
坐标系: Axes
图 形: Line2D
生成可视化视图前,至少要有一张“画布”和一个“坐标系”。
下图中红色框为“画布”, 黄色线表示画布分割出来的4个“坐标系”,
每个坐标系中可以画多个分析图,如第二个坐标系中画的 红、蓝 两根线。
流程步骤:
import matplotlib.pyplot as plt
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
plt.plot(data) # 传入一个数据序列。其中x轴的坐标自动生成,从 0 开始。
plt.show() # 把图片显示出来。
print(111111)
plt.plot( ) 方法会自动的创建一张画布和一个坐标系,然后在里面生成分析图。
小提示:上面代码中的 print(111111) 是不会运行的。因为调用了plt.show(),它会保持画布一直显示,进入了一个loop循环中。
创建画布时设置属性:
import matplotlib.pyplot as plt
fig = plt.figure(num='画布名称', # 设置画布的名称,默认为 1。
figsize=[6.4, 4.8], # 画布尺寸,默认1英寸含100个像素,所以这里表示640x480像素大小的图片。
dpi=150, # 每英寸的像素,即分辨率。
facecolor='lightblue', # 画布背景色。默认 白色
edgecolor='red', # 画布边框颜色。默认 白色
)
也可以用 fig 的 set() 方法,随时设置画布的属性,
用 plt.gcf() 获取当前的画布,如:
fig = plt.gcf()
fig.set(facecolor='red')
调整画布中各坐标系的布局:
fig.subplots_adjust(left=0.1, # 调整最左边坐标系到画布左边框的间距(参数 0~1)
right=0.9, # 调整最右边坐标系到画布右边框的间距(参数 0~1)
top=0.9, # 调整最上面坐标系到画布顶部框的间距(参数 0~1)
bottom=0.1, # 调整最下面坐标系到画布底部框的间距(参数 0~1)
wspace=0.8, # 调整坐标系之间的水平间隔
hspace=0.6, # 调整坐标系之间的垂直间隔
)
# 自动调整坐标系的布局,使它们之间的内容(坐标轴名称)不重叠。这个方法是在所有坐标系布局好之后,再用的。
fig.tight_layout()
坐标系属性设置有两种情况,它们的设置方式有些许不同,
一种是 直接用 plt.plot() 自动生成的坐标系,另一种是手动创建的坐标系。
首选用下面的 全局字体 和 自定义字体方法2 两个方法。
查看matplotlib中所有可用的字体
import matplotlib.pyplot as plt
import matplotlib.font_manager as fontmg
import random
font_list = fontmg.fontManager.ttflist
font_name_list = [i.name for i in font_list]
#print(font_name_list)
自定义全局字体
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimSun'] # 指定默认字体为新宋体。
plt.rcParams['axes.unicode_minus'] = False # 解决保存图像时 负号'-' 显示为方块和报错的问题。
自定义局部字体 方法 2
import matplotlib.pyplot as plt
import matplotlib.font_manager as fontmg
x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
plt.plot(x, label='小示例图标签')
# 直接用字体的名字。
plt.xlabel('x 轴名称参数', fontproperties='Microsoft YaHei', fontsize=16) # 设置x轴名称
plt.ylabel('y 轴名称参数', fontproperties='Microsoft YaHei', fontsize=14) # 设置Y轴名称
plt.title('坐标系的标题', fontproperties='Microsoft YaHei', fontsize=20) # 设置坐标系标题的字体
plt.legend(loc='lower right', prop={"family": 'Microsoft YaHei'}, fontsize=10) # 小示例图的字体设置
自定义 局部字体 方法3
import matplotlib.pyplot as plt
import matplotlib.font_manager as fontmg
x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
plt.plot(x, label='小示例图标签')
my_font1 = fontmg.FontProperties(fname=r'C:\Windows\Fonts\simhei.ttf') # 读取系统中的 黑体 字体。
my_font2 = fontmg.FontProperties(fname=r'C:\Windows\Fonts\simkai.ttf') # 读取系统中的 楷体 字体。
plt.xlabel('x 轴名称参数', fontproperties=my_font1, fontsize=16) # 设置x轴名称
plt.ylabel('y 轴名称参数', fontproperties=my_font1, fontsize=14) # 设置Y轴名称
plt.title('坐标系的标题', fontproperties=my_font2, fontsize=20) # 标题的字体设置
plt.legend(loc='lower right', prop=my_font1, fontsize=10) # 小示例图的字体设置
import matplotlib.pyplot as plt
plt.title('坐标系标题', # 设置坐标系的标题。
loc='center', # 设置标题的方位 'center','right','left'
pad=10, # 设置标题离坐标系的距离。
fontproperties='Microsoft YaHei', # 设置字体为微软雅黑。
fontsize=20) # 设置字体的大小。
由subplot(),add_subplot(),subplots()手动实例化出来的坐标系设置标题,就是在title之前加set,如:
axe1 = fig1.add_subplot(2, 2, 1)
# axe1 = plt.subplot(222)
# 在title之前加set
axe1.set_title('坐标系标题', # 设置坐标系的标题。
loc='center', # 设置标题的方位 'center','right','left'
pad=10, # 设置标题离坐标系的距离。
fontproperties='Microsoft YaHei', # 设置字体为微软雅黑。
fontsize=20)
import matplotlib.pyplot as plt
plt.xlabel('x 轴名称', # 设置x轴名称
labelpad=10, # 设置轴名称离x轴的距离。默认为 None
rotation=30, # 设置字体的旋转角度。
fontproperties='Microsoft YaHei', # 设置字体为微软雅黑。
fontsize=16) # 设置字体的大小
# y 轴为:
plt.ylabel(.......)
手动实例化出来的坐标系设置轴名称也是在对应命令前加set,如下:
import matplotlib.pyplot as plt
axe.set_xlabel('x 轴名称', # 设置x轴名称
labelpad=10, # 设置轴名称离x轴的距离。默认为 None
rotation=30, # 设置字体的旋转角度。
fontproperties='Microsoft YaHei', # 设置字体为微软雅黑。
fontsize=16) # 设置字体的大小
# y 轴为:
axe.set_ylabel(.......)
也可以用 set() 方法,把 坐标系的标题和坐标轴的名称一起设置,如下:
axe.set(xlabel='x 轴名称', # 设置x轴标签。
ylabel='y 轴名称', # 设置y轴标签。
title='坐标系标题',) # 设置该坐标系的标题名称
import matplotlib.pyplot as plt
# 设定传入的x轴的数据,这里传入的是 1 到 10 的是个数据。
x_data = [i for i in range(1, 11)]
# 设定传入y轴的数据,这里传入的是 10 个 10 ~ 99 的随机整数。
y_data = [random.randint(10, 100) for i in range(10)]
y_data = [random.randint(10,100) for i in range(10)]
plt.plot(x_data, y_data) # 绘制曲线图。
# ============ 设置 x, y 轴的刻度的数值范围 =====================
plt.xlim([0, 12]) # x 轴的刻度值范围为 0 到 12。
plt.ylim([0, 100]) # y 轴的刻度值范围为 0 到 11。
# plt.axis([0,12, 0,100]) # 可以把 x, y 一起设置。
# 设置 x, y 轴的需要显示出来的刻度。
# 如果不设置这个,那么显示出来的刻度就是上面设置的刻度数值范围。
plt.xticks(list(range(1, 11))) # x 轴只显示出 1 到 10 的刻度值,0 和 12 刻度不显示(但它们还是存在坐标轴中)
# y 轴只显示[60,80,90]三个刻度,且把它们刻度值替换成['及格', '良好', '优秀']
plt.yticks([60, 80, 90], ['及格', '良好', '优秀'], rotation=30) # rotation 旋转刻度的文字。
手动实例化出来的坐标系刻度值设置:
axe.set_xlim([0, 10]) # 设置 x 轴刻度值的范围。
axe.set_xticks([0, 2, 4, 6, 8, 10]) # 自定义哪些刻度值显示出来。
axe.set_xticklabels(['zero', 'two', 'four', 'six', 'eight', 'ten'], # 把刻度值换成对应的文字。
rotation=30, # 字体旋转30度角
fontsize='medium') # 字体大小(...small, medium, large...),也可以用数字。
# y 轴,就是把命令改成对应的y……
每生成一个坐标系,它是有四条坐标轴的,也就是坐标系的外方框。
默认的刻度值是显示在左边和底部的坐标轴上的。
用 plt.gca() 获取当前坐标系
# 用 gca() 函数获取当前的坐标系,来对坐标轴进行详细设置。
axe = plt.gca()
# ========== 设置刻度值在哪条坐标轴上显示 ===================
axe.xaxis.set_ticks_position('bottom') # 设置x轴,其他参数有:'top', 'both', 'default', 'none'
axe.yaxis.set_ticks_position('left') # 设置y轴,其他参数有:'right', 'both', 'default', 'none'
# ========== 设置坐标轴的颜色 ===================
axe.spines['right'].set_color(None) # 设置右边坐标轴的颜色为None(即不显示坐标轴)
axe.spines['top'].set_color('red') # 设置顶部坐标轴的颜色为红色。
# ========== 设置坐标轴的位置 ===================
""" 参数'data'表示按刻度值放置,所以还需传入一个刻度值的参数。
参数 'center'表示放置在中间位置,等同于('data', 0.5),
参数 'zero' 表示放置在起始位置, 等同于('data', 0.0) """
axe.spines['bottom'].set_position(('data', 6)) # 把底部的轴放在刻度值为6的位置。
# axe.spines['bottom'].set_position('center') # 把底部的轴放置在中间。(‘center’只需要一个参数即可)
# ========== 是否在坐标系中显示 网格 ===================
axe.grid(True) # True为显示,默认 False。
plt.subplot() :在当前的画布中创建坐标系。
fig.add_subplot():在画布fig中创建坐标系(个人比较喜欢用这个方法创建,比较容易控制)。
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimSun'] # 指定默认字体为新宋体。
plt.rcParams['axes.unicode_minus'] = False
fig1 = plt.figure('第一块画布', figsize=[6.4, 4.8], dpi=100) # 第一个参数设置画布框的名字,即边框左上角的文字,默认数字1开始。
fig2 = plt.figure('第二块画布', figsize=(8, 6), dpi=100) # figsize 以英尺为单位的宽高值(一英尺=2.54cm),默认一英尺有100个像素点(dpi)。
# 定义从-pi到pi之间的数据,平均取64个数据点
x_data = np.linspace(-np.pi, np.pi, 64, endpoint=True)
"""===================== add_subplot() =================================
用 fig1.add_subplot()方法在画布fig1中添加一个坐标系,
前面两个参数表示:将整个 fig1 分成两行、两列,
第三个参数表示该坐标系放在第1个网格"""
ax1 = fig1.add_subplot(2, 2, 1)
# 绘制正弦曲线
ax1.plot(x_data, np.sin(x_data)) # 在ax1坐标系中画图。
ax1.grid(True) # 用ax1中的gird方法添加网格线。
ax1.spines['right'].set_color('none') # 设置坐标轴的一些属性。
ax1.spines['top'].set_color('none')
ax1.spines['bottom'].set_position(('data', 0))
ax1.spines['left'].set_position(('data', 0))
ax1.set_title('正弦曲线',fontproperties='Microsoft YaHei') # 单独坐标系得用 set_title()方法了。
"""===================== subplot() =================================
plt.subplot 会自动在当前激活的 figure 中添加坐标系,之后的plt操作都会在该坐标系中进行。
代码中 fig2 是在 fig1 之后创建的,所以当前 激活的figure 就是fig2, 因此ax2会被放在fig2中"""
ax2 = plt.subplot(222)
print('ax2当前活动的画布为:', plt.gcf())
print('ax2当前活动的坐标系为:', plt.gca())
# 绘制余弦曲线
# plt.plot()实际上会通过plt.gca()获得当前的Axes对象ax,然后再调用ax.plot()方法实现真正的绘图。
# plt.gca().plot(x_data, np.cos(x_data)) # 即这行代码和下面绘制图形的代码效果是等同的。
plt.plot(x_data, np.cos(x_data))
plt.gca().spines['right'].set_color('none') # plt.gca()获取当前激活画布中的坐标系,就是ax2
ax2.spines['top'].set_color('none') # 所以这里即可以用 ax2,也可以用plt.gca()。
plt.gca().spines['bottom'].set_position(('data', 0))
plt.gca().spines['left'].set_position(('data', 0))
ax2.set_title('余弦曲线',loc='left') # 所以这里可以用plt.title()方法。
"""重新把 ax3 坐标系放到第一块画布,
因为 fig1.add_subplot 不会激活fig1画布,它只是在fig1中再生成一个坐标系。
所以当前激活的画布还是 fig2。"""
ax3 = fig1.add_subplot(223)
print('ax3当前活动的画布为:',plt.gcf()) # 这里获取的和 ax2 中是一样的。
print('ax3当前活动的坐标系为:', plt.gca())
# 绘制正切曲线
ax3.plot(x_data, np.tan(x_data))
plt.grid(True) # 用 plt 中的gird方法添加网格线。它会把网格添加到 ax2 中。
plt.gca().spines['right'].set_color('red') # 所以这里用 plt.gca(),它只会在fig2中生效, 即它会把 ax2 中的有边界改为红色。
ax3.spines['top'].set_color('green')
ax3.spines['bottom'].set_position(('data', 0))
ax3.spines['left'].set_position(('data', 0))
ax3.set_title('正切曲线')
fig1.savefig('my_chart1.png') # 保存画布fig1生成的图片。
plt.savefig('my_chart2.png') # 保存当前激活画布生成的图片,即 fig2。
plt.show()
import matplotlib.pyplot as plt
import numpy as np
# 画图的数据
x = np.linspace(0, 10, 200)
data_obj = {'x': x,
'y1': 2 * x + 1,
'y2': 3 * x + 1.2,
'mean': 0.5 * x * np.cos(2*x) + 2.5 * x + 1.1}
"""subplots 生成子坐标系。
plt.subplots(n, m) 会返回两个对象,一个画布和对应的坐标系列表。
(传入的参数表示 生成 n行、m列的坐标系组)。
"""
fig, ax = plt.subplots(2, 2) # 获取生成的画布和坐标系组。
print(fig, '\n', ax)
# 设置画布的属性:各坐标系的间距。
fig.subplots_adjust(left=0.1, # 调整最左边坐标系到画布左边框的间距(参数 0~1)
right=0.9, # 调整最右边坐标系到画布右边框的间距(参数 0~1)
top=0.9, # 调整最上面坐标系到画布顶部框的间距(参数 0~1)
bottom=0.1, # 调整最下面坐标系到画布底部框的间距(参数 0~1)
wspace=0.8, # 调整坐标系之间的水平间隔
hspace=0.6, # 调整坐标系之间的垂直间隔
)
# fig.tight_layout() # 自动调整布局,使标题之间不重叠
# 在 ax[0, 1] 坐标系中(即第一行第二列的坐标系)画两条线,并填充两条线之间的颜色。
ax[0, 1].fill_between(data_obj['x'], # 从字典中读取数据。
data_obj['y1'],
data_obj['y2'],
color='yellow')
# 在两条线之间再画一曲条线。
ax[0, 1].plot('x', 'mean', # 通过 data_obj 字典的键获取参数值。
color='black', # 通过 data_obj 字典的键获取参数值。
data=data_obj, # 传入 data_obj 字典(这是另外一种传数据参数的方式。)
label='aaaaa') # 图例名称。
# 设置对应坐标系的属性
ax[0, 1].set(ylabel='Temperature (deg C)', # 设置y轴标签。
xlabel='Time', # 设置x轴标签。
title='A tale of two cities',) # 设置该坐标系的标题名称
ax[0, 1].legend(loc=4) # 设置图例
print(ax[0, 1].get_xlim()) # 获取 x 轴坐标值的显示范围。
ax[0, 1].set_xlim([0, 10]) # 设置 x 轴坐标值的显示范围。
ax[0, 1].set_xticks([0, 2, 4, 6, 8, 10]) # 自定义哪些坐标显示出来。
ax[0, 1].set_xticklabels(['zero', 'two', 'four', 'six', 'eight', 'ten'], # 把坐标换成对应的文字。
rotation=30, # 字体旋转30度角
fontsize='medium') # 字体大小(...small, medium, large...)。
plt.show()
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimSun'] # 指定默认字体为新宋体。
plt.rcParams['axes.unicode_minus'] = False
# 定义从-pi到pi之间的数据,平均取64个数据点
x_data = np.linspace(-np.pi, np.pi, 64, endpoint=True)
Fig = plt.figure() # 创建一块画布,画布名字大小均默认。
# ======================== 第一步 ================================
# 将画布 Fig 分割成两行、两列的空间。
gs = Fig.add_gridspec(2, 2)
# ======================== 第二步 ================================
# 指定在某个空间中生成坐标系。
# gs[0, 0:2] 索引参数,0表示第一行,0:2 表示 第0列到第2列(不包括第2列)。
ax1 = Fig.add_subplot(gs[0, 0:2]) # 也可以这样子 gs[0, :],代表第一行整行。
ax1.plot(x_data, np.tan(x_data))
ax1.spines['right'].set_color('none')
ax1.spines['top'].set_color('none')
ax1.spines['bottom'].set_position(('data', 0))
ax1.spines['left'].set_position(('data', 0))
ax1.set_title('正切曲线')
# 指定在第2行,第1列绘制。
ax2 = Fig.add_subplot(gs[1, 0])
ax2.plot(x_data, np.sin(x_data))
ax2.spines['right'].set_color('none')
ax2.spines['top'].set_color('none')
ax2.spines['bottom'].set_position(('data', 0))
ax2.spines['left'].set_position(('data', 0))
ax2.set_title('正弦曲线')
# 指定在第2行,第2列绘制。
ax3 = Fig.add_subplot(gs[1, 1])
ax3.plot(x_data, np.cos(x_data))
ax3.spines['right'].set_color('none')
ax3.spines['top'].set_color('none')
ax3.spines['bottom'].set_position(('data', 0))
ax3.spines['left'].set_position(('data', 0))
ax3.set_title('余弦曲线')
plt.show()
import matplotlib.pyplot as plt
import random
# 修改全局字体。
plt.rcParams['font.sans-serif'] = ['simsun']
x_data = [i for i in range(10)]
y_data = [random.randint(10,100) for i in range(10)]
x_data2 = [i for i in range(1,10)]
y_data2 = [random.randint(10,100) for i in range(9)]
"""plt.plot()绘制图形后,返回的结果是一个包涵绘制图形对象的列表。
这里只画了一条线,所以只要用一个 解包 的方法就能获取该线条。"""
ln1, = plt.plot(x_data, y_data, # x, y 坐标
color='red', # 线条颜色
linewidth = 2, # 线条粗细
linestyle='dotted', # 线条类型。'solid', 'dashed', 'dashdot'
label='年级1' # 对应图例的名称。
)
ln2, = plt.plot(x_data2, y_data2,
'b-.', # 另外一种设置线形的方法, b 颜色, -.线型。
label='年级2')
plt.legend(loc='lower right')
""" plot()可以一次性画多条线,所以也可以这样。 """
# ln1, ln2 = plt.plot(x_data, y_data, x_data2, y_data2)
# ln1.set(color='red', linewidth = 2, linestyle='dotted',label='年级1')
# ln2.set(color='blue', linewidth = 1, linestyle='-.',label='年级2')
# plt.legend(loc='lower right')
plt.xlabel('年份') # 设置x轴名称
plt.ylabel('成绩') # 设置Y轴名称
plt.title('历年成绩', fontsize=20) # 设置标题名称
# 把 y 轴的标签由数值改为对应的字符串。
plt.yticks([60, 80, 90], ['及格', '良好', '优秀'])
# 设置x, y 轴的数值范围。前面两个数为 x轴的最小和最大值,……。
plt.axis([0,11, 0,100])
plt.show()
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['simsun'] # 设置全局字体
plt.rcParams['axes.unicode_minus'] = False
# 随机生成5个 [10 , 81) 之间的整数
# data = np.random.randint(10, 81, 5)
# print(list(data))
y_data = [26, 59, 85, 70, 28]
y_data2 = [50, 47, 78, 11, 63]
x_data = list(range(1, 6))
x_data1 = np.array(x_data) - 0.2
x_data2 = np.array(x_data) + 0.2
# 画柱状图
plt.bar(x_data1, y_data,
color='red', # 颜色
bottom=None, # y轴, 坐标的起始值(终止值为 bottom值加数据值),参考下面的水平柱状图。
align='center' # 柱状图与坐标的对齐方式。
width=0.4) # 柱子的宽度。
# 再画一个柱状图,得控制好x轴的位置,防止重叠。
plt.bar(x_data2, y_data2,
width=0.4)
# 在柱状图的顶部插入文字
for x, y in enumerate(y_data, start=1):
plt.text(x-0.2, y+2, f'值:{y}', ha='center', va='bottom',
bbox={'facecolor': 'yellow', 'alpha': 0.2})
for x, y in enumerate(y_data2, start=1):
plt.text(x+0.2, y+2, f'值:{y}', ha='center', va='bottom',
bbox={'facecolor': 'yellow', 'alpha': 0.2})
plt.show()
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['simsun'] # 设置全局字体
plt.rcParams['axes.unicode_minus'] = False
# 随机生成5个 [10 , 81) 之间的整数
# data = np.random.randint(10, 81, 5)
# print(list(data))
y_data = list(range(1,6))
data = [26, 59, 85, 70, 28]
plt.barh(y=y_data, # y 轴坐标
width=data, # x 轴坐标
height=0.5, # 柱子的宽度。
color='steelblue',
left=10, # x轴, 坐标的起始值(如: 源数据值为70, 那柱状图就会从10到80),。
align='center', # 柱子的对齐方式, 'center':柱子中间对齐y坐标。
)
plt.show()
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimSun'] # 指定默认字体为新宋体。
plt.rcParams['axes.unicode_minus'] = False # 解决保存图像时 负号'-' 显示为方块和报错的问题。
# 定义从-pi到pi之间的数据,平均取64个数据点
x_data = np.linspace(-np.pi, np.pi, 64)
# 将整个figure分成两行两列,第三个参数表示该图形放在第1个网格
# 沿着正弦曲线绘制散点图
plt.scatter(x_data, np.sin(x_data),
c='purple', # 设置点的颜色
s=50, # 设置点半径
alpha=0.5, # 设置透明度
marker='p', # 设置使用五边形标记
linewidths=1, # 设置边框的线宽
edgecolors=['green', 'yellow']) # 设置边框的颜色,绿色、黄色间隔
# plt.scatter(x_data, np.sin(x_data), cmap=plt.get_cmap('rainbow'), ) # cmap也可以设置点的颜色
# 绘制第二个散点图(只包含一个起点),突出起点
plt.scatter(x_data[0], np.sin(x_data)[0],
c='red', # 设置点的颜色
s=150, # 设置点半径
alpha=1) # 设置透明度
# 绘制第三个散点图(只包含一个结束点),突出结束点
plt.scatter(x_data[63], np.sin(x_data)[63],
c='black', # 设置点的颜色
s=150, # 设置点半径
alpha=1) # 设置透明度
plt.gca().spines['right'].set_color('none')
plt.gca().spines['top'].set_color('none')
plt.gca().spines['bottom'].set_position(('data', 0))
plt.gca().spines['left'].set_position(('data', 0))
plt.title('正弦曲线的散点图')
plt.show()
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['simsun'] # 设置全局字体
plt.rcParams['axes.unicode_minus'] = False
# 随机生成5个 [10 , 81) 之间的整数
# data = np.random.randint(10, 81, 5)
data = [26, 59, 79, 75, 28]
labels = ['a', 'b', 'c', 'd', 'e'] # 定义各数据对应的标签内容。
explode = [0, 0.1, 0, 0, 0]
colors = ['red', 'pink', 'magenta', 'purple', 'orange']
# print(help(plt.pie))
plt.pie(x=data, # 数据源
labels=labels, # 数据源对应的标签
labeldistance=1.2, # 设置标签与圆心的距离(1刚好位于半径处)
colors=colors, # 设置饼图的自定义填充色。
shadow=True, # 是否添加阴影。
explode=explode, # 突出显示。值为0~1,表示剥离开的距离。
autopct='%.3f%%', # 显示各项的百分比,.3f 保留3位小数。
pctdistance=0.7, # 设置 百分比标签 与圆心的距离
startangle=90, # 设置饼图的初始角度。逆时针旋转90度。
counterclock=False, # 是否为逆时针,这里设为False 则表示为顺时针。
center=(0.5, 0.5), # 设置饼图的圆心坐标位置, 默认(0,0)。
radius=0.4, # 设置饼图的半径.
textprops={'fontsize': 16,
'color': 'black'}, # 设置文本的属性。
wedgeprops={'linewidth': 2,
'edgecolor': 'green'}, # 设置饼图内外边界的属性值
frame=True) # 是否显示画布的外框。
# plt.xlim([0,10]) # 可自定义坐标值,那么上面的 圆心和半径值得重新设置。
plt.title('饼图')
plt.show()
直方图可以用做样本分布统计,它由竖立在x轴上的多个相邻的矩形组成,
每个矩形的高度跟落在其所对应的x轴中的元素数量成正比。
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['simsun'] # 设置全局字体
plt.rcParams['axes.unicode_minus'] = False
# data = np.random.randint(1, 101, 100)
# print(list(data))
data = [10, 8, 39, 49, 14, 51, 3, 71, 78, 46, 54, 53, 45, 51, 39, 81, 62,
63, 79, 2, 35, 22, 57, 69, 89, 39, 63, 85, 72, 22, 53, 31, 48, 50,
5, 74, 38, 55, 73, 88, 18, 42, 79, 69, 1, 87, 65, 8, 46, 65, 16,
12, 38, 34, 39, 72, 51, 65, 91, 62, 53, 69, 66, 89, 39, 8, 54, 3,
28, 51, 75, 3, 43, 95, 15, 27, 99, 45, 29, 64, 63, 34, 79, 63, 35,
39, 62, 97, 89, 85, 18, 19, 87, 57, 79, 45, 95, 96, 28, 93]
print(len(np.where((np.array(data) > 65) & (np.array(data) <= 70))[0]))
# hist() 函数返回三个数据。
# n 为 处于 bins 值范围内的数据的个数。
n, bins, patches = plt.hist(data, # 数据源
bins=20) # 把数据源切分成20份。
plt.grid(True)
plt.xticks([i for i in range(0, 101, 10)])
plt.xlim([0, 100])
print(n, bins, patches)
plt.show()