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编程从入门到实践 之 数据可视化部分总结和回顾(未完待续)相关推荐

  1. python基础学习[python编程从入门到实践读书笔记(连载五)]:数据可视化项目第16章

    文章目录 下载数据 制作全球地震散点图:JSON格式 end 几个实验结果: 每日最高气温: 地震图绘制: 下载数据 CSV文件格式 在文本文件中存储数据,一个简单方式是将数据作为一系列以逗号分隔的值 ...

  2. python数据可视化从入门到实战_《Python编程从入门到实践》json数据可视化练习详解...

    <Python编程从入门到实践>16.2中,计算收盘价均值的程序有些不易看懂,结合我自己的理解进行一些说明. 使用的数据集:join格式的数据, 数据集是由多个字典为元素组成的列表.每个字 ...

  3. 《Python编程从入门到实践》记录之json模块(数据存储)

    模块json让你能够将简单的Python数据结构转储到文件中, 并在程序再次运行时加载该文件中的数据. 你还可以使用json在Python程序之间分享数据.更重要的是,JSON数据格式并非Python ...

  4. python unique函数_《Python编程从入门到实践》json数据可视化练习详解

    <Python编程从入门到实践>16.2中,计算收盘价均值的程序有些不易看懂,结合我自己的理解进行一些说明. 使用的数据集:join格式的数据, 数据集是由多个字典为元素组成的列表.每个字 ...

  5. python编程 从入门到实践豆瓣-三周刷完《Python编程从入门到实践》的感受

    本文将以对话采访的形式展现 为什么会选择学习Python 语法简洁,实用,和golang部分类似,学习性价比高: 应用范围广,涉及后端,机器学习,图像处理,游戏等: 好奇这是一门怎样的语言 计划如何学 ...

  6. python基础学习[python编程从入门到实践读书笔记(连载三)]:django学习笔记web项目

    文章目录 Django项目:学习笔记web网页 项目部署 参考 自己部署的网站,还是小有成就感的,毕竟踩过很多坑,实战技能也有些许进步. 网站链接:http://lishizheng.herokuap ...

  7. python基础学习[python编程从入门到实践读书笔记(连载一)]

    写在前面:本文来自笔者关于<python编程从入门到实践>的读书笔记与动手实践记录. 程序员之禅 文章目录 02变量和简单数据类型 03 列表简介 04 操作列表 05 if语句 06 字 ...

  8. 《Python编程从入门到实践》记录之while循环简介(break、continue)

    目录 1.使用while循环让用户选择何时退出 2.使用break退出循环 3.使用continue返回循环开头 4.while循环处理列表和字典--在列表之间移动元素 5.while循环处理列表和字 ...

  9. 《Python编程从入门到实践》16.2.6收盘价均值,代码理解

    在学习<Python编程从入门到实践>16.2.6收盘价均值这块时,代码不是很清晰,里面有lambda法则等,可能作者不想涉及太多高级内容所以没有详细写,自己把自己的理解过程记录如下. 本 ...

最新文章

  1. Android混合推送,MUI框架-推送配置核心代码-个推推送
  2. 每天10分钟就能练出流利口语
  3. 20145223 杨梦云 《网络对抗》shellcode实验+return-to-libc实验
  4. 为什么Alpha多样性的输入数据会是它?
  5. manga camera android,Manga-Camera
  6. 苹果css攻击,研究人员设计了一种新的CSS和HTML攻击 导致iPhone重启或冻结Mac
  7. 遍历同辈节电的方法_jQuery遍历节点
  8. 使用Github官方提供的gitignore过滤Git提交的文件
  9. 图层重命名快捷键_玩转CAD快捷键(大全),一篇文章就够了
  10. 区分指针数组和数组指针
  11. 《商务与经济统计》(三)
  12. Word模板引擎使用指南
  13. unipp怎么打包微信公众号_uni-app微信小程序运行和打包
  14. 哈,新学期又开始喽。
  15. win产品密钥大搜集
  16. 网络购物需谨慎 “闲鱼”与“咸鱼“仅一个链接的距离
  17. Idea 控制台console 不能搜索日志 CTRL F 快捷键无效
  18. ELK在安全运营中的应用实践
  19. Qt使用QAudioInput、QAudioOutput实现局域网的音频通话
  20. PowerDesigner生成数据库时报错Reflexive and mandatory reference

热门文章

  1. PAT 1052. 卖个萌 (20)
  2. C# WinForm开发系列 - Excel
  3. Apache负载均衡设置方法: mod_proxy
  4. 园子里有没有介绍netframework3.0的
  5. SpringBoot整合Mybatis完整详细版
  6. [Android] 使用Include布局+Fragment滑动切换屏幕
  7. 【数据结构与算法】之深入解析“二叉搜索树中的搜索”的求解思路与算法示例
  8. 【数据结构与算法】之深入解析“求根节点到叶节点数字之和”的求解思路与算法示例
  9. 微信小程序 setData动态设置数组中的数据
  10. 大端和小端的判断及转换