python绘图——matplotlib

文章目录

  • plot、scatter
    • 用法
    • 举例
    • 丰富图像
      • 线型图
        • 线条颜色
        • 参数点形状
        • 线条形状
        • 标签和图例
        • 子图
      • 散点图
    • 小结
  • 直方图
  • 饼图
  • 总结

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)

python绘图——matplotlib_第1张图片python绘图——matplotlib_第2张图片

丰富图像

线型图

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默认画在同一张图中

python绘图——matplotlib_第3张图片
这个输出的图片质量确实比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()

python绘图——matplotlib_第4张图片

子图

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

python绘图——matplotlib_第5张图片

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

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")  # 位置放前放后都可以

python绘图——matplotlib_第6张图片

不过好像有点错位~

散点图

和线形图有几点区别:

  • 前面线形图可以只输入纵轴数据,横轴默认是从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)  # 指定图例的位置

python绘图——matplotlib_第7张图片

  • 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,指定条纹颜色

python绘图——matplotlib_第8张图片

饼图

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')

python绘图——matplotlib_第9张图片

说明:

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

总结

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

你可能感兴趣的:(python,python)