Python绘图工具Matplotlib进阶教程(二)
Matplotlib 散点图
使用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: 长度相同的numpy数组,分别对应x轴和y轴的坐标
s: 点的大小,默认20,也可以是数组,数组每个元素对应点的大小
c: 点的颜色,默认蓝色’b’,也可以是RGB或RGBA二维数组,或0-100的数字数组(配合cmap参数来使用)
marker: 点的样式,默认小圆圈’o’,其余值参考上一篇plot方法的参数
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::其他参数。
示例1
import matplotlib.pyplot as plt
import numpy as np
x = np.array(range(10))
y = np.array([1, 4, 9, 16, 7, 11, 23, 30, 28, 15])
# 点的大小
s = np.array([10, 20, 30, 40, 50, 60, 70, 80, 10, 40])
# 点的颜色
c = np.array(['red', 'green', 'yellow', 'gray', 'pink', 'blue', 'black', 'beige', 'orange', 'purple'])
plt.scatter(x, y, s, c=c, marker='o', alpha=0.5)
plt.show()

示例2
import matplotlib.pyplot as plt
import numpy as np
# 随机数生成器的种子
np.random.seed(19680801)
N = 50
x = np.random.rand(N)
y = np.random.rand(N)
# 点的大小
area = (30 * np.random.rand(N)) ** 2
# 点的颜色
colors = np.random.rand(N) * 100
plt.scatter(x, y, s=area, c=colors, marker='o', cmap='Set1', alpha=0.5)
plt.show()

Matplotlib 柱形图
使用pyplot中的bar()方法来绘制水平柱形图,barh()方法来绘制垂直方向的柱形图
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’。
color: 参考散点图中的传参
**kwargs::其他参数。
示例1
import matplotlib.pyplot as plt
import numpy as np
# 设置字体
plt.rcParams['font.family'] = ['Microsoft YaHei']
x = np.array(['1990年', '1991年', '1992年', '1993年', '1994年', '1995年', '1996年', '1997年', '1998年', '1999年', '2000年'])
y = np.array([1.89, 2.21, 2.73, 3.58, 4.89, 6.16, 7.22, 8.02, 8.59, 9.14, 10.13])
# 设置y轴的标题
plt.ylabel("单位(万亿元)")
# 设置x轴下标的倾斜度
plt.xticks(rotation=-45)
# 设置图标的标题
plt.title("90年代中国GDP")
# 绘图
plt.bar(x, y)
plt.show()

Matplotlib 饼图
用pyplot中的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]
参数说明:
wedges:一个包含扇形对象的列表。texts:一个包含文本标签对象的列表。autotexts:一个包含自动生成的文本标签对象的列表。示例
import matplotlib.pyplot as plt
# 设置字体
plt.rcParams['font.family'] = ['Microsoft YaHei']
# 数据
x = [29.20, 19.40, 15.10, 14.60, 11.40, 10.30]
# 饼图标签
labels = ['华为', 'VIVO', '苹果', 'OPPO', '小米', '荣耀']
# 突出显示
explode = (0.1, 0, 0, 0, 0, 0)
# 饼图的颜色
colors = ['yellowgreen', 'gold', 'lightskyblue', 'lightcoral', 'gray', 'purple']
# 标题
plt.title("中国市场手机品牌占比")
plt.pie(x, labels=labels, explode=explode, shadow=True, startangle=90, colors=colors)
plt.show()

Matplotlib 直方图
用pyplot中的hist()方法来绘制直方图,直方图跟其他图不一样,有统计的效果。比如入参数据是一个班级某一门课程的成绩集合,它会把这些数据进行一个统计,50-60分的学生数,60-70分的学生成绩数等等
matplotlib.pyplot.hist(x, bins=None, range=None, density=False, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None, log=False, color=None, label=None, stacked=False, **kwargs)
参数说明:
x:表示要绘制直方图的数据,可以是一个一维数组或列表。bins:可选参数,表示直方图的箱数。默认为10。range:可选参数,表示直方图的值域范围,可以是一个二元组或列表。默认为None,即使用数据中的最小值和最大值。density:可选参数,表示是否将直方图归一化。默认为False,即直方图的高度为每个箱子内的样本数,而不是频率或概率密度。weights:可选参数,表示每个数据点的权重。默认为None。cumulative:可选参数,表示是否绘制累积分布图。默认为False。bottom:可选参数,表示直方图的起始高度。默认为None。histtype:可选参数,表示直方图的类型,可以是’bar’、‘barstacked’、‘step’、‘stepfilled’等。默认为’bar’。align:可选参数,表示直方图箱子的对齐方式,可以是’left’、‘mid’、‘right’。默认为’mid’。orientation:可选参数,表示直方图的方向,可以是’vertical’、‘horizontal’。默认为’vertical’。rwidth:可选参数,表示每个箱子的宽度。默认为None。log:可选参数,表示是否在y轴上使用对数刻度。默认为False。color:可选参数,表示直方图的颜色。label:可选参数,表示直方图的标签。stacked:可选参数,表示是否堆叠不同的直方图。默认为False。**kwargs:可选参数,表示其他绘图参数。示例
import matplotlib.pyplot as plt
import numpy as np
# 绘制一个09级学生的物理期末考试成绩直方图
# 设置字体
plt.rcParams['font.family'] = ['Microsoft YaHei']
# 成绩数据集
data = np.array(
[45, 48, 52, 54, 54, 56, 60, 62, 64, 68, 68, 70, 72, 75, 77, 78, 79, 80, 80, 80, 84, 85, 86, 87, 88, 90, 95,
98, 100])
# 因为学生成绩从40-100分中分布,所以用range指定数据返回,每10分做一个汇总,bins箱数设置成6
plt.hist(data, bins=6, range=(40, 100), color='gray',histtype='stepfilled')
plt.title("09级学生物理期末考试成绩")
plt.xlabel("考试分数")
plt.ylabel("人数")
plt.show()

作者:linlin_1998