python常用作图法

本文总结几个本人常用的作图方法。
数据是numpy形式,用matplotlib.pyplot作图。导入方式如下:

import numpy as np
import matplotlib.pyplot as plt

下面开始总结作图方法:
一、已知一堆点,画散点图或折线图
设已知数据为:a = [1,2,3,6,5,10]
画折线图:

a = np.array([1,2,3,6,5,10])

plt.figure()
plt.plot(a)
plt.show()

给数据加标签并指定颜色:

plt.ploy(a,label="a",color='blue')
plt.legend(loc="upper left")

给坐标轴加标签:

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

在这里插入图片描述

画散点图:
要注意plt.scatter()至少需要传入两个参数。原因在于:这里的散点图是二维平面上的散点图,二维平面上的点都是由两个坐标来确定的嘛。所以得传入横坐标和纵坐标值。这里,我们用python的迭代器enumerate来生成数组a对应的“坐标”。

a = np.array([1,2,3,6,5,10])
b = []

for i,aa in enumerate(a):
    b.append(i)

plt.figure()
plt.scatter(b,a)
plt.show()

在这里插入图片描述
如果说散点图中的点是逐个产生的话,那必然会遇到一个散点顺序的问题。这里有两个解决方案:1)既然是逐个产生那就逐个再生成他们的索引,使之成为一个数组,再用上面的散点图画就好了;2)用matplotlib.pyplot自带的函数。

a = np.array([1,2,3,6,5,10])
b = []
for i,aa in enumerate(a):
    b.append(i)

n = np.arange(len(b))
fig, ax = plt.subplots()
ax.scatter(b, a)
for i, txt in enumerate(n):
    ax.annotate(txt, (b[i], a[i]))
plt.show()

说实话,其实这段代码的 fig, ax=plt.subplots(); ax.annotate(txt,(b[i],a[i]))我也没怎么看懂。不过这最后跑出来的代码很符合我的需求,等到用的时候再学吧。曾尝试着把fig删掉,但会报错,因为plt.subplots()会返回两个参数,光靠ax收不完。至于ax.annotate大概就是在散点上标序号的作用。
在这里插入图片描述
二、在一个画布上画多个子图

a = np.array([1,2,3,6,5,10])
b = []
for i,aa in enumerate(a):
    b.append(i)
    
plt.figure()
plt.subplot(121)
plt.title('a')
plt.plot(a)
plt.subplot(122)
plt.title('b')
plt.plot(b)
plt.show()

在这里插入图片描述
三、画三维图
下面这篇文章梳理的很好,推荐:https://blog.csdn.net/u014636245/article/details/82799573
下面还是自我实现一下。
画三维线段:

xs = np.arange(-5,5,0.1)
ys = np.arange(-5,5,0.1)
zs = 25-pow(xs,2)-pow(ys,2)

fig = plt.figure()
ax1 = plt.axes(projection = '3d')
ax1.plot3D(xs,ys,zs)
plt.show()

在这里插入图片描述
类似的,可以画三维散点图:

xs = np.arange(-5,5,0.1)
ys = np.arange(-5,5,0.1)
zs = 25-pow(xs,2)-pow(ys,2)

fig = plt.figure()
ax1 = plt.axes(projection = '3d')
ax1.scatter3D(xs,ys,zs)
plt.show()

在这里插入图片描述

画三维图像:

xs = np.arange(-5,5,0.1)
ys = np.arange(-5,5,0.1)
X,Y = np.meshgrid(xs,ys)
zs1 = 25-pow(X,2)-pow(Y,2)

fig = plt.figure()
ax1 = plt.axes(projection = '3d')
#ax1.plot3D(xs,ys,zs)
ax1.plot_surface(X,Y,zs1)
plt.show()

在这里插入图片描述
其中,要注意的是meshgrid不能少,它的作用是将所给的xs和ys值张成一个网,否则所得到的图像就是在x=y这个面上的一条线。
欢迎指出问题!

  • 0
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值