python绘图——matplotlib

plot、scatter

用法

我用matlab期间几乎只用到了这两种图:

  • plot:线型图
  • scatter:散点图

使用前:

import matplotlib.pyplot as plt

使用:

plt.plot(x, y)
plt.scatter(x, y)

除了带了个前缀,和matlab里绘图也没啥差别。

举例

a=1
b=0
x = torch.linspace(-1, 1, 100)
y = a*x.pow(2)+b+0.1*torch.rand(x.size())
plt.scatter(x, y)  # 待拟合数据
plt.plot(x, y)

在这里插入图片描述在这里插入图片描述

丰富图像

线型图

plt.plot(x, y, "r--o")

线条颜色
  1. “b”:指定绘制的线条颜色为蓝色。

  2. “g”:指定绘制的线条颜色为绿色。

  3. “r”:指定绘制的线条颜色为红色。

  4. “c”:指定绘制的线条颜色为蓝绿色。

  5. “m”:指定绘制的线条颜色为洋红色。

  6. “y”:指定绘制的线条颜色为黄色。

  7. “k”:指定绘制的线条颜色为黑色。

  8. “w”:指定绘制的线条颜色为白色。

参数点形状
  1. o:指定标记实际点使用的形状为圆形。

  2. *:指定标记实际点使用“*”符号。

  3. +:指定标记实际点使用“+”符号。

  4. x:指定标记实际点使用“x”符号。

线条形状
  1. -:指定线条形状为实线。
  2. --:指定线条形状为虚线。
  3. -.:指定线条形状为点实线。
  4. ::指定线条形状为点线。
x = torch.randn(30)
y = torch.randn(30)
plt.plot(x, 'r--*')
plt.plot(y, 'b:o')  # python默认画在同一张图中

在这里插入图片描述
这个输出的图片质量确实比matlab要好。

标签和图例
x = torch.randn(30)
y = torch.randn(30)
p1, = plt.plot(x, 'r--*')
p2, = plt.plot(y, 'b:o')  # 为了使用图例必须给每个绘图加上名字(matlab里是不是叫句柄?),而且名字后面得加一个英文逗号","
plt.title("test")  # 图名
plt.xlabel("x")  # 
plt.ylabel("y")  # x、y轴标签
plt.legend([p1, p2], ["x", "y"])  # 图例
plt.show()

在这里插入图片描述

子图
plt.figure()  # 先用这个定义一个实例(就像matlab里的figure)
plt.subplot(121)  # 第1张子图
p1, = plt.plot(x, 'r--*')
plt.subplot(122)  # 第2张子图
p2, = plt.plot(y, 'b:o')

在这里插入图片描述

也可以加上分别加上标签等:

plt.figure()  # 先用这个定义一个实例(就像matlab里的figure)
plt.subplot(121)  # 第1张子图
p1, = plt.plot(x, 'r--*')
plt.title("subplot1")
plt.xlabel("x")
plt.ylabel("y")  # 位置放前放后都可以
plt.subplot(122)  # 第2张子图
p2, = plt.plot(y, 'b:o')
plt.title("subplot2")
plt.xlabel("x")
plt.ylabel("y")  # 位置放前放后都可以

在这里插入图片描述

不过好像有点错位~

散点图

和线形图有几点区别:

  • 前面线形图可以只输入纵轴数据,横轴默认是从1~N,但scatter不行,必须x和y一起输入;
  • 丰富图像也不能在后面直接用“xxx”,必须挨个儿指定,具体见下文。
plt.scatter(x, y, c='r', marker='o', label="(x,y)") 
plt.title("scatter")
plt.xlabel("x")
plt.ylabel("y")
plt.legend(loc=2)  # 指定图例的位置

在这里插入图片描述

  • c——点的颜色
  • marker——点的形状
  • label——图例,label这种直接写在绘图语句里面的用法也可以用于plot
  • plt.legend(loc=2)——设定图例的位置,没有这条语句,scatter里面设定的label不会生效!!
    • “loc=0”:图例使用最好的位置。
    • “loc=1”:强制图例使用图中右上角的位置。
    • “loc=2”:强制图例使用图中左上角的位置。
    • “loc=3”:强制图例使用图中左下角的位置。
    • “loc=4”:强制图例使用图中右上角的位置。

小结

两种绘图指令有相同之处又有不同之处,而且达到同一种效果可能有多种方式。但是这不是我们工作的重点,只要有一种自己惯用的方式,能满足基本需求即可。有特殊需求临时查即可。

直方图

plt.hist(x, bins=30, color="g")
  • bins=30,指定条纹数,默认是10
  • color,指定条纹颜色

在这里插入图片描述

饼图

labels = ["Dogs", "Cats", "Birds"]
sizes = [30, 40, 30]
plt.pie(sizes, explode=(0, 0, 0.1), labels=labels, autopct='%1.1f%%', startangle=90)
plt.axis('equal')

在这里插入图片描述

说明:

  • sizes= [15, 50, 35]的三个数字确定了每部分数据系列在整个圆形中的占比;
  • explode定义每部分数据系列之间的间隔,如果设置两个0和一个0.1,就能突出第3部分;
  • autopct是将 sizes中的数据以所定义的浮点精度进行显示;
  • startangle是绘制第1块饼图时该饼图与X轴正方向的夹角度数,这里设置为90,默认为0;
  • plt.axis('equal')是必不可少的,用于使X轴和Y轴的刻度保持一致,只有这样,最后得到饼图才是圆形的。

总结

  • 绘图只是程序最终结果的形象展示,除非是用在论文报告里,一般的图只要能起到展示作用即可,不用多么精美绝伦,所以只要掌握一种自己常用的绘图方式即可;
  • 这种东西就像字典一样,不用时刻记在心里,等到需要了,临时查也无妨,用得多了,自然也就记住了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值