python编程从入门到实践 之 数据可视化部分总结和回顾(未完待续)
15.1生成数据
matplotlib:是一个数学绘图库,使用它可以制作简单的图标。
pygal包:专注于生成适合在数字设备上显示的图标。通过使用pygal,可以在与图表交互时突出元素以及调整大小,还可以轻松调整整个图表的尺寸。pygal我自己的理解是python graphics adapt library,即python图形适配器。
这两个部分安装就不叙述了,书上有的。安装后在解释器中运行:
import matplotlib
如果没有任何出错信息,说明安装正确。
另外,要查看由matplotlib制作的各种图表,请访问:https://matplotlib.org/示例的画廊。单击画廊中的图表,就可以查看用于生成图表的代码。
15.2 绘制简单的折线图
#导入pyplot,并指定了别名plt,避免反复键入pyplot
import matplotlib.pyplot as plt
#
squares = [1,4,9,16,25,36,49]
plt.plot(squares)
plt.show()
注意:我自己实践,可以吧import matplot.pyplot 写成如下形式
from matplotlib import pyplot
运行后,得到如下图像
15.2.1修改标签文字和线条粗细
上图中的图标标签太小,线条太细,下面自己定制。
import matplotlib.pyplot as pltsquares = [1,4,9,16,25,36,49]
#linewidth决定了plot画的线条的粗细
plt.plot(squares,linewidth=5)#设置图标标题,并加上标签
plt.title("Squares Numbers",fontsize=24)
plt.xlabel("Value:",fontsize=14) #加上x轴标签,字体14
plt.ylabel("Square of Value:",fontsize=14) #给y轴加上标签,字体14#设置刻度标记的大小(也就是坐标轴上数字标记的大小)
plt.tick_params(axis='both',labelsize=14)
plt.show()
15.2.2矫正图形
图形绘制以后,我们发现没有正确地绘制数据:折线图的终点指出6的平方为49,下面来修复这个问题。
当你向plot提供一系列的数字时,它假设第一个数据点对应的x坐标纸为0,但我们的第一个点对应的值x为1,为了改变这种默认的行为,我们可以给plot()同时提供输入值和输出值:
...snip...
inputvalues = [1,2,3,4,5,6,7]
squares = [1,4,9,16,25,36,49]
#linewidth决定了plot画的线条的粗细
plt.plot(inputvalues,squares,linewidth=5) #同时提供输入值和输出值
...snip...
plt还可以指定更多的实际参数。后路将会学习到。
15.2.3
import matplotlib.pyplot as plt#绘制单个点,传给scatter一对x和y坐标即可
plt.scatter(2,4,s=100)
plt.show()
~
注:scatter可以画单个点,也可以画一系列的点,前者传递单个点的坐标,后者传递2列表。
练习15-1
#15-1(1)import matplotlib.pyplot as plt
inputvalues = list(x for x in range(1,6))
values = list(x**3 for x in range(1,6))
plt.scatter(inputvalues,values,s=10)
plt.show()
~
#15-1(2)
import matplotlib.pyplot as plt
inputvalues = list(x for x in range(1,5001))
values = list(x**3 for x in range(1,5001))
#使用颜色渐变模式
plt.scatter(inputvalues,values,c=values,cmap=plt.cm.Blues,s=10)
plt.show()
知识点总结
一、plt下的plot 和 scatter画图
(仿照mysql语句语法格式,[]内部分是可以省略的部分),有的时候[]代表一个列表,大家可以自己尝试运行代码进行鉴别:
(1)导入库下面的方法
import matplotlib.pyplot as plt
或者
from matplotlib import pyplot as plt
(2)画图函数
plt.plot(inputvalues,outputvalues,line_width=NUM)
plt.scatter(xvalues,yvalues,s=SQUAREVALUES)表示画散点图,s代表每个点内由多少个像素组成,
这里面有个edgecolor表示有没有轮廓,默认有轮廓,但是我试了下,指定edgecolor='none'后,效果完全一样的。
形如参数c='red',表示指定颜色的参数。对plot和scatter都是适用的。c也可以用rgb颜色模式指定,
例如:c=(0,0,0.2),当值越大,颜色越深,值越小,颜色越淡。
#下面plot函数内的[]不是可省略的意思,是指的一个列表
(3)设置标题,x轴,y轴标签,下面三个函数参数设置方法一致
plt.title("title_contents",fontsize=NUM)
plt.xlabel(...)
plt.ylabel(...)
(4)设置坐标轴刻度大小的函数
plt.tick_params(axis='both',labelsize=NUM)
(5)指定x和y坐标范围(xmaximum和ymuximum分别是x和y坐标的最大值)
plt.axis([0,xmaximum,0,ymaximum])
plt.plot([xvalues_list],y_values,line_width=WIDTH_VALUE),line_width 表示线的宽度是多少像素
(7)显示函数
plt.show() 显示画的图形并且结束程序
plt.savefig('PICTURE_NAME',bbox_inches='tight'),第一个参数表示图像名称,第二个参数表示裁剪多余的部分,tight表示紧身的,代表将裁剪多余的部分
注意:bbox_inches='tight'
只是删除图形周围的所有额外空白区域,它在渲染完成后并未实际重新排列图形中的任何内容。
(8)颜色映射
关于颜色映射,类似如下格式
plt.scatter(x_values,y_values,c=y_values,...)
c可以赋值为y_values或者直接赋值一个list(range(len(y_values))),也就是一个自然数列表。如果赋值为自然数列表,那么颜色变化速度慢,如果赋值的列表内的数据变化速度快,那么颜色变化速度非常快。
(9)隐藏坐标轴
plt.axes().get_xaxis().set_visible(False)
plt.axes().get_yaxis().set_visible(False)
(10)调整绘图窗口大小,分辨率,背景色等:
plt.figure(figsize(x,y))
例如: plt.figure(figsize=(10,6)),表示绘图窗口是10英寸 * 6英寸
plt.figure(figsize=(10,6),dpi=)
二、pygal生成可缩放的矢量图形文件
如果打算在线方式生成图表,那么pygal很有用,会根据观看者的屏幕来调整图片大小。在任何设备上显示都很美观。
http://www.pygal.org/ 然后进入Documentation,单击Chart types。每个示例都包括源代码,这让你知道这些图表是如何生成的。
pygal知识点:
一、相关知识点
1.定义一个Bar图 hist = pygal.Bar()
2.给图形加标题 hist.title = 'some title'
3.给图形加x坐加标记: hist.x_labels = ['','','','','']是一个列表,列表中的元素可以是str类型,不能是int类型
4.给x,y坐标加标题 hist.x_title = ' ' and hist.y_title = ' '
5.加 标签 + 值 hist.add('label_of_value',y_values) y_values是一个列表
6.渲染到文件 hist.render_to_file('filename') filename必须是一个svg文件
from die import Die
import pygaldie = Die()
results = []
for roll_num in range(100):result = die.roll()results.append(result)
print(results)
frequencies = []
for value in range(1,die.num_sides + 1):frequency = results.count(value)frequencies.append(frequency)
print(frequencies)# 对结果进行可视化
hist = pygal.Bar() #绘制直方图
hist.title = 'Results 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')
再来个2个骰子的程序:
from die import Die
import pygaldie1 = Die()
die2 = Die()#掷骰子多次,并把结果放在一个列表中
results = []
for roll_num in range(1000):result = die1.roll() + die2.roll()results.append(result)#分析结果
frequencies = []
max_result = die1.num_sides + die2.num_sides
for value in range(2,max_result + 1):frequency = results.count(value)frequencies.append(frequency)hist = pygal.Bar()
hist.title = 'Results of rolling two D6 dice 1000 times.'
hist.x_labels = ['2','3','4','5','6','7','8','9','10','11','12']
hist.y_title = 'Frequency of Result'hist.add('D6 + D6',frequencies)
hist.render_to_file('two_d6.svg')
print(frequencies)
15.3随机漫步
练习15-3
#文件walk.py
import matplotlib.pyplot as plt
from random_walk import RandomWalkwhile True:rw = RandomWalk(5000)rw.fill_walk()plt.figure(figsize=(10,6),dpi=100)num_points = list(range(rw.num_count))#plot 没有edgecolor和像 scatter那样的颜色映射,不能用s设置点的面积,需要用linewidth设置plt.plot(rw.x_values,rw.y_values,c='red',linewidth=1,)plt.scatter(0,0,s=100,c='red',edgecolor='none')plt.scatter(rw.x_values[-1],rw.y_values[-1],s=100,edgecolor='none')#plt.axes().get_xaxis().set_visible(False)#plt.axes().get_yaxis().set_visible(False)plt.show()info = input("Another walk?(y/n)")if info == 'n' or info == 'N':break
#文件random_walk.pyfrom random import choice
import matplotlib.pyplot as plt
class RandomWalk():def __init__(self,num_count = 5000):self.x_values = [0]self.y_values = [0]self.num_count = num_countdef fill_walk(self):while len(self.x_values) < self.num_count: x_direction = choice([1,-1])x_step = choice([0,1,2,3,4])x_step = x_direction * x_stepy_direction = choice([1,-1])y_step = choice([0,1,2,3,4])y_step = y_step * y_directionif x_step == 0 and y_step == 0:continuex_value = x_step + self.x_values[-1]y_value = y_step + self.y_values[-1]self.x_values.append(x_value)self.y_values.append(y_value)
练习15-5
random_walk.py改成如下:
from random import choice
import matplotlib.pyplot as plt
class RandomWalk():def __init__(self,num_count = 5000):self.x_values = [0]self.y_values = [0]self.num_count = num_countdef fill_walk(self):while len(self.x_values) < self.num_count: x_step = self.get_step()y_step = self.get_step()if x_step == 0 and y_step == 0:continuex_value = x_step + self.x_values[-1]y_value = y_step + self.y_values[-1]self.x_values.append(x_value)self.y_values.append(y_value)def get_step(self):direction = choice([-1,1])distance = choice([0,1,2,3,4])step = direction * distancereturn step
python编程从入门到实践 之 数据可视化部分总结和回顾(未完待续)相关推荐
- python基础学习[python编程从入门到实践读书笔记(连载五)]:数据可视化项目第16章
文章目录 下载数据 制作全球地震散点图:JSON格式 end 几个实验结果: 每日最高气温: 地震图绘制: 下载数据 CSV文件格式 在文本文件中存储数据,一个简单方式是将数据作为一系列以逗号分隔的值 ...
- python数据可视化从入门到实战_《Python编程从入门到实践》json数据可视化练习详解...
<Python编程从入门到实践>16.2中,计算收盘价均值的程序有些不易看懂,结合我自己的理解进行一些说明. 使用的数据集:join格式的数据, 数据集是由多个字典为元素组成的列表.每个字 ...
- 《Python编程从入门到实践》记录之json模块(数据存储)
模块json让你能够将简单的Python数据结构转储到文件中, 并在程序再次运行时加载该文件中的数据. 你还可以使用json在Python程序之间分享数据.更重要的是,JSON数据格式并非Python ...
- python unique函数_《Python编程从入门到实践》json数据可视化练习详解
<Python编程从入门到实践>16.2中,计算收盘价均值的程序有些不易看懂,结合我自己的理解进行一些说明. 使用的数据集:join格式的数据, 数据集是由多个字典为元素组成的列表.每个字 ...
- python编程 从入门到实践豆瓣-三周刷完《Python编程从入门到实践》的感受
本文将以对话采访的形式展现 为什么会选择学习Python 语法简洁,实用,和golang部分类似,学习性价比高: 应用范围广,涉及后端,机器学习,图像处理,游戏等: 好奇这是一门怎样的语言 计划如何学 ...
- python基础学习[python编程从入门到实践读书笔记(连载三)]:django学习笔记web项目
文章目录 Django项目:学习笔记web网页 项目部署 参考 自己部署的网站,还是小有成就感的,毕竟踩过很多坑,实战技能也有些许进步. 网站链接:http://lishizheng.herokuap ...
- python基础学习[python编程从入门到实践读书笔记(连载一)]
写在前面:本文来自笔者关于<python编程从入门到实践>的读书笔记与动手实践记录. 程序员之禅 文章目录 02变量和简单数据类型 03 列表简介 04 操作列表 05 if语句 06 字 ...
- 《Python编程从入门到实践》记录之while循环简介(break、continue)
目录 1.使用while循环让用户选择何时退出 2.使用break退出循环 3.使用continue返回循环开头 4.while循环处理列表和字典--在列表之间移动元素 5.while循环处理列表和字 ...
- 《Python编程从入门到实践》16.2.6收盘价均值,代码理解
在学习<Python编程从入门到实践>16.2.6收盘价均值这块时,代码不是很清晰,里面有lambda法则等,可能作者不想涉及太多高级内容所以没有详细写,自己把自己的理解过程记录如下. 本 ...
最新文章
- Android混合推送,MUI框架-推送配置核心代码-个推推送
- 每天10分钟就能练出流利口语
- 20145223 杨梦云 《网络对抗》shellcode实验+return-to-libc实验
- 为什么Alpha多样性的输入数据会是它?
- manga camera android,Manga-Camera
- 苹果css攻击,研究人员设计了一种新的CSS和HTML攻击 导致iPhone重启或冻结Mac
- 遍历同辈节电的方法_jQuery遍历节点
- 使用Github官方提供的gitignore过滤Git提交的文件
- 图层重命名快捷键_玩转CAD快捷键(大全),一篇文章就够了
- 区分指针数组和数组指针
- 《商务与经济统计》(三)
- Word模板引擎使用指南
- unipp怎么打包微信公众号_uni-app微信小程序运行和打包
- 哈,新学期又开始喽。
- win产品密钥大搜集
- 网络购物需谨慎 “闲鱼”与“咸鱼“仅一个链接的距离
- Idea 控制台console 不能搜索日志 CTRL F 快捷键无效
- ELK在安全运营中的应用实践
- Qt使用QAudioInput、QAudioOutput实现局域网的音频通话
- PowerDesigner生成数据库时报错Reflexive and mandatory reference
热门文章
- PAT 1052. 卖个萌 (20)
- C# WinForm开发系列 - Excel
- Apache负载均衡设置方法: mod_proxy
- 园子里有没有介绍netframework3.0的
- SpringBoot整合Mybatis完整详细版
- [Android] 使用Include布局+Fragment滑动切换屏幕
- 【数据结构与算法】之深入解析“二叉搜索树中的搜索”的求解思路与算法示例
- 【数据结构与算法】之深入解析“求根节点到叶节点数字之和”的求解思路与算法示例
- 微信小程序 setData动态设置数组中的数据
- 大端和小端的判断及转换