2019年2月份编程语言排行榜出炉,多年王者java正式跌落下神坛,Python等上NO.1,Python语言相对java语言它简单,入门更快
对java熟悉的人,上手Python就比较容易了,Python中变量命名,继承等相比java更简单;通过一两个月的学习,发现它太简便了,同样的一个功能,java实现得几十甚至上百行代码实现,而Python只需一行代码搞定,提升了开发效率.
在学习Python中,通过记录学习Python的点点滴滴,回顾掌握内容提升自己,之前学习Python时,未发现记录博客,总是看的多,总结的少,似会不会,2019年为鞭策自己,将所看所学的知识总结,同时也希望同更多志同道合的同学一块进步学习,开始写博客,之前Python基础后续会慢慢补上;先赋使用Python绘制简单的折线图;
使用scatter()绘制一系列的点
要绘制一系列的点,可向scatter() 传递两个分别包含x 值和y 值的列表
x_values = [1, 2, 3, 4, 5]
y_values = [1, 4, 9, 16, 25]
plt.title("scatter", fontsize=24)
plt.scatter(x_values, y_values, s=100)
# 设置刻度标记的大小
plt.tick_params(axis='both', which='major', labelsize=14)
plt.show()
运行后如下图
手动列表包含的值效率低下,如果绘制的点过多更是如此;可以让Python帮助我们完成计算
x_values = list(range(1, 10001))
y_values = [x ** 2 for x in x_values]
plt.title("scatter", fontsize=24)
#plt.scatter(x_values, y_values, s=100)
#设置颜色
#plt.scatter(x_values, y_values, c='red',edgecolor = 'none',s=40)
#设置颜色通过RGB设置颜色
plt.scatter(x_values, y_values, c=(0,0,0.8),edgecolor = 'none',s=40)
plt.tick_params(axis='both', which='major', labelsize=14)
# 设置x轴和y轴取值范围,x轴取值范围[0,1100],y轴取值范围[0,110000]
plt.axis([0, 1100, 0, 1110000])
plt.show()
运行结果
使用颜色映射
颜色映射 (colormap)是一系列颜色,它们从起始颜色渐变到结束颜色。在可视化中,颜色映射用于突出数据的规律,例如,你可能用较浅的颜色来显示较小的值,并使用较深的颜色来显示较大的值
x_values = list(range(1, 1001))
y_values = [x ** 2 for x in x_values]
plt.title('scattle', fontsize=24)
#我们将参数c 设置成了一个 y 值列表,并使用参数cmap 告诉pyplot 使用哪个颜色映射
plt.scatter(x_values, y_values, c=y_values, cmap=plt.cm.Blues,
edgecolor='none', s=40)
plt.show()
自动保存图表
将show()替换为saveConfig(‘文件名称.png’,bbox_inches=’tight’)
第二个参数:将图标多余空白区域裁剪掉,如果要保留图表周围多余的空白区域,可省略这个实参
随机漫步
创建RandomWalk类,这个类需要三个属性,其中一个存储随机漫步次数的数量,其它两个是列表
random_walk.py
class RandomWalk():
"""一个生成随机漫步数据的类"""
def __init__(self, num_points=5000):
"""初始化随机漫步的属性"""
self.num_points = num_points
# 所有随机漫步都始于(0,0)
self.x_values = [0]
self.y_value = [0]
def fill_walk(self):
"""计算漫步包含所有的点"""
# 不断漫步,直到列表到达指定的长度
while len(self.x_values) < self.num_points:
# 决定前进方向以及沿这个方向前进的距离
# 要么向右走的1,要么向左走的-1
x_direction = choice([1, -1])
# 随机地选择一个0到4的整数
x_distance = choice([0, 1, 2, 3, 4])
x_step = x_direction * x_distance
y_direction = choice([1, -1])
y_distance = choice([0, 1, 2, 3, 4])
y_step = y_direction * y_distance
# 拒绝原地踏步
if x_step == 0 and y_step == 0:
continue
# 计算下一个点的x和y的值
next_x = self.x_values[-1] + x_step
next_y = self.y_values[-1] + y_step
self.x_values.append(next_x)
self.y_values.append(next_y)
绘制随机漫步图
rw = RandomWalk()
rw.fill_walk()
# 绘制起点和终点
plt.scatter(0, 0, c='green', edgecolor='none', s=100
#给点着色
#plt.scatter(rw.x_values, rw.y_values, s=15)
plt.scatter(rw.x_values, rw.y_values, c=point_numbers, cmap=plt.cm.Blues,
edgecolor='none', s=15)
plt.show()
运行结果
隐藏坐标轴
plt.axes().get_xaxis().set_visible(False)
plt.axes().get_yaxis().set_visible(False)
....
plt.show()
运行如下图
15.4 Pygal模拟投掷骰子,计算出投掷100次时各个点数的总次数,并使用直方图显示
15.4.1 安装pygal
在linux和mac os系统中,应执行类似于下面这样
pip install --user pygal
在windows系统中,命令类似于这样
Python -m pip install --user pygal
注意 你可能需要使用命令pip3 而不是pip ,如果这还是不管用,你可能需要删除标志--user 。
15.4.2 pygal画廊(使用pygal模拟投骰子)
创建骰子的类(Die)
class Die():
"""表示骰子的类"""
def __init__(self, num_sides=6):
"""骰子默认为6个面"""
self.num_sides = num_sides
def roll(self):
"""返回一个位于1和骰子面数之间的随机数"""
return randint(1,self.num_sides)
模拟投骰子
die = Die()
results = []
# 投掷几次骰子,并将结果存储在一个列表中
for roll_num in range(100):
result = die.roll()
results.append(result)
print(results)
分析结果:
die = Die()
results = []
# 投掷几次骰子,并将结果存储在一个列表中
for roll_num in range(100):
result = die.roll()
results.append(result)
frequencies = []
for value in range(1,die.num_sides+1):
frequency = results.count(value)
frequencies.append(frequency)
print(frequencies)
运行结果:
绘制直方图
# 对结果进行可视化
hist = pygal.Bar()
hist.title = "Result of rolling one D6 1000 times"
hist.x_labels = ['1', '2', '3', '4', '5', '6']
hist.x_title = "Result"
hist.y_title = "Frequency of result"
hist.add('D6', frequencies)
hist.render_to_file('die_visual.svg')
print(frequencies)
运行后程序,在当前目录生成die_visual.svg,建议使用web浏览器打开,使用其它格式打开svg图,有时加载不出来,这个需要 注意下
运行结果如下图
注意:pygal让这个图表具有交互性:如果你将鼠标指向该图表中的任何图形,将看到与之相关联的数据.在同一个图表中绘制多个数据集时,这项功能显得特别有用
15.4.7 同时投掷两个骰子
die_1 = Die()
die_2 = Die()
results = []
# 投掷几次骰子,并将结果存储在一个列表中
for roll_num in range(1000):
result = die_1.roll()+die_2.roll()
results.append(result)
frequencies = []
max_result = die_1.num_sides+die_2.num_sides
for value in range(2, max_result + 1):
frequency = results.count(value)
frequencies.append(frequency)
# 对结果进行可视化
#注意:pygal让这个图表具有交互性:如果你将鼠标指向该图表中的任何图形,将看到与之相关联的数据.
# 在同一个图表中绘制多个数据集时,这项功能显得特别有用
hist = pygal.Bar()
hist.title = "Result of rolling one D6 1000 times"
hist.x_labels = [ '2', '3', '4', '5', '6','7','8','9','10','11','12']
hist.x_title = "Result"
hist.y_title = "Frequency of result"
hist.add('D6+D6', frequencies)
hist.render_to_file('die_visual.svg')
print(frequencies)
运行结果
15.4.8 同时投掷不同的骰子
需要注意:x轴最低数值为2,最高为16
die_1 = Die()
die_2 = Die(10)
results = []
# 投掷几次骰子,并将结果存储在一个列表中
for roll_num in range(5000):
result = die_1.roll()+die_2.roll()
results.append(result)
frequencies = []
max_result = die_1.num_sides+die_2.num_sides
#两棵骰子,从2开始计算
for value in range(2, max_result + 1):
frequency = results.count(value)
frequencies.append(frequency)
# 对结果进行可视化
#注意:pygal让这个图表具有交互性:如果你将鼠标指向该图表中的任何图形,将看到与之相关联的数据.
# 在同一个图表中绘制多个数据集时,这项功能显得特别有用
hist = pygal.Bar()
hist.title = "Result of rolling one D6 5000 times"
hist.x_labels = [ '2', '3', '4', '5', '6','7','8','9','10','11','12','13',
'14','15','16']
hist.x_title = "Result"
hist.y_title = "Frequency of result"
hist.add('D6+D6', frequencies)
hist.render_to_file('die_visual.svg')
print(frequencies)
运行结果