前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用Python随手画个图

用Python随手画个图

作者头像
SuperFeng
发布2019-09-26 16:15:15
1.9K0
发布2019-09-26 16:15:15
举报
文章被收录于专栏:SuperFengSuperFeng

最近遇到个任务需要画一些坐标图,我就在想,用了这么长时间的 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()              # 显示
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-04-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SuperFeng 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档