1.使用pyplot 的 hist() 函数可以快速绘制直方图,hist() 函数语法格式如下
hist(x, bins=None, range=None, density=None, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None, log=False, label=None, stacked=False, normed=None, *,data=None, **kwargs)
该函数常用参数如下
x: 作直方图的X轴数据,必须是一维数组。多维数组可以先进行扁平化再作图
bins: 直方图的柱数,可选项,默认为10
range:表示数据的范围,若没有提供则默认为(x.min(),x.max())
normed: 是否将得到的直方图向量归一化。默认为0
facecolor: 直方图颜色
alpha: 透明度
histtype: 直方图类型,‘bar’, ‘barstacked’, ‘step’, ‘stepfilled’
edgecolor: 直方图边框颜色
例 需求一: 另外再生成一个包含20000个数据的标准正态分布数组,并在同一个绘图区域并排展示 import matplotlib.pyplot as plt import numpy as np # 1.生成10000个随机数 random_state1 = np.random.RandomState(19680801) random_x1 = random_state1.randn(10000) # 2.生成20000个随机数 #################################### #################################### # 3.绘制包含25个矩形条的两组直方图(并排展示) #################################### #################################### # 4.展示图表 plt.show() 示例代码如下
import matplotlib.pyplot as plt
import numpy as np
#导入模块
random_state1 = np.random.RandomState(19680801)
random_x1 = random_state1.randn(10000)
random_state1 = np.random.RandomState(19680801)
random_x2 = random_state1.randn(20000)
#插入数据
plt.hist([random_x1,random_x2],bins=25,facecolor='r')
#作图
plt.show()
运行结果如图所示
2.使用pyplot 的 pie() 函数可以快速绘制饼图或环形图,pie() 函数语法格式如下
pie(x, explode=None, labels=None, autopct=None, pctdistance=0.6, shaow=False, labeldistance=1.1, startangle=None, radius=None, counterclock=True, wedgeprops=None, textpropos=None, center=(0, 0), frame=False, *, data=None)
pie()函数的参数如下:
x:各个饼块的尺寸。类1维数组结构。
explode:每个饼块相对于饼圆半径的偏移距离,取值为小数。类1维数组结构。默认值为None。
labels:每个饼块的标签。字符串列表。默认值为None。
colors:每个冰块的颜色。类数组结构。**颜色会循环使用。**默认值为None,使用当前色彩循环。
autopct:饼块内标签。None或字符串或可调用对象。默认值为None。如果值为格式字符串,标签将被格式化,如果值为函数,将被直接调用。
pctdistance:饼块内标签与圆心的距离。浮点数。默认值为0.6,autopct不为None该参数生效。
shadow:饼图下是否有阴影。布尔值。默认值为False。
labeldistance:饼块外标签与圆心的距离。浮点值或None。默认值为1.1。如果设置为None,标签不会显示,但是图例可以使用标签。
startangle:饼块起始角度。浮点数。默认值为0,即从x轴开始。角度逆时针旋转。
radius:饼图半径。浮点数。默认值为1.
counterclock:角度是否逆时针旋转。布尔值。默认值为True。
wedgeprops:饼块属性。字典。默认值为None。具体见matplotlib.patches.Wedge 。
textprops:文本属性。字典。默认值为None。
center:饼图中心坐标。(float,float)浮点数二元组。默认值为(0,0)。
frame:是否绘制子图边框。布尔值。默认为False。
rotatelabels:饼块外标签是否按饼块角度旋转。布尔值。默认为False。
normalize:是否归一化。布尔值或None。默认值为None。
True:完全饼图,对x进行归一化,sum(x)==1。
False:如果sum(x)<=1,绘制不完全饼图。如果sum(x)>1,抛出ValueError异常。
None:如果sum(x)>=1,默认值为True。如果sum(x)<1,默认值为False。
绘制不完全饼图,需要明确传递normalize=False。
pie()的返回值为三元组。
patches :matplotlib.patches.Wedge对象序列。类型为列表。
texts:外标签Text对象列表。类型为列表。
autotexts:只有autopct属性不为None才会返回值,饼块内标签Text对象列表。类型为列表
代码示例如下
import matplotlib.pyplot as plt
plt.rcParams['font.family']='SimHei'
x = [1, 5, 4, 3]
labels = ['a', 'b', 'c', 'd']
explode = [-0.1, 0, 0.1, 0]
colors =['r','b']
# 子图1,显示默认属性情况,为与子图2对比,添加了外标签
plt.subplot(241)
plt.pie(x, labels=labels)
plt.title('默认属性')
# 子图2,演示外标签相关属性
plt.subplot(242)
plt.pie(x, labels=labels,labeldistance=1.2,rotatelabels=True)
plt.title('外标签相关属性')
# 子图3,演示内标签相关属性,起始角度设置为30
plt.subplot(243)
plt.pie(x, autopct='%1.1f%%',pctdistance=0.4,startangle=30)
plt.title('内标签相关属性')
# 子图4,演示饼块分离、颜色循环、阴影
plt.subplot(244)
plt.pie(x, explode=explode, colors=colors,shadow=True)
plt.title('饼块分离、颜色循环')
# 子图5,演示修改饼图半径、角度顺时针旋转
plt.subplot(245)
plt.pie(x, radius=1.2,counterclock=False)
plt.title('修改半径、顺时针')
# 子图6,演示normalize为默认值None
plt.subplot(246)
x = [0.1, 0.2, 0.2, 0.3]
plt.pie(x)
# normalize为默认值None,这时sum(x)<1,相当于normalize=Fasle
# 运行时会有警告,因为未来版本默认normalize=True
# 建议绘制不完全饼图使用plt.pie(x,normalize=Fasle)
plt.title('normalize=None')
# 子图7,演示normalize为True,这时虽然sum(x)<1,但是会强制归一化,绘制完全饼图
plt.subplot(247)
x = [0.1, 0.2, 0.2, 0.3]
plt.pie(x,normalize=True)
plt.title('normalize=True')
# 子图8,演示normalize为False,这时sum(x)<1,绘制不完全饼图
plt.subplot(248)
x = [0.1, 0.2, 0.2, 0.3]
plt.pie(x,normalize=False)
plt.title('normalize=False')
plt.show()
运行结果如下图所示
2.1环形图与饼图类似
饼图示例代码如下
import numpy as np
import matplotlib.pyplot as plt
data = np.array([20, 50, 10, 15, 30, 55])
pie_labels = np.array(['A', 'B', 'C', 'D', 'E', 'F'])
# 绘制饼图 :半径为0.5, 数值保留1位小数
plt.pie(data, radius=1.5, labels=pie_labels, autopct='%3.1f%%')
plt.show()
环形图示例代码如下
#导入模块
import numpy as np
import matplotlib.
plt.pie(data, radius=1.5, labels=pie_labels, wedgeprops={'width': 0.7},
autopct='%3.1f%%', pctdistance=0.75)
#圆环图 :外圆半径为1.5, 楔形宽度为0.7
pyplot as plt
#插入数据
data = np.array([20, 50, 10, 15, 30, 55])
pie_labels = np.array(['A', 'B', 'C', 'D', 'E', 'F'])
# 绘制
plt.show()
实操代码示例
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False
# 外侧说明文字
kinds = ['购物', '人情往来', '餐饮美食', '通信物流', '生活日用', '交通出行', '休闲娱乐', '其他']
# 数据
money_scale = [1000, 100, 800, 200, 300, 200, 20, 200]
# 爆炸程度
dev_position = [0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]
plt.pie(money_scale, labels=kinds, wedgeprops={'width':0.7},autopct='%3.1f%%',pctdistance=0.75,shadow=True,explode=dev_position,startangle=90,radius=1.5)
plt.show()
运行结果如图所示
3.使用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([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()
气泡图示例代码如下
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()
实操代码训练——将气泡大小从小到大排列
# matplotlib中文网 https://www.matplotlib.org.cn/intro/ # 需求一: 将散点图绘制成气泡图,气泡从左到右越来越大 # 需求二: 将所有气泡设置为橙色 import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = 'SimHei' plt.rcParams['axes.unicode_minus'] = False # 准备 x 轴和 y 轴的数据 x_speed = np.arange(10, 210, 10) y_distance = np.array([0.5, 2.0, 4.4, 7.9, 12.3, 17.7, 24.1, 31.5, 39.9, 49.2, 59.5, 70.8, 83.1, 96.4, 110.7, 126.0, 142.2, 159.4, 177.6, 196.8] # 绘制气泡图 ################################################### ################################################### # 展示图表 plt.show()
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
# 准备 x 轴和 y 轴的数据
x_speed = np.arange(10, 210, 10)
y_distance = np.array([0.5, 2.0, 4.4, 7.9, 12.3,
17.7, 24.1, 31.5, 39.9, 49.2,
59.5, 70.8, 83.1, 96.4, 110.7,
126.0, 142.2, 159.4, 177.6, 196.8])
# 绘制气泡图
plt.scatter(x_speed,y_distance,c='orange',alpha=0.5)
# 展示图表
plt.show()
4.使用pyplot 的 errorbar() 函数可以快速绘制误差棒图,errorbar() 函数语法格式如下
matplotlib.pyplot.errorbar(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:主要定于二维数据的横纵坐标值
yerr :定义y轴方向的误差棒的大小,可以是一个数,也可以是二维数组(分别传递平均值与最小值的差和最大值与平均值的差)。
xerr:定义y轴方向的误差棒的大小,同样也可以是一个数,也可以是二维数组。
fmt:定义数据折线和数据点的样式。
ecolor:定义误差棒的颜色。
elinewidth:定义误差棒线的宽度。
capsize:定义误差棒帽的大小(长度)。
capthick:定义误差棒帽的宽度。
alpha:设置透明度(范围:0-1)。
marker:设置数据点的样式
markersize(简写ms):定义数据点的大小。
markeredgecolor(简写mec):定义数据点的边的颜色,可使用官方提供的缩写字母代表的简单颜色,也可以使用RGB颜色和HTML十六进制#aaaaaa格式的颜色(具体可参考matplotlib.colors)。
markeredgewidth( 简写mew ):定义数据点的边的宽度。
markerfacecolor(简写 mfc):定义数据点的颜色。
linestyle:设置折线的样式,设置成none可将折线隐藏。
label:添加图例。
示例代码如下
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(5)
y = (25, 32, 34,25,20)
y_offset = (3,5,2,3,3)
plt.errorbar(x,y,y_offset,capsize=3,capthick=2)
plt.show()