matplotlib

Posted zhujiongning

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matplotlib相关的知识,希望对你有一定的参考价值。

为什么要学习matplotlib

1.能将数据进行可视化,更直观的呈现

2,使数据更加美观,更有说服力

什么是matplotlib

matplotlib:最流行的python底层绘图库,主要做数据可视化图表,模仿MATLAB构建

基础绘图

案例:

#假设一天中每隔两个小时(range(2,26,2))的气温分别是[15,13,14,5,17,20,25,26,26,24,22,18,15]

#代码

import matplotlib.pyplot as plt
x=range(2,27,2)
y=[15,13,14,5,17,20,25,26,26,24,22,18,15]
plt.plot(x,y)
plt.show()

技术图片

 

 接下来要解决几个问题

1.设置图片的大小

2.调整X或者Y的刻度的间距

3.线条的样式(比如颜色,透明度等)

4.标记处的特殊的点(比如最高点,最低点在哪里)

5.添加水印

6.描述信息,X轴,Y轴表示什么,这个图表示什么

7.保存到本地

设置图片的大小和保存图形

案例

#代码

fig=plt.figure(figsize=(20,8),dpi=100)

#figsize接收一个元组,表示图片的高和宽,单位是英寸

#DPI分辨率,代表了每一英寸有多少像素,默认80
plt.plot(x,y)
plt.show

技术图片

 

 

 

保存图片

案例:

#代码

fig=plt.figure(figsize=(20,8),dpi=100)
plt.plot(x,y)
fig.savefig(‘test.png‘)

#可以保存为SVG这种矢量图格式,放大以后不会有锯齿

#fig.savefig("test.svg")
X轴和Y轴的调整和设置中文

#代码

plt.plot(x,y)

#x轴的刻(度

plt.xticks(x)

plt.yticks(y)

plt.show()

案例2:

列表A表示10点到12点每一分钟的气温,如何绘制折线图观察每分钟气温的变化情况

A=[random.randint(20,35)for i in range (120)]

#代码

import random
import matplotlib as mpl
mpl.rcParams[‘font.sans-serif‘] = [‘FangSong‘]
mpl.rcParams[‘font.size‘] = 16        
y=[random.randint(20,35)for i in range (120)]
x=list(range(120))
fig=plt.figure(figsize=(20,8))
plt.plot(x,y)
xlable=[‘10点{}分‘.format(i) for i in range (60)]
xlable+=[‘11点{}分‘.format(i) for i in range (60)]
plt.xticks(x[::3],xlable[::3],rotation=45)
plt.yticks(y)

plt.show()
技术图片

 

 添加描述的信息

#添加描述
plt.xlabel(‘时间‘,color=‘red‘,fontdict={‘fontsize‘:20})
plt.ylabel(‘温度‘)
#设置标题
plt.title(‘某日10点到12点间的温度变化情况‘)
#添加网格
plt.grid(alpha=0.1)
#其他的和上面一样
一个图中画多个图
案例:根据实际情况统计出来你和你的同桌各自从11岁到30岁每年交的女朋友的数量如列表A和B,请在一个图中绘制出来该数据的折线图,以便于比较自己和同桌20年间的差异,同时分析每年交女朋友的数量走势
A=[1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
B=[1,0,3,1,2,2,3,3,2,1,2,1,1,1,1,1,1,1,1,1]
#代码
import matplotlib.pyplot as plt
import matplotlib as mpl
#设置中文
mpl.rcParams[‘font.sans-serif‘] = [‘FangSong‘] # 用来正常显示中文标签
mpl.rcParams[‘font.size‘] = 16         # 设置字体大小
#构建坐标
#x轴表示年龄,Y轴表示女朋友的个数
x=range(11,31)
y_self = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
y_d = [1,0,3,1,2,2,3,3,2,1,2,1,1,1,1,1,1,1,1,1]
#创建容器
fig=plt.figure(figsize=(20,8))
#画图
plt.plot(x,y_self,label=‘自己‘,color=‘black‘,linestyle=‘-.‘)
plt.plot(x,y_d,label=‘同桌‘)
#设置刻度
x_lables=[‘{}岁‘.format(i) for i in x]
plt.xticks(x,x_lables)
plt.xlabel(‘年龄‘)
plt.ylabel(‘女朋友的个数‘)
plt.title(‘我和同桌历年交女朋友的个数对比‘)
#设置了图例一定要加上这句话
plt.legend()
plt.grid(alpha=0.3)
#标记点
plt.annotate(‘最高点‘,xy=(23,6),xytext=(24,6),arrowprops={‘arrowstyle‘:‘<->‘})
plt.show()

技术图片

 

 散点图

问题:

假设通过爬虫你获取了北京2016年3月份,10月份每天白天的最高气温(分别位于列表A和B中),要求找出气温随时间变化的规律

import matplotlib.pyplot as plt
import matplotlib as mpl
#设置中文
mpl.rcParams[‘font.sans-serif‘] = [‘FangSong‘] # 用来正常显示中文标签
mpl.rcParams[‘font.size‘] = 16         # 设置字体大小
#构建坐标
x_3=list(range(1,32))
y_3=[10, 16, 17, 14, 12, 10, 12, 6, 6, 7, 8, 9, 12, 15, 15, 17, 18, 21, 16, 16, 20, 13, 15, 15, 15, 18, 20, 22, 22, 22, 24]
x_10=[i+50 for i in x_3]
y_10=[26, 26, 28, 19, 21, 17, 16, 19, 18, 20, 20, 19, 22, 23, 17, 20, 21, 20, 22, 15, 11, 15, 5, 13, 17, 10, 11, 13, 12, 13, 6]
#设置容器
fig=plt.figure(figsize=(15,8))
#绘图
plt.scatter(x_3,y_3,label=‘3月份‘)
plt.scatter(x_10,y_10,label=‘10月份‘)
#设置轴刻度
#集合
y=set(y_3+y_10)
min_y=min(y)
max_y=max(y)
plt.yticks(range(min_y,max_y+1))
#x轴
x=x_3+x_10
x_lables=[‘3月{}日‘.format(i) for i in range(1,32)]+[‘10月{}日‘.format(i) for i in range(1,32)]
plt.xticks(x[::2],x_lables[::2],rotation=45)
plt.xlabel(‘日期‘)
plt.ylabel(‘温度(C)‘)
plt.title(‘北京2016年3月份到10月份的气温变化趋势图‘)
plt.grid(alpha=0.3)
plt.legend()
plt.show
#标记点
plt.annotate(‘   最高点‘,xy=(53,28),arrowprops={‘arrowstyle‘:‘<->‘})
plt.show
技术图片

 

 

条形图

假设获取到2019年内地电影票房前20的电影(列表X)和电影票房的数据(列表Y),那么如何更加直观的显示数据

#代码

import matplotlib.pyplot as plt
import matplotlib as mpl
#设置中文
mpl.rcParams[‘font.sans-serif‘] = [‘FangSong‘] # 用来正常显示中文标签
mpl.rcParams[‘font.size‘] = 16         # 设置字体大小
#构建坐标
movies = x= [‘哪吒之魔童降世‘, ‘流浪地球‘, ‘复仇者联盟4:终局之战‘, ‘疯狂的外星人‘, ‘飞驰人生‘, ‘烈火英雄‘, ‘速度与激情:特别行动‘, ‘蜘蛛侠:英雄远征‘, ‘扫毒2天地对决‘, ‘大黄蜂‘, ‘惊奇队长‘, ‘比悲伤更悲伤的故事‘, ‘哥斯拉2:怪兽之王‘, ‘阿丽塔:战斗天使‘, ‘银河补习班‘, ‘狮子王‘, ‘反贪风暴4 ‘, ‘熊出没·原始时代‘, ‘使徒行者2:谍影行动‘, ‘大侦探皮卡丘‘]
y = [49.04, 46.18, 42.05, 21.83, 17.03, 16.74, 14.16, 14.01, 12.85, 11.38, 10.25, 9.46, 9.27, 8.88, 8.64, 8.23, 7.88, 7.09, 6.92, 6.34]
x=range(len(movies))
#设置容器
fig=plt.figure(figsize=(20,8),dpi=100)
#绘图
plt.barh(x,y,)
#设置轴刻度
plt.xticks(x,rotation=90)
plt.xlabel(‘电影名称‘)
plt.ylabel(‘电影票房‘)
plt.title(‘2019年电影的票房‘)
plt.grid(alpha=0.3)
plt.legend()

技术图片

 

 

 

以上是关于matplotlib的主要内容,如果未能解决你的问题,请参考以下文章

Matplotlib一.初识

L7-14 3D图形

numpy和matplotlib绘制直方图

Matplotlib下载安装简单使用

Python绘制图表matplotlib

什么是matplotlib?以及matplotlib简单图形的绘制