matplotlib是python中最常用的可视工具之一,可以非常方便地创建海量类型的2D图表和一些基本的3D图表。
matplotlib能够创建多数类型的图表,如条形图、散点图、饼图、堆叠图,3D图和地图图表
一、2D图表
最基本的模块是pyplot
(1)、基本图例、标题和标签
import matplotlib as mpl import matplotlib.pyplot as plt
#设置字体大小必须放在代码前面 mpl.rcParams['xtick.labelsize'] = 24#通过rcParams设置全局横纵字体大小 plt.rcParams['ytick.labelsize'] = 24 #通过plt.rcParams设置局部衡中字体的大小plt.plot([1, 2, 3], [4, 5, 6], label='First Line')plt.plot([1, 2, 3],[10, 14, 12], label='Second Line')plt.xlabel('X')plt.ylabel('Y')plt.title('matplotlib study')#创建标题plt.legend()#生成默认图例plt.show()
显示结果:
(2)、条形图和直方图
plt.figure('data') plt.bar([1, 5, 7, 8], [2, 3, 4, 5], label='one') plt.bar([2, 3, 6, 9], [9, 4, 3, 2], label='two') plt.xlabel('x')#x轴 plt.ylabel('y')#y轴 plt.title('Rect Study')#创建标题 plt.legend()#生成默认图例 plt.savefig('1.png') plt.show('asd')
再介绍一下 plt.hist()函数
plt.figure('hist') population_ages = [20,12,8,55,62,45,21,22,34,42,42,4,99,102,110,120,121,122,130,111,115,112,80,75,65,54,44,43,42,48] bins = [0,10,20,30,40,50,60,70,80,90,100,110,120,130] plt.hist(population_ages, bins, histtype='bar', rwidth=0.8) plt.xlabel('x') plt.ylabel('y') plt.title('hist study') plt.legend() plt.savefig('2.png') plt.show()
plt.hist();第一参数代表所要测试的不同阶段分组数,bins代表每个10个单位进行查找第一参数中在该阶段的个数,第三个参数代表呈现的形式是矩形,第四个参数是矩形在10个单位中所占的比列,在0-1范围中
(3) 散点图
用于比较两个变量寻找相关性或分组
#设置rcParams全局横纵轴字体大小 mpl.rcParams['xtick.labelsize'] = 24 mpl.rcParams['ytick.labelsize'] = 24 np.random.seed(42) # x轴的采样点 x = np.linspace(0, 5, 100)#等差取值 在0-5之间去100个数 #通过下面曲线加上噪声生成数据,所以模拟模型就用y了 y = 2*np.sin(x) + 0.3*x**2 y_data = y + np.random.normal(scale=0.3, size=100) #点图表示 plt.figure('data0') plt.plot(x, y_data, '.') plt.title('point study') plt.xlabel('x') plt.ylabel('y') plt.legend() plt.savefig('3.png') #线图表示 plt.figure('data1') plt.plot(x, y_data) plt.savefig('4.png') #点线一起表示 plt.figure('data2') plt.plot(x, y_data, 'k', lw = 3)#’k‘线的颜色,lw表示线的宽度 # 将scatter可以更容易地生成散点图 plt.scatter(x,y_data) plt.savefig('5.png') plt.show()
data0图:
data1图:
data2图:
(4) 堆叠图
用于显示【部分对整体】随时间的关系,基本类似饼图,只是随时间的而变化
days = [1, 2, 3, 4] sleep = [7, 6, 12, 9] eat = [1, 4, 9, 3] work = [2, 4, 3, 8] play = [3, 5, 7, 13] plt.plot([],[],color='m', label='sleep', linewidth=5) plt.plot([],[],color='c', label='eat', linewidth=5) plt.plot([],[],color='r', label='work', linewidth=5) plt.plot([],[],color='k', label='play', linewidth=5) plt.stackplot(days, sleep,eat,work,play, colors=['m', 'c', 'r', 'k']) plt.xlabel('x') plt.ylabel('y') plt.title('dui die study') plt.legend() plt.savefig('6.png') plt.show()
图:
(5)饼图
用于显示部分对整体的情况,通常以%维单位,matplotlib会处理切片大小以及一切事情,我们只需要提供数值
slices = [7, 3, 10, 4] actives = ['sleep', 'eat', 'work', 'play'] cols = ['c', 'm', 'r', 'b']
#slices每个部分的大小,lables 每个分相对的颜色,startangle起始角度,逆时针的,shadow是阴影,explode是拉出的切片,autopct是将百分比放在图表上面
plt.pie(slices, labels=actives, startangle=90, shadow=True, explode=(0,0.1,0,0), autopct='%1.1f%%')#plt.xlabel('x')#plt.ylabel('y')plt.title('bing study')plt.savefig('7.png')plt.show()
(6)柱状图和饼图综合示例
speed ={'dog':(78,'c'), 'cat':(45,'r'), 'cheetah':(100,'b')} fig = plt.figure('rectangle') ax = fig.add_subplot(121)#在整张图上加入一个子图,121是在1行2列的子图中的第一张 ax.set_title('runing-speed') xticks = np.arange(3)#生成x轴每个元素的位置 bar_width = 0.5#柱的宽度 anmals = speed.keys() speeds = [x[0] for x in speed.values()]#奔跑速度 colors = [x[1] for x in speed.values()]#对应颜色 #画主图,横轴是动物标签的位置,纵轴是速度,定义柱的宽度,同时设置柱的边缘为透明的 bars = ax.bar(xticks,speeds,width = bar_width,edgecolor='none') #设置y的标题 ax.set_ylabel('Speed(km/h)') ax.set_xticklabels(xticks+bar_width/2) ax.set_xticklabels(anmals) ax.set_xlim([bar_width/2-0.5, 3-bar_width/2]) ax.set_ylim([0,125]) ax = fig.add_subplot(122) ax.set_title("pie chart") labels = ['{}\n km/h'.format(a, s) for a, s in zip(anmals, speeds)] ax.pie(speeds, labels=labels, colors=colors) plt.axis() plt.savefig('8.png')