数据分析之matplotlib—折线图 学习笔记

本文介绍了如何使用Conda创建Python环境,并通过Matplotlib创建折线图,包括设置中文字体、密集刻度处理和绘制不同场景下的气温变化、朋友数量趋势。详细展示了如何在matplotlib中定制图形风格和添加图例。
摘要由CSDN通过智能技术生成

Conda环境安装:

# 创建环境
	conda create --name python3 python=3

# 切换环境:
	windows :activate python3
	linux/macos : source activate python3
	
# 官方地址:  
	https://www.anaconda.com/download/
# 清华大学镜像站
	https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/

安装完conda,会自带一个jupyter notebook软件
jupyter notebook:一款本地Web编程/文档/笔记/展示软件
启动命令:jupyter notebook
在这里插入图片描述


matplotlib:

最流行的Python底层绘图库,主要做数据可视化图表,名字取材于MATLAB,模仿MATLAB构建

matplotlib默认不支持中文字符,因为默认的英文字体无法显示汉字
查看linux/mac下面支持的字体:

fc-list   # 查看支持的字体
fc-list :lang=zh # 查看支持的中文(冒号前面有空格)

如何修改matplotlib的默认字体?
通过matplotlib.rc可以修改,具体方法参见源码(windows/linux)
通过matplotlib 下的font_manager可以解决

折线图

1.) 假设一天中每隔两个小时(range(2,26,2))的气温(℃)分别是[15,13,14.5,17,20,25,26,26,27,22,18,15],画出其变化趋势。

# coding:utf-8

from matplotlib import pyplot as plt

x = range(2, 26, 2)	# 数据在x轴的位置,是一个可迭代对象,从2-26,步长为2,取左不取右
y = [15,13,14.5,17,20,25,26,26,27,22,18,15]	# 数据在y轴的位置,是一个可迭代对象
# x轴和y轴的数据一起组成了所有要绘制的坐标,分别是(2,15),(4,13),(6,14.5)等

# 设置图片大小,dpi设置清晰度
fig = plt.figure(figsize=(20,8),dpi=80)

# 设置坐标轴刻度
# plt.xticks(x)
xtrict_labels = [i/2 for i in range(4,49)]
# plt.xticks(xtrict_labels[::2])  # 当刻度太密集时,使用列表的步长(间隔取值)来解决,matplotlib会自动帮我们对应
plt.xticks(range(2,25))
plt.yticks(range(min(y),max(y)+1))

# 绘图,传入x和y,通过plot绘制折线图
plt.plot(x,y)

# 展示图形
plt.show()

# 保存图形
 plt.savefig("./p1.png")

结果:
在这里插入图片描述
2.) 那么问题来了:
如果列表a表示10点到12点的每一分钟的气温,如何绘制折线图观察每分钟气温的变化情况?
a= [random.randint(20,35) for i in range(120)]

# coding:utf-8
from matplotlib import pyplot as plt
import random
import matplotlib
from matplotlib import font_manager

# matplotlib默认不支持中文字符,因为默认的英文字体无法显示汉字
# windows和linux设置字体的方式,这个设置为全局设置,只用在该处修改即可(Windows和Linux下有效)
# font = {'family' : 'Microsoft Yahei',
#         'weight' : 'bold',}
#         # 'size' : 'large'}
# matplotlib.rc("font", **font)
# matplotlib.rc("font", family='Microsoft Yahei', weight='bold')

# 另外一种设置中文字体的方式,指定字体文件的具体路径为绝对路径,然后在需要显示中文的地方添加fontproperties参数。
my_font = font_manager.FontProperties(fname="/usr/share/fonts/truetype/arphic/uming.ttc")

x = range(0,120)
y = [random.randint(20,35) for i in range(120)]
fig = plt.figure(figsize=(20,8),dpi=80)

plt.plot(x,y)

# 调整x轴的刻度
_x = list(x)
_xtick_labels = ["10点{}分".format(i) for i in range(60)]
_xtick_labels += ["11点{}分".format(i) for i in range(60)]

# 取步长,数据和字符串一一对应,数据的长度一样
# _x和_xtick_labels的数据都传入,最终会在x轴上一一对应的显示出来。两组数据的长度必须一样,否则不能完全覆盖整个轴
# 使用列表的切片,每隔3个数选一个数据进行显示,为了让字符串不被覆盖,使用rotation选项让字符串旋转45度显示
plt.xticks(_x[::3], _xtick_labels[::3], rotation=45, fontproperties=my_font)    # rotation旋转的度数
# plt.xticks(_x[::3], _xtick_labels[::3], rotation=45)    # rotation旋转的度数

# 添加描述信息
plt.xlabel("时间", fontproperties=my_font)	# 设置x轴的label
plt.ylabel("温度 单位(℃)", fontproperties=my_font)	# 设置y轴的label
plt.title("10点到12点每分钟的气温变化情况", fontproperties=my_font)	# 设置title

plt.show()

结果:
在这里插入图片描述
3.) 假设大家在30岁的时候,根据自己的实际情况,统计出来了你和你同桌各自从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]
要求:
y轴表示个数
x轴表示岁数,比如11岁,12岁等

# coding:utf-8
import matplotlib
from matplotlib import  pyplot as plt
from matplotlib import font_manager

x = range(11,31)
y = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
z = [1,0,3,1,2,2,3,3,2,1,2,1,1,1,1,1,1,1,1,1]

# 设置图形大小
plt.figure(figsize=(20,8),dpi=80)

plt.plot(x,y,color="r",label='自己',linestyle=':',linewidth=3)	# 通过label指定显示的图例内容
plt.plot(x,z,color='g',label='同桌',linestyle='-.')	# 通过label指定显示的图例内容

# 设置中文字体的方式,指定字体文件的具体路径为绝对路径,然后在需要显示中文的地方添加fontproperties参数。
my_font = font_manager.FontProperties(fname="/usr/share/fonts/truetype/arphic/uming.ttc")

# 绘制网格 alpha:透明度
plt.grid(alpha=0.4,linestyle='--')

# 设置x轴刻度
_xticks_labels = ["{}岁".format(i) for i in x]
plt.xticks(x, _xticks_labels,fontproperties=my_font)
plt.yticks(range(0,9))

# 添加描述信息
plt.xlabel("年龄", fontproperties=my_font)
plt.ylabel("女朋友个数 单位个)", fontproperties=my_font)
plt.title("11岁到30岁每年交的的女朋友个数", fontproperties=my_font, size="xx-large", weight='bold')

# 添加图例 , 注意这里设置字体是 prop 参数,loc参数指定图例位置,默认为右上角
plt.legend(prop=my_font,loc='upper right')
# plt.legend(prop=my_font,loc=2)

# 展示
plt.show()

结果
在这里插入图片描述
自定义绘制图形的风格
在这里插入图片描述

总结

1.绘制了折线图(plt.plot)
2.设置了图片的大小和分辨率(plt.figure)
3.实现了图片的保存(plt.savefig)
4.设置了xy轴上的刻度和字符串(xticks)
5.解决了刻度稀疏和密集的问题(xticks)
6.设置了标题,xy轴的lable(title,xlable,ylable)
7.设置了字体(font_manager. fontProperties,matplotlib.rc)
8.在一个图上绘制多个图形(plt多次plot即可)
9.为不同的图形添加图例

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值