一、数据可视化
数据可视化指的是通过可视化表示来探索数据。
数据挖掘指的是使用代码来探索数据集的规律和关联。
二、安装matplotlib
具体的安装方法参照百度。
三、绘制简单的折线图
import matplotlib.pyplot as plt squares=[1,4,9,16,25] plt.plot(squares) plt.show()
首先将matplotlib中的pyplot模块导入,pyplot模块中的plot()函数接收一个列表参数,并尝试将其绘制成有意义的折线图,然后通过pyplot模块中的show()函数将matplotlib的查看器打开,这样plot()函数绘制的折线图就在查看器中显示出来了。
四、修改标签文字和线条粗细
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()
导入的pyplot模块就相当于一个查看器,而图是显示在查看器上的,所以对于图的设置,只需要直接来操作pyplot模块中的函数即可。其中title()函数时用来设置查看器的标题,xlabel()和ylabel()是用来设置x和y轴的标签的,tick_params()是用来设置坐标轴上刻度的,其形参axis表示指定的实参将影响多少个坐标轴上的刻度。
五、校正图形
当向plot()函数提供一系列的数据时,其默认第一个数据对应的x坐标点为0,而我们上面的第一个数据是1,却被默认为了0,所以上面绘出的图形不正确。为避免这种情况,我们可以给plot()函数既提供输入值又提供输出值,例如:
import matplotlib.pyplot as plt input_values = [1, 2, 3, 4, 5] squares = [1, 4, 9, 16, 25] plt.plot(input_values,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()这样plot()就会建立起这些数据之间的真实对应关系。
六、绘制单个点
import matplotlib.pyplot as plt plt.scatter(2,4,s=200) plt.show()
函数scatter()会在指定坐标(2,4)处绘制一个单点。其中s=200表示绘制的单点的大小。
七、绘制一系列的点
import matplotlib.pyplot as plt x_values = [1, 2, 3, 4, 5] y_values = [1, 4, 9, 16, 25] plt.scatter(x_values, y_values, s=100) plt.show()
其中scatter()函数会依次从每个列表中读取一个值组成坐标来绘制一个单点,以上代码一共绘制了5个单点。
八、生成数据来绘制图
import matplotlib.pyplot as plt x=list(range(1,1001)) y=[m**2 for m in x] plt.scatter(x,y,s=40) plt.axis([0,1100,0,1100000]) plt.show()
其中需要解释的就是axis()了,它指定了x和y轴刻度的起始范围。
九、删除单点的轮廓
scatter()函数默认绘制的点是蓝色点和黑色轮廓,如果想要将轮廓删除,其实就是修改轮廓的颜色为无色,例如plt.scatter(x,y,edgecolor='none',s=40)。
十、修改绘制的点的颜色
例如:plt.scatter(x,y,c=p,edgecolor='none',s=40)其中p可以是字符串,比如'red'等,还可以是元组,比如(0,0,0.8),其中各值越接近0则颜色越深,越接近1则颜色越浅。
十一、颜色映射
颜色映射个人理解为就是根据数据值来设置对应的颜色,形成数据值与颜色的一一映射。在pyplot中内置了一组颜色映射。例如:
import matplotlib.pyplot as plt x=list(range(1,1001)) y=[m**2 for m in x] plt.scatter(x,y,c=y,cmap=plt.cm.Blues,edgecolor='none',s=40) plt.axis([0,1100,0,1100000]) plt.show()
其中给c指定值为y轴数据,y轴的数据是由小变大的,再指定cmap使用的是Blues颜色映射,这样就会让绘制出来的点中值小的颜色浅,值大的颜色深。
十二、自动保存图表
要实现这个功能,需要注意是使用plt.savefig('hh',bbox_inches='tight')替换掉plt.show(),这样就会将图表保存为当前工作目录下的hh.png图片,并且第二个参数bbox_inches='tight'表示将图表多余的空白区域裁剪掉。
十三、随机漫步
1.首先需要知道什么是随机漫步,随机漫步就是这样行走得到的路径:每次行走都完全是随机的,并没有明确的方向,而这样行走的结果是由一系列随机决策决定的。再简单地理解为随机漫步就是一只蚂蚁在晕头转向的情况下,每次都沿着随机的方向前行所经过的路径。这些解释完全是书本上的,不过通俗易懂,直接抄来了。
2.我们首先创建一个RandomWalk类,来产生随机漫步后生成的一系列点的坐标(每走一步,就会到达一个新的点)。RandomWalk类如下:
from random import choice class RandomWalk(): '''一个生成随机漫步数据的类''' def __init__(self,num_points=5000): '''初始化随机漫步的属性''' self.num_points=num_points #所有随机漫步都始于(0,0) self.x_values=[0] self.y_values=[0] def fill_walk(self): '''计算随机漫步包含的所有点''' while len(self.x_values)<self.num_points: x_direction=choice([1,-1]) x_diatance=choice([0,1,2,3,4]) x_step=x_direction*x_diatance y_direction=choice([1,-1]) y_diatance=choice([0,1,2,3,4]) y_step=y_direction*y_diatance if x_step==0 and y_step==0: continue 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)
要生成随机的数字,首先需要导入random模块中的choice函数,这个函数接收一个列表,并随机选择列表中的一个元素作为返回值。既然是随机漫步,那么就需要知道下一步往哪个方向走多少距离,这样每一次就叫做一次决策,使用choice就实现了随机决策。每到达一个新点,就将该点的坐标存入列表。
十四、设置坐标轴不可见
可以使用
plt.axes().get_xaxis().set_visible(False) plt.axes().get_yaxis().set_visible(False)
来将坐标轴隐藏,其中axes表示坐标轴,axis就表示某一个坐标轴
十五、调整查看器的尺寸
可以使用plt.figure(dpi=128, figsize=(10, 6)) 来调整查看器的大小,其中dpi表示屏幕的分辨率,可以省略。figsize是来设置查看器的大小的,它是一个元组。
十六、Pygal介绍
使用Pygal可以用来绘制可以缩放的矢量图。这种图可以跟随不同的屏幕尺寸自动调整图的大小。
十七、安装Pygal
在Windows中使用python -m pip install --user pygal来安装。
十八、使用pygal来绘制直方图
1.我们来模拟一个六面的骰子投掷100次,记录下这100次中每一个面出现的频率,并将频率用直方图显示出来。首先需要建立一个die模块,里面包含有一个Die类,它用来获得模拟投骰子的结果。例如:
from random import randint class Die(): def __init__(self,num_sides=6): self.num_sides=num_sides def roll(self): return randint(1,self.num_sides)
这段代码没有什么难点。
2.接下来,我们在die_visual.py中来绘制直方图,例如:
import pygal from die import Die 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) hist=pygal.Bar() hist.title='结果' hist.x_labels=['1','2','3','4','5','6'] hist.x_title='Result' hist.y_title='频率' hist.add('D6',frequencies) hist.render_to_file('die_visual.svg')这里新出现了一个方法results.count(p),这个方法会计算p在列表results中出现的次数。