零基础学编程042:画函数图像

孩子马上就要参加高考了,我以前还能帮着辅导一下数学功课,现在就不行了,一来她很忙,晚上很晚才到家,二来高中的数学题太变态,琢磨一个小时可能也解不出一道。

前几天她让我帮着打印几张函数及导函数的图像,我发现这些图像都是用一款软件制作的,例如第一幅图像是这样的:

我以前用Python画过复利曲线图,这种图像只不过稍微复杂了一点,应该难不倒我,下面就跟着我来一步一步把这个图做出来。

第一步:画出f(x)=x*ln(x)

复习一下以前学过的内容,换一下函数,马上就完成了这一步。

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-2, 6, 200)
y = x * np.log(x)
plt.plot(x, y)
plt.show()

需要说明一下linspace(-2, 6, 200)相当于在x轴从-2到6之间采样200个点,形成一个数组。np.log()就是自然对数函数。

第二步:再加上导数图像 f'(x) = 1 + ln(x)

在plot()函数之前加上两条语句就可以了。

dy = 1 + np.log(x)
plt.plot(x, dy)

可以看到多了一条曲线,而且自动用了不同的颜色。

第三步:把第二条曲线用红虚线表示

把这一行:

plt.plot(x, dy)

换成:

plt.plot(x, dy, 'r--')

这里的 r 表示红色red,-- 表示虚线,r-- 就是红虚线。

第四步:在函数曲线旁边标上函数名称

在plt.show()函数之前加上两条语句:

plt.text(2.5, 6, r'$f(x) = x * ln(x)$')
plt.text(4, 1.8, r"$f'(x) = 1 + ln(x)$")

解释一下:

r'$f(x) = x * ln(x)$'

这个也是字符串,r 的意思是raw,原始的、未经过加工的,因为'\n','\\'等这类特殊字符需要进行转义处理,而用上这个r字母开头之后,里面的反斜杠就不当转义符处理了,关于字符串以后还得专门细说一下。

在《零基础学编程021:获取股票实时行情数据》这一课里我们见过以字母b开头的字符串,表示二进制串,例如:b'hq="\xb9\xc8\xb8\xe8,824.16.....";\n'

至于r'......'里面的两个$符号,则与latex有关,专门用来表示数学公式的,你可以把两个$符号去掉,看一看文字样式有何区别。

第五步:加上网格线和坐标轴

把图的x坐标范围设置为[-2, 6]:

plt.xlim(-2, 6)

加上网格线:

plt.grid(True)

加上水平坐标轴和垂直坐标轴:

plt.axhline(color='black')
plt.axvline(color='black')

上面这些语句都放在plt.show()之前,最后的效果是这样的:

作业:

试着画出下图中的两个函数图像。

--- END ---

原文发布于微信公众号 - 申龙斌的程序人生(slbGTD)

原文发表时间:2017-04-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据结构与算法

Day2上午解题报告

预计分数:100+0+60=160 实际分数:100+0+60=160 mmpT1数据错了。。。 T1遭遇 题目描述 你是能看到第一题的 friends呢。 —...

4014
来自专栏程序员宝库

用 Python 实现一个大数据搜索引擎

搜索是大数据领域里常见的需求。Splunk和ELK分别是该领域在非开源和开源领域里的领导者。本文利用很少的Python代码实现了一个基本的数据搜索功能,试图让...

43712
来自专栏落影的专栏

程序员进阶之算法练习(二十三)

前言 7月,忙着学习ReactNative相关,这部分后续再详细介绍,先抽点时间补上算法文集的更新。 正文 1、Tennis Championship 题目链接...

2884
来自专栏逸鹏说道

码农眼中的数学之~数学基础

写在前面:文章里面的图片公式都是逆天一个个打出来画出来的,公式系列基本上都提供了源码

1497
来自专栏冰霜之地

神奇的德布鲁因序列

数学中存在这样一个序列,它充满魔力,在实际工程中也有一部分的应用。今天就打算分享一下这个序列,它在 Google S2 中是如何使用的以及它在图论中,其他领域中...

1203
来自专栏数据结构与算法

BZOJ2216: [Poi2011]Lightning Conductor(DP 决策单调性)

首先把给出的式子移项,我们要求的$P_i = max(a_j + \sqrt{|i - j|}) - a_i$。

802
来自专栏灯塔大数据

技术 | Python从零开始系列连载(十五)

在Python中使用try...except 结构创建 ' 隔离区 ',也就是进行异常处理

621
来自专栏函数式编程语言及工具

泛函编程(17)-泛函状态-State In Action

    对OOP编程人员来说,泛函状态State是一种全新的数据类型。我们在上节做了些介绍,在这节我们讨论一下State类型的应用:用一个具体的例子来示范如何使...

1928
来自专栏Python攻城狮

Python数据科学(六)- 资料清理(Ⅰ)1.Pandas1.资料筛选2.侦测遗失值3.补齐遗失值

成功爬取到我们所需要的数据以后,接下来应该做的是对资料进行清理和转换, 很多人遇到这种情况最自然地反应就是“写个脚本”,当然这也算是一个很好的解决方法,但是,p...

973
来自专栏take time, save time

你所能用到的无损压缩编码(二)

     上个月项目荷兰大佬要检查,搞的我想写的东西不断推迟,现在检查完了,我决定继续把我想写的这整个一个系列写完,上一次写的是最简单的无损编码行程编码,这一次...

3249

扫码关注云+社区