0%

Numpy是Python中用于科学计算的核心库。它提供了高性能的多维数组对象,以及相关工具

绘制雪花

转自博客上看到的一位大牛的程序,利用Numpy + matplotlib 绘制雪花,效果如下:

snow

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['FangSong'] # 指定默认字体
plt.rcParams['axes.unicode_minus'] = False # 解决中文显示为方块的问题


def rotate(p, d):
"""返回点p绕原点逆时针旋转d度的坐标"""

a = np.radians(d)
m = np.array([[np.cos(a), np.sin(a)], [-np.sin(a), np.cos(a)]])
return np.dot(p, m)


def koch_curve(p, q):
"""将线段pq生成科赫曲线,返回uvw三个点"""

p, q = np.array(p), np.array(q)
u = p + (q - p) / 3 # 三等分点u的坐标
v = q - (q - p) / 3 # 三等分点V的坐标
w = rotate(v - u, 60) + u # 线段uv绕u点逆时针旋转60°得到点w的坐标

return u.tolist(), v.tolist(), w.tolist()


def snow(triangle, k):
"""给定三角形,生成封闭的科赫雪花"""

for i in range(k):
result = list()
t_len = len(triangle)
for j in range(t_len):
p = triangle[j]
q = triangle[(j + 1) % t_len]
u, v, w = koch_curve(p, q)
result.extend([p, u, w, v])
triangle = result.copy()

triangle.append(triangle[0])
return triangle


def plot_snow(snow_list):
"""绘制雪花"""

for triangle, k in snow_list:
data = np.array(snow(triangle, k))
x, y = np.split(data, 2, axis=1)
plt.plot(x, y)

plt.axis('equal')
plt.show()


snow_list = [
([(0, 0), (0.5, 0.8660254), (1, 0)], 5),
([(1.1, 0.4), (1.35, 0.8330127), (1.6, 0.4)], 4),
([(1.1, -0.1), (1.25, 0.15980761), (1.4, -0.1)], 3)
]
plot_snow(snow_list)
Read more »

生成数据

安装matplotlib

1
$ pip3 install --user matplotlib

测试matplotlib

1
2
$ python3
>> import matplotlib

如果没有出现任何错误消息,就说明你系统安装了matplotlib。

matplotlib画廊

要查看使用matplotlib可制作的各种图表,请访问http://matplotlib.org/的示例画廊。单击画廊中的图表,就可查看用于生成图表的代码。

绘制简单的折线图plot()

我们将使用平方数序列1、4、9、16和25来绘制这个图标。

1
2
3
4
5
import matplotlib.pyplot as plt

squares = [1,4,9,16,25]
plt.plot(squares)
plt.show()

2017-09-19.2.15.10

首先,导入了模块pyplot,并给它指定了别名plt。模块pyplot包含很多用于生成图标的函数。

我们创建了一个列表,在其中存储了前述平方数,再将这个列表传递给函数plot()。

plt.show()打开matplotlib查看器,并显示绘制的图形。

修改标签文字和线条粗细

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import matplotlib.pyplot as plt

squares = [1,4,9,16,25]
plt.plot(squares,linewidth=5)

#设置图表标题,并给坐标轴加上标签
plt.title("Square Numbers",fontsize=24)
plt.xlabel("Value",fontsize=14)
plt.ylabel("Square of Value",fontsize=14)

#设置刻度标记的大小
plt.tick_params(axis='both',labelsize=14)

plt.show()

tick_params()设置刻度的样式,其中指定的实参将影响x轴和y轴上的刻度(axis=’both’),并将刻度标记的字号设置为14。

017-09-19.3.16.14

校正图形

我们发现没有正确的绘制数据:折线图的终点指出4.0的平方为25!下面来修复这个问题。

Read more »

Python的安装、IPython的使用

  • Python的安装参见https://stringpiggy.hpd.io/mac-osx-python3-dual-install/ ,或者《Python编程:从入门到实战》一书中也有详细的记载。
  • 利用IPython可以代替传统python开发的文本编辑器,灵活的改变所写代码,快捷的生成结果代码。IPython Notebook目前已经成为用Python做教学、计算、科研的一个重要工具,很多示例都是用.ipynb文件。

​ 安装Ipython有两种方式,第一种是通过pip安装。第二种是安装Anaconda从而获得iPython (这个选择比较适合新手,推荐官网教程一键搞定),下面主要介绍使用pip命令来安装。

  1. iPython是由很多模块组成的, 为了不漏装任何组件,我用了这个命令来安装所有组件:
1
$ sudo pip install ipython[all]
  1. 安装成功后通过这命令来运行Notebook
1
$ ipython notebook

之后有可能会弹出这个错误(你如果选择了用Anaconda的方式来安装也会碰到这个错误):

1
ValueError, 'unknown locale: %s' % localename

StackOverflow上已经有人提出了解决方案,在命令行里找到.bash_profile 然后添加下面两行代码:

1
2
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8

然后别忘了重新载入.bash_profile让新添加的代码生效(注意两个点之间的空格):

1
$ . .bash_profile

之后再运行命令”ipython notebook “就可以在浏览器里看到iPython Notebook的界面了。

iPython Notebook的工作原理是在本地启动一个服务器,你通过localhost:8888/tree 这个地址就可以连接到这个服务器上与之通信。从而实现在浏览器里写代码,传给本地服务器执行,然后本地服务器传回结果并在网页上呈现这个循环。

每次使用完Notebook,只关闭网页本身是不够的。需要在你启动Notebook的那个Terminal里输 Ctrl + c 然后确认,才能把服务器关闭。官网具体链接为:http://IPython.org/install.html

Read more »