鱼C论坛

 找回密码
 立即注册
查看: 1969|回复: 0

[见证历程] Python入门到实践——项目2数据可视化

[复制链接]
发表于 2018-3-6 12:20:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 zhuoyue65 于 2018-3-6 21:29 编辑

因为从0开始学Python,想把这本书的所有项目都做一遍,夯实基础。这是第二个项目,开个帖子记录一下自己做这个项目的经历。主体内容应该是书里内容的缩水版,加上一点自己的对代码的理解。

陆续更新中。



项目——2数据可视化
15.2  绘制简单的折线图
mpl_squares.py
  1. import matplotlib.pyplot as plt  #pyplot生成图表的函数
  2. squares = [1,4,9,16,25]
  3. plt.plot(squares)
  4. plt.show()   #打开 matplotlib 查看器
复制代码


15.2.1  修改标签文字和线条粗细
mpl_squares.py
  1. import matplotlib.pyplot as plt  #pyplot生成图表的函数

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

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

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

  10. plt.show()   #打开 matplotlib 查看器
复制代码


15.2.2  校正图形
此处设置了具体横坐标有几个点,纵坐标有几个点,形成几对(x,y)绘制图像。
  1. import matplotlib.pyplot as plt  #pyplot生成图表的函数

  2. input_values = [1,2,3,4,5]   #横坐标的具体值
  3. squares = [1,4,9,16,25]     #纵坐标的具体指

  4. plt.plot(input_values, squares,linewidth=5)

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

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

  11. plt.show()   #打开 matplotlib 查看器
复制代码



15.2.3  使用 scatter()  绘制散点图并设置其样式
scatter_squares.py
  1. import matplotlib.pyplot as plt

  2. plt.scatter(2,4)
  3. plt.show()
复制代码


在坐标轴上绘制(2,4)这个点。

下面:添加标题,给轴加上标签,并确保所有文本都大到能够看清:
  1. import matplotlib.pyplot as plt

  2. plt.scatter(2, 4,s=100)   #S表示点的尺寸

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

  7. """设置刻度标记的大小"""
  8. plt.tick_params(axis='both',which='major',labelsize=14)

  9. plt.show()
复制代码


15.2.8  使用颜色映射
颜色映射 ( colormap )是一系列颜色,它们从起始颜色渐变到结束颜色。在可视化中,颜色映射用于突出数据的规律,例如,你可能用较浅的颜色来显示较小的值,并使用较深
的颜色来显示较大的值。
模块 pyplot 内置了一组颜色映射。要使用这些颜色映射,你需要告诉 pyplot 该如何设置数据集中每个点的颜色。下面演示了如何根据每个点的 y  值来设置其颜色:
scatter_squares.py
  1. import matplotlib.pyplot as plt

  2. x_values = list(range(1,1001))
  3. y_values = [x**2 for x in x_values]

  4. plt.scatter(x_values,y_values,c=y_values,cmap=plt.cm.Blues,
  5.             s=40)
  6. """设置图标标题,并给坐标轴加上标签"""
  7. plt.title("Square Numbers" ,fontsize=24)
  8. plt.xlabel("Value", fontsize=14)
  9. plt.ylabel("Square of Value",fontsize=14)

  10. """设置给每个坐标的取值范围"""
  11. #使用函数 axis() 指定了每个坐标轴的取值范围
  12. #X坐标为0~1100    Y坐标1100000
  13. plt.axis[0,1000,0,1000000]   

  14. plt.show()
复制代码

渐变色的曲线。
此处要是设置成 plt.axis[0,1100,0,1100000]   感觉没有差别?


15.2.9  自动保存图表
要让程序自动将图表保存到文件中,可将对 plt.show() 的调用替换为对 plt.savefig() 的调用:
这里有个问题,图片没有保存。


15.3  随机漫步
15.3.1  创建 RandomWalk()  类
为模拟随机漫步,我们将创建一个名为 RandomWalk 的类,它随机地选择前进方向。这个类需要三个属性,其中一个是存储随机漫步次数的变量,其他两个是列表,分别存储随
机漫步经过的每个点的 x  和 y  坐标。
RandomWalk 类只包含两个方法: __init__() 和 fill_walk() ,其中后者计算随机漫步经过的所有点。下面先来看看 __init__() ,如下所示:
  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on Tue Mar  6 15:51:31 2018

  4. @author: SESA430507
  5. """

  6. from random import choice

  7. class RandomWalk():
  8.     """一个生成随机漫步数据的类"""
  9.    
  10.     def __init__(self,num_points=5000):
  11.         """"初始化随机漫步的属性"""
  12.         self.num_points = num_points
  13.         
  14.         #所有随机漫步属性都始于(0,0)
  15.         self.x_values=[0]
  16.         self.y_values=[0]
  17.    
  18.     def fill_walk(self):
  19.         """计算随机漫步包含的所有点"""
  20.         
  21.         #不断漫步,直到列表大道指定的长度
  22.         while len(self.x_values) < self.num_points:
  23.             
  24.             #决定前进方向以及沿这个方向前进的距离
  25.             x_direction = choice([-1,1])
  26.             x_distance = choice([0,1,2,3,4])
  27.             x_step = x_direction * x_distance
  28.             
  29.             y_direction = choice([-1,1])
  30.             y_distance = choice([0,1,2,3,4])
  31.             y_step = y_direction * y_distance
  32.             
  33.             """拒绝原地踏步"""
  34.             #如果x和y均为0 就从头开始重新循环
  35.             if x_step ==0 and y_step == 0:  
  36.                 continue
  37.             
  38.             #计算下一个点的x和y值
  39.             next_x = self.x_values[-1] + x_step
  40.             next_y = self.y_values[-1] + y_step
  41.             
  42.             self.x_values.append(next_x)
  43.             self.y_values.append(next_y)
复制代码


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-2 13:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表