最近遇到个任务需要画一些坐标图,我就在想,用了这么长时间的 Python 了,能不能用 Python 画图呢?学习一门语言不能只为了学习语言而学习,要做到学以致用。Google 了一下,果然有新的发现,Python 中 matplotlib 库是专门用来画图的,操作了一番后,发现用 Python 画图真的爽,人生苦短,快用 Python!下面简单的介绍一下 matplotlib 库的用法,起到一个抛转引玉的作用,更多好玩的事情等待着咱们一起来探索。
我有如下数据集,想要在坐标轴上画出它们的图像:
x = [-1.0, -0.5, 1.5, 2.5, 4.0, 5.5, 7.0, 9.0, 10.5, 11.5,
13.0, 15.5, 18.0, 20.5, 23.0, 25.5, 28.0, 33.0, 38.0, 43.0]
data1 = [0.1, 0.9, 5.6, 7.8, 14.8, 21.2, 26.3, 32.0, 36.6, 39.4,
42.6, 47.9, 52.2, 56.1, 59.8, 63.2, 66.3, 72.2, 77.5, 81.5]
data2 = [0.1, 0.2, 2.1, 3.7, 6.8, 9.8, 11.8, 14.9, 16.1, 17.2,
18.6, 20.7, 22.6, 24.4, 26.0, 27.5, 28.9, 31.0, 32.9, 34.3]
让我们一起来看下如何用 Python 中 matplotlib 库画出它们的图像吧。
想要用 matplotlib,首先你需要导入这个库:
import matplotlib.pyplot as plt
然后输入一下代码:
plt.title("curve") # 标题
plt.xlabel("x") # x 轴信息
plt.ylabel("y") # y 轴信息
plt.plot(x, data1) # 画出图像
plt.plot(x, data2)
plt.show() # 显示
你瞧,函数图像就轻松地画出来了,不得不说,Python 真的太好用了。
但是这样看,这个图像太单调了,我们给它丰富一下细节,对每一条曲线加上一个标签,将原来的 plt.plot() 方法传入参数:
plt.plot(x, data1, label="curve1")
plt.plot(x, data2, label="curve2")
然后再用方法 plt.legend() 放置标签的位置:
plt.legend(loc='upper center', bbox_to_anchor=(0.2, 0.95))
其中第一个参数为标签大概位置,第二个参数是调整标签的具体位置,然后新的图像为:
但是我对这个图像还不满意,这个坐标跟我平常见到的坐标不太一样呀,有什么办法可以变成我们常见的坐标吗?这时候就要发挥出我们的智慧了。
这个图像有四条坐标轴,上下左右各一条,我们只需要把上和右坐标轴隐藏,然后移动剩下两条坐标轴不就好咯。
ax = plt.gca() # 获取坐标轴
ax.spines['right'].set_color('none') # 将右坐标轴颜色设置为空白
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom') # 将刻度在 x 轴底部显示
ax.yaxis.set_ticks_position('left')
ax.spines['bottom'].set_position(('data', 0)) # 把图像与坐标轴关联
ax.spines['left'].set_position(('data', 0))
图像成功的变成了我们想要的样子:
以下是具体代码:
import matplotlib.pyplot as plt
x = [-1.0, -0.5, 1.5, 2.5, 4.0, 5.5, 7.0, 9.0, 10.5, 11.5,
13.0, 15.5, 18.0, 20.5, 23.0, 25.5, 28.0, 33.0, 38.0, 43.0]
data1 = [0.1, 0.9, 5.6, 7.8, 14.8, 21.2, 26.3, 32.0, 36.6, 39.4,
42.6, 47.9, 52.2, 56.1, 59.8, 63.2, 66.3, 72.2, 77.5, 81.5]
data2 = [0.1, 0.2, 2.1, 3.7, 6.8, 9.8, 11.8, 14.9, 16.1, 17.2,
18.6, 20.7, 22.6, 24.4, 26.0, 27.5, 28.9, 31.0, 32.9, 34.3]
ax = plt.gca() # 获取坐标轴
ax.spines['right'].set_color('none') # 将右坐标轴颜色设置为空白
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom') # 将刻度在 x 轴底部显示
ax.yaxis.set_ticks_position('left')
ax.spines['bottom'].set_position(('data', 0)) # 把图像与坐标轴关联
ax.spines['left'].set_position(('data', 0))
plt.title("curve") # 标题
plt.xlabel("x") # x 轴信息
plt.ylabel("y") # y 轴信息
plt.plot(x, data1, label="curve1")
plt.plot(x, data2, label="curve2")
plt.legend(loc='upper center', bbox_to_anchor=(0.2, 0.95))
plt.show() # 显示