数据可视化与数据挖掘紧密相关最流行的工具之一是matplotlib,她是一个数学绘图库!
matplotlib可制作各种图表,可访问链接:http://matplotlib.org/内涵各种事列!
1、绘制简单的折线图
使用平方数序列1、4、9、16、25来绘制 这个图标
首先建立一个mpl_squares.py文件
import matplotlib.pyplot as plt #导入pyplot模块,并制定别名plt
squares=[1,4,9,16,25]
plt.plot(squares) #讲存储的平方数序列传递给plot()函数
plt.show() #打开matplotlib查看器
运行即可 Ctrl+shift+f10效果图如下:
2、升级版(加粗线条、刻度标记大小、给定坐标轴标签)
import matplotlib.pyplot as plt
squares=[1,4,9,16,25]
plt.plot(squares,linewidth=5)#线条加粗
#设置图标标题,并给坐标轴加上标签
plt.title("Head Label",fontsize=24) #头标签,给定字体大小
plt.xlabel("X Abscissa",fontsize=14) #横坐标
plt.ylabel("Y Ordinate",fontsize=14) #纵坐标
#设置刻度标记的大小
plt.tick_params(axis='both',labelsize=14)
plt.show()
运行即可 Ctrl+shift+f10效果图如下:
相比于第一个视觉效果好些了!
3、视觉效果加强了,查看图片发现并没有绘制正确的数据(4.0处指定在了25!)
1、 当你向plot()提供一系列数字的时候,它假设第一个数据点对应的是x横坐标值为0,但我们第一个对应的点是x值为1。
2、改变此现象方法有,给plot()同时提供输入值和输出值即可!
import matplotlib.pyplot as plt
input_squares=[1,2,3,4,5] #提供了输入值
squares=[1,4,9,16,25]
plt.plot(input_squares,squares,linewidth=5)#传递了输入值和输出值
#设置图标标题,并给坐标轴加上标签
plt.title("Head Label",fontsize=24) #头标签,给定字体大小
plt.xlabel("X Abscissa",fontsize=14) #横坐标
plt.ylabel("Y Ordinate",fontsize=14) #纵坐标
#设置刻度标记的大小
plt.tick_params(axis='both',labelsize=14)
plt.show()
改动了2至4行代码!!!(看注释)
运行即可 Ctrl+shift+f10效果图如下:
使用plot()时,可指定各种实参,还有很多函数对图形进行定制!
4、绘制单个点,可使用scatter(),并向它传递一对X和Y坐标
新建一个scatter_squares.py文件
import matplotlib.pyplot as plt
plt.scatter(2,4,s=200)
#设置图标标题,并给坐标轴加上标签
plt.title("Head Label",fontsize=24) #头标签,给定字体大小
plt.xlabel("X Abscissa",fontsize=14) #横坐标
plt.ylabel("Y Ordinate",fontsize=14) #纵坐标
#设置刻度标记的大小
plt.tick_params(axis='both',which='major',labelsize=14)
plt.show()
运行即可 Ctrl+shift+f10效果图如下:
plt.scatter(2,4,s=200)调用了scatter()函数,X坐标2,Y坐标4,哪S是什么呢??
S是是指定的点的尺寸,如图中你会发现这个点是不是很粗!
5、可不可以使用scatter(),绘制一系列的点呢???
当然可以!!我们可以向scatter()传递两个列表分别包含X至和Y值
import matplotlib.pyplot as plt
x_value=[1,2,3,4,5]
y_value=[1,4,9,16,25]
plt.scatter(x_value,y_value,s=100)
#设置图标标题,并给坐标轴加上标签
plt.title("Head Label",fontsize=24) #头标签,给定字体大小
plt.xlabel("X Abscissa",fontsize=14) #横坐标
plt.ylabel("Y Ordinate",fontsize=14) #纵坐标
#设置刻度标记的大小
plt.tick_params(axis='both',which='major',labelsize=14)
plt.show()
运行即可 Ctrl+shift+f10效果图如下:
6、前5点都是手动输入(如果数据过多)效率就会低下,这时候我们可以考虑自动计算数据
利用循环来完成计算,绘制1000个点代码如下:
import matplotlib.pyplot as plt
x_value=list(range(1,1001))
y_value=[x**2 for x in x_value]
plt.scatter(x_value,y_value,s=20)
#设置图标标题,并给坐标轴加上标签
plt.title("Head Label",fontsize=24) #头标签,给定字体大小
plt.xlabel("X Abscissa",fontsize=14) #横坐标
plt.ylabel("Y Ordinate",fontsize=14) #纵坐标
plt.axis([0,1100,0,1100000])
plt.show()
x_value=list(range(1,1001))
建立一个列表,包含1000个数字
y_value=[x**2 for x in x_value]
计算平方值,x值通过上方列表遍历得出来的,最终储存在y_value列表中
plt.axis([0,1100,0,1100000])
给定x轴范围0-1000,y轴范围0~1100000
运行即可 Ctrl+shift+f10效果图如下:
plt.scatter(x_value,y_value,edgecolors=‘none’,s=20)
补充一点,绘制很多点时候,轮廓可能会黏在一起,要删除数据点的轮廓可以在scatter()函数中使用edgecolors=‘none’
plt.scatter(x_value,y_value,c=‘red’,edgecolors=‘none’,s=20)
自定义颜色
向scatter()函数传递参数c,给定颜色名称(这里我就用红色举例下过如下,效果图见图一)
也可以使用RGB颜色模式自定义颜色
向scatter()函数传递参数c,其中包含三个0~1之间的小数值,分别代表红、绿、蓝分量(这里我举例了c=(0.5,0,0.8)效果为紫色,代码如下,效果图见图二)
plt.scatter(x_value,y_value,c=(0.5,0,0.8),edgecolors=‘none’,s=20)
图一:
图二:
7、单色,是不是太过于单调,这里我们可以使用渐变色
pyplot内置了一组颜色映射,你需要告诉pyplot该如何设置每个点颜色:
import matplotlib.pyplot as plt
x_value=list(range(1,1001))
y_value=[x**2 for x in x_value]
plt.scatter(x_value,y_value,c=y_value,cmap=plt.cm.Blues,edgecolors='none',s=20)
#设置图标标题,并给坐标轴加上标签
plt.title("Head Label",fontsize=24) #头标签,给定字体大小
plt.xlabel("X Abscissa",fontsize=14) #横坐标
plt.ylabel("Y Ordinate",fontsize=14) #纵坐标
plt.axis([0,1100,0,1100000])
plt.show()
plt.scatter(x_value,y_value,c=y_value,cmap=plt.cm.Blues,edgecolors=‘none’,s=20)
这里将c设置成了一个y值列表,并使用参数cmap告诉pylot要使用哪个颜色映射。
这里的意思是将y值最小的点设置显示为浅蓝色,y值较大的点显示为深蓝色(效果图如下:)
pyplot中所有的颜色的映射,可访问http://matplotlib.org/单机Examples,向下滚动到Color Examples,在点击colormaps_reference
7、最后一步,自动保存图标
plt.show()我们可以替换为plt.savefig()
plt.savefig('zjz.png',bbox_inches='tight')
‘zjz.png’
图片的文件名
bbox_inches=‘tight’
指定将图标多余的空白区域裁剪
文件图片会自动保存在mpl_squares.py同级目录下
效果如下:
双击显示效果如下: