matplotlib(上)

  使用这个matplotlib,需要提前安装好这个绘图工具包。可以在安装好的python环境中安装,也可在jupyter上安装。
  今天以绘制时间气温图为例,我们由浅至深统计图的绘制(函数图这里暂时不讲)。

1 最简单的折线图

  假设一天中每隔两个小时(range(2,26,2))的气温(℃)分别是[15,13,14.5,17,20,25,26,26,27,22,18,15]

from matplotlib import pyplot as plt

x = range(2,26,2)
y = [15,13,14.5,17,20,25,26,26,27,22,18,15]
plt.plot(x, y)
plt.show()

  输出
在这里插入图片描述

2 指定图像大小与刻度

  我们希望,能指定生成图像的大小,那么这里可以使用plt.figure()函数,在该函数中指定图像的大小。
  plt.figure(figsize=(a, b), dpi=dpi)
  figsize 设置图形的大小,a 为图形的宽, b 为图形的高,单位为英寸,dpi 为设置图形每英寸的点数。在plt.figure()后面的命令,都在figure1中,直到下一条figure命令出现,新开启一张图像(figure2)。
  由于我们指定x从2到24,所以我们希望横坐标以2位刻度,使用plt.xticks()函数,括号内为可迭代对象。

from matplotlib import pyplot as plt

y = [15,13,14.5,17,20,25,26,26,27,22,18,15]

# 设置图像大小
plt.figure(figsize=(10, 4), dpi=80)
# 10英寸宽,5英寸高,输出分辨率为80(每英寸上可产生的点数)
# 在本程序中,figure函数只出现一次,因此绘制的图形都在figure1中

# 设置x轴的刻度
_xtick_labels = range(2, 26, 2)
plt.xticks(_xtick_labels)

# 绘图
plt.plot(_xtick_labels, y)
plt.show()

  输出
在这里插入图片描述
  同理,也能调整y轴上的刻度,经常使用这个命令:plt.yticks(range(min(y),max(y)+1)),即先筛选出纵坐标的最大值和最小值,然后生成可迭代对象。

3 添加标签与描述信息

  如果已知10时-11时之间每分钟的温度,要绘制这段时间的温度变化图,且横坐标边需要每五分钟加显示刻度信息,即如下形式:

在这里插入图片描述
  要显示刻度描述信息,则需要增加在plt.xticks()添加刻度参数,图中刻度描述信息是斜的,则需设置rotation参数

from matplotlib import pyplot as plt
import random

plt.figure(figsize=(10, 4))
x = range(60)
y = [random.randint(20, 35) for i in range(60)]
# 列表生成式,前面的表达式没有i,那么i仅仅是计数,表示循环生成60次

plt.plot(x, y)
_x_ticks = ["10点{}分".format(i) for i in range(60)]

# 取步长,数字和字符串一一对应,数据的长度一样,才能显示字符串
plt.xticks(x[::5], _x_ticks[::5], rotation=45) # rotation表示字符串的旋转角度

plt.show()

  输出
在这里插入图片描述
  可以看到,图像无法显示中文。
  由于matplotlib默认不支持中文字符,默认的英文字体无法显示汉字。如果要显示汉字,可以通过以下两行代码实现:

plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

在这里插入图片描述
  修改后的绘图程序为:

from matplotlib import pyplot as plt
import random
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

plt.figure(figsize=(10, 4))
x = range(60)
y = [random.randint(20, 35) for i in range(60)]
# 列表生成式,前面的表达式没有i,那么i仅仅是计数,表示循环生成60次

plt.plot(x, y)
_x_ticks = ["10点{}分".format(i) for i in range(60)]

# 取步长,数字和字符串一一对应,数据的长度一样,才能显示字符串
plt.xticks(x[::5], _x_ticks[::5], rotation=45) # rotation表示字符串的旋转角度

plt.show()

  输出
在这里插入图片描述

4 添加图片标题,坐标轴标签

  在plt.show()之前加上这么几句

plt.xlabel("时间")
plt.ylabel("温度 单位(℃)")
plt.title("10点到12点每分钟的气温变化情况")

  输出
在这里插入图片描述

5 图像保存

  将上述图像保存为“t1.png”,只需执行如下代码:

plt.savefig("./t1.png")
# 如果写成 plt.savefig("./t1.svg") 则保存的为矢量图

需要注意的是,图像保存命令plt.savefig必须用在plt.show前面,否则保存的图像将会是空白,因为plt.show()会将画布刷新

6 练习

  假设大家在30岁的时候,根据自己的实际情况,统计出来了从11岁到30岁每年交的女(男)朋友的数量如列表a,请绘制出该数据的折线图,以便分析自己每年交女(男)朋友的数量走势
a = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
  要求:
    y轴表示个数
    x轴表示岁数,比如11岁,12岁等
  要有坐标轴标签、要有标题,图像保存到程序所在目录,命名为“男女朋友数量.png”。
  代码:

a = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
x = range(11, 31)
plt.figure(figsize=(10, 4))
plt.plot(x, a)
plt.yticks(range(min(a), max(a)+1))
plt.xticks(x)
plt.title("11-30岁每年交的男女朋友数量")
plt.ylabel("单位:个")
plt.xlabel("年龄")
plt.savefig('./男女朋友数量.png')
plt.show()

  输出
在这里插入图片描述

7 多线条

  如果想在一幅图里面显示多条线,该如何?
  必须两次调用plt.plot函数,同时指定线条的颜色,线性,宽度,透明度,标签等,并添加图例。

from matplotlib import pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']

a = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
b = [1,0,3,1,2,2,3,3,2,1 ,2,1,1,1,1,1,1,1,1,1]
x = range(11, 31)

plt.figure(figsize=(10, 4))

# label是给线条命名
plt.plot(x, a, color='r', linestyle='--', linewidth=5, label='自己')
plt.plot(x, b, color='g', linestyle='-',
         linewidth=3, label='同桌', alpha=0.5)
"""color是颜色,linestyle线型,linewidth线宽,label标签,alpha透明度"""

# 使用legend()自动生成图例,图例自动出现在左上角
# plt.legend()

# 如果不想让图例出现在左上角,可以在legend中插入loc参数
# loc='best'表示图例自动插入在图形中信息比较少的位置
plt.legend(loc='best')


plt.yticks(range(min(a), max(a)+1))
plt.xticks(x)
plt.title("11-30岁每年交的男女朋友数量")
plt.ylabel("单位:个")
plt.xlabel("年龄")
plt.savefig('./男女朋友数量.png')
plt.show()

  plt.plot()函数的常用参数如下
在这里插入图片描述
  颜色属性可以用十六进制数来表示,比如color=‘#00FF00’

  输出
在这里插入图片描述

7 绘制网格

# 绘制网格
plt.grid(alpha=0.4) # alpha是透明度
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值