ptyhon之matplotlib学习

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')





猜你喜欢

转载自blog.csdn.net/weixin_36455036/article/details/79598267