人工智能系列7 Matplotlib 画图技术

绘制简单图形

import numpy as np
import matplotlib.pyplot as plt

# 解决中文显示问题
font = {'family' : 'SimHei', 'size' : '20'}
plt.rc('font', **font)

# 解决数字中负号显示问题
plt.rcParams['axes.unicode_minus'] = False

# 定义横坐标。生成 [-5, 5] 区间的 100 个点
x = np.linspace(-5, 5, 100)

# 定义纵坐标
y1 = -2 * x + 1

# 定义画布大小。(宽, 高)
plt.figure(figsize=(8, 5))

# 绘制图形
plt.plot(x, y1)

如果只要显示坐标轴的一部分,可以限制坐标轴的显示范围。

# 限制 x 轴的显示范围。可以显示坐标的一部分
plt.xlim((-2, 2))

# 限制 y 轴的显示范围
plt.ylim((-5, 5))

在绘制之前加入上述代码,可得如下图形。

定义坐标轴标签。

plt.xlabel('x轴')
plt.ylabel('y轴')


修改刻度显示。

plt.yticks([-7, -5, 0, 3, 8], ['北京', '天津', '河北', '东北', '山东'])


设置边框颜色。

# 设置边框的颜色。可以设置 top,bottom,left,right
ax = plt.gca()
ax.spines['left'].set_color('red')


不显示某条边框。

# 不设置颜色
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')


移动轴,使轴成为十字形。

ax = plt.gca()

# 隐藏顶部和右部
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')

# 将 x 轴作为坐标轴的底部
ax.xaxis.set_ticks_position('bottom')

# 将坐标轴底部的相对位置设为 0
ax.spines['bottom'].set_position(('data', 0))

# 将 y 轴作为坐标轴的左部
ax.yaxis.set_ticks_position('left')

# 将坐标轴左部的相对位置设为 0
ax.spines['left'].set_position(('data', 0))


显示图例。

plt.plot(x, y1, label='y = -2*x+1')

# 以最佳的位置显示图例
plt.legend(loc='best')


legend 的 loc 参数详细设置如下(loc 可传入 string,也可传入 code)。

在图中显示一段说明文字。

# 添加说明。参数含义分别为 x轴位置,y轴位置,说明文字,fontdict 字体设置
plt.text(1, 5, '这是一段说明', fontdict={'size': 16, 'color': 'r'})

绘制统计图形

柱状图

import numpy as np
import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [6, 10, 4, 5, 1]

plt.bar(
    # 柱体的标签值
    x,
    # 柱体的高度
    y,
    # align,设置柱体的相对 x 轴刻度的对齐方式。可选项:edge, center
    align='center',
    # 颜色
    color='b',
    # tick_label 刻度的值,用于替换刻度的显示
    tick_label=['A', 'B', 'C', 'D', 'E'],
    # 透明度,设置范围:[0, 1],越趋近于 0,越透明
    alpha=0.2
)

条形图

import numpy as np
import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [6, 10, 4, 5, 1]

plt.barh(
    # 柱体的标签值
    x,
    # 柱体的高度
    y,
    # align,设置柱体的相对 x 轴刻度的对齐方式。可选项:edge, center
    align='center',
    # 颜色
    color='b',
    # tick_label 刻度的值,用于替换刻度的显示
    tick_label=['A', 'B', 'C', 'D', 'E'],
    # 透明度,设置范围:[0, 1],越趋近于 0,越透明
    alpha=0.2
)

条形图的参数与柱形图完全一样,只是调用的函数不同。条形图就是将柱形图横过来放。

为条形图添加标签、网格。

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [6, 10, 4, 5, 1]

plt.barh(
    # 柱体的标签值
    x,
    # 柱体的高度
    y,
    # align,设置柱体的相对 x 轴刻度的对齐方式。可选项:edge, center
    align='center',
    # 颜色
    color='b',
    # tick_label 刻度的值,用于替换刻度的显示
    tick_label=['A', 'B', 'C', 'D', 'E'],
    # 透明度,设置范围:[0, 1],越趋近于 0,越透明
    alpha=0.2
)

# 标签设置
plt.xlabel('产品代号')
plt.ylabel('产品销量')

# 网格设置
plt.grid(True,
         # 轴设置。可选项:x, y, both
        axis='both',
         # 指定网格样式,比如 - -, *
        ls=':',
        # 指定颜色
        color='r',
        # 指定透明度
        alpha=0.8)

直方图

import numpy as np
import matplotlib.pyplot as plt

# 随机生成 [0,100) 100 个数
scores = np.random.randint(0, 100, 100)

# 柱体范围。range(0, 101, 10) 表示从 [0, 101) 取数,步长为 10 
bins = range(0, 101, 10)

# histtype:柱体填充类型。可选项:step(空心)、bar(实心)
plt.hist(x=scores, bins=bins, color='#3366FF', histtype='step')

plt.xlabel('Python考试成绩')
plt.ylabel('得分学生人数')

plt.show()


直方图与柱状图比较类似,它们的区别是直方图的每个柱体是相连的,而柱状图的每个柱体是独立的。

堆积图

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]

# 男性人数
y = [6, 10, 4, 5, 1]

# 女性人数
y1 = [2, 6, 7, 3, 4]

plt.figure(figsize=(8, 5))

# bottom=y1 表示 y1 在 y 的下面
plt.bar(x, y, align='center', bottom=y1, color='#66c2a5', tick_label=['A', 'B', 'C', 'D', 'E'], label='男')
plt.bar(x, y1, align='center', color='#8da0cb', label='女')

plt.xlabel('城市代号')
plt.ylabel('男女比例')

plt.legend()

饼图

import matplotlib.pyplot as plt

font = {'family' : 'SimHei', 'size' : '20'}
plt.rc('font', **font)

labels = ['第一季度', '第二季度', '第三季度', '第四季度']

# 对应每一季度销售额
sale = [20, 40, 30, 70]

# 饼图每一块颜色
colors = ['#FF3399', '#3399CC', '#FF3333', '#00CCCC']

# 边缘偏离半径的百分比。值越大,距离中心越远
explode = (0.1, 0.1, 0.1, 0.3)

plt.pie(sale,
       explode=explode,
       labels=labels,
        # 显示两位小数,以 % 结尾
       autopct='%.2f%%',
        # 逆时针旋转的角度
       startangle=30,
       shadow=True,
       colors=colors)
       
# 标题。loc:标题位置。可选项:left, center, right
plt.title('每一季度销售额', loc='center')
plt.show()

极线图

import numpy as np
import matplotlib.pyplot as plt

# 点的数量
bar_slices = 10

# 每个标记点所在射线与极径的夹角(级径:某一点到极点的距离。极点就是极坐标中的原点)
theta = np.linspace(0.0, 2*np.pi, bar_slices, endpoint=False)

# 随机生成极径
r = 30 * np.random.rand(bar_slices)

# marker: 标记图形,mfc:标记的颜色,ms:标记的大小
plt.polar(theta, r, color = 'chartreuse', linewidth=2, marker='*', mfc='b', ms=20)

散点图

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

x = np.random.randn(100)
y = np.random.randn(100)

# x 表示 x 轴的值、y 表示 y 轴的值
# s 表示散点大小。可选
# c 表示散点颜色。可选
# cmap 表示将浮点数映射成颜色的颜色映射表
# marker 表示散点图形,可以是*、△、o...。
plt.scatter(x, y, s=np.power(10*a + 20*b, 2),
           c=np.random.rand(100),
           marker='o')

棉棒图

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

# 生成 [0.5, 2π) 间均匀的 20 个数
x = np.linspace(0.5, 2*np.pi, 20)

# 生成 20 个符合标准正态分布的随机数
y = np.random.randn(20)

# x:指定棉棒在 x 轴基线上的位置
# y:棉棒的长度
# linefmt:棉棒的样式
# markerfmt:棉棒末端的样式
# basefmt:指定基线的样式
plt.stem(x, y, linefmt='--', markerfmt='o', basefmt='-')

箱体图

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

x = np.random.randn(1000)

plt.boxplot(x)


箱体图,即箱线图,从下到上五条线分别表示最小值、下四分位数、中位数、上四分位数和最大值。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jason说编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值