动手
题目
假设大家在30岁的时候,根据自己的实际情况,统计出来了从11岁到30岁每年交的女(男)朋友的数量如列表a,请绘制出该数据的折线图,以便分析自己每年交女(男)朋友的数量走势
a = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
要求:
y轴表示个数
x轴表示岁数,比如11岁,12岁等
代码+结果
代码
# -*- coding: utf-8 -*-
'''
@Time : 2020/11/28 12:26
@Author : yuhui
@Email : 3476237164@qq.com
@FileName: matplotlib_4.py
@Software: PyCharm
'''
"""08【matplotlib】06matplotlib绘制多次图形和不同图形的差异介绍和总结"""
"""
假设大家在30岁的时候,根据自己的实际情况,统计出来了从11岁到30岁每年交的女(男)朋友的数量如列表a,请绘制出该数据的折线图,以便分析自己每年交女(男)朋友的数量走势
a = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
要求:
y轴表示个数
x轴表示岁数,比如11岁,12岁等
"""
import matplotlib.pyplot as plt
# 解决中文乱码
plt.rcParams["font.sans-serif"]=["KaiTi"]
plt.rcParams["font.family"]="sans-serif"
# 解决符号无法显示的问题
plt.rcParams['axes.unicode_minus'] = False # 解决保存图像时负号'-'显示为方块的问题
fig=plt.figure(
figsize=(16,9),
dpi=100
)
"""x轴数据和y轴数据"""
x=range(11,31) # 11岁到30岁
y=[1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
plt.plot(x,y)
"""调整x轴和y轴的刻度"""
# 调整y轴的刻度
_y=y
plt.yticks(range(min(_y),max(_y)))
# 调整x轴的刻度
_x=x
_xticks=[f"{i}岁" for i in range(11,31)]
plt.xticks(_x,_xticks,rotation=45)
"""添加描述性信息"""
plt.xlabel("年龄/岁")
plt.ylabel("人数/人")
plt.title("从11岁到30岁每年交的女(男)朋友的数量")
# 展示
plt.show()
结果
为图像背景添加网格线
我们通过网格线能够大概地知道这个点大概是在什么位置
默认情况下
在这种情况下,matplotlib是如何绘制网格线的?
这种情况:没有传递任何参数,也就是默认的情况
那么,在这种情况下,我们应该如何设置网格线的密集程度呢?
可以通过改变x轴和y轴的刻度的疏密程度来改变网格线的密集程度
设置网格线的属性
透明度
最终的代码+结果
# -*- coding: utf-8 -*-
'''
@Time : 2020/11/28 12:26
@Author : yuhui
@Email : 3476237164@qq.com
@FileName: matplotlib_4.py
@Software: PyCharm
'''
"""08【matplotlib】06matplotlib绘制多次图形和不同图形的差异介绍和总结"""
"""
假设大家在30岁的时候,根据自己的实际情况,统计出来了从11岁到30岁每年交的女(男)朋友的数量如列表a,请绘制出该数据的折线图,以便分析自己每年交女(男)朋友的数量走势
a = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
要求:
y轴表示个数
x轴表示岁数,比如11岁,12岁等
"""
import matplotlib.pyplot as plt
# 解决中文乱码
plt.rcParams["font.sans-serif"]=["KaiTi"]
plt.rcParams["font.family"]="sans-serif"
# 解决符号无法显示的问题
plt.rcParams['axes.unicode_minus'] = False # 解决保存图像时负号'-'显示为方块的问题
fig=plt.figure(
figsize=(16,9),
dpi=100
)
"""x轴数据和y轴数据"""
x=range(11,31) # 11岁到30岁
y=[1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
plt.plot(x,y)
"""调整x轴和y轴的刻度"""
# 调整y轴的刻度
_y=y
# plt.yticks(range(min(_y),max(_y)))
# 调整横向网格线的疏密程度
plt.yticks(range(9))
# 调整x轴的刻度
_x=x
_xticks=[f"{i}岁" for i in range(11,31)]
plt.xticks(_x,_xticks,rotation=45)
"""添加描述性信息"""
plt.xlabel("年龄/岁")
plt.ylabel("人数/人")
plt.title("从11岁到30岁每年交的女(男)朋友的数量")
"""设置图片的背景"""
# 绘制网格线
plt.grid(
alpha=0.4, # 透明度 0~1 透明~不透明
)
# 展示
plt.show()
再动手一次
题目
假设大家在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岁等
代码+结果1.0
# -*- coding: utf-8 -*-
'''
@Time : 2020/11/28 13:38
@Author : yuhui
@Email : 3476237164@qq.com
@FileName: matplotlib_5.py
@Software: PyCharm
'''
"""08【matplotlib】06matplotlib绘制多次图形和不同图形的差异介绍和总结"""
"""
假设大家在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岁等
"""
import matplotlib.pyplot as plt
# 解决中文乱码
plt.rcParams["font.sans-serif"]=["KaiTi"]
plt.rcParams["font.family"]="sans-serif"
# 解决符号无法显示的问题
plt.rcParams['axes.unicode_minus'] = False # 解决保存图像时负号'-'显示为方块的问题
fig=plt.figure(
figsize=(16,9),
dpi=100
)
"""x轴数据和y轴数据"""
x=range(11,31) # 11岁到30岁
y_1 = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1] # 自己
y_2 = [1,0,3,1,2,2,3,3,2,1 ,2,1,1,1,1,1,1,1,1,1] # 同桌
# 在同一张画布上同时绘制出两个图
plt.plot(x,y_1)
plt.plot(x,y_2)
# 设置x轴和y轴的刻度数据
# x轴
_x=x
_xticks=[f"{i}岁" for i in range(11,31)]
plt.xticks(_x,_xticks)
# y轴
_y=y_1+y_2
plt.yticks(range(min(_y),max(_y)+1))
# 绘制网格线
plt.grid(
alpha=0.4,
)
plt.show()
问题
当我们将这个图给别人看的时候,别人可能不会很明白,哪个颜色对应的是哪一组数据。
为每一条线添加标注
如何改变图例框的位置?
=============== =============
Location String Location Code
=============== =============
'best' 0
'upper right' 1
'upper left' 2
'lower left' 3
'lower right' 4
'right' 5
'center left' 6
'center right' 7
'lower center' 8
'upper center' 9
'center' 10
=============== =============
设置图线的属性
颜色
线型
同理,我们也可以通过这个参数设置网格线的线型
线的粗细
再谈线的颜色
如果我们想不到一个合适的单词来形容自己想要的颜色,其实是可以使用颜色的十六进制
https://www.sioe.cn/yingyong/yanse-rgb-16/
总结
- 绘制了折线图
plt.plot()
- 设置了图片的大小和分辨率
fig=plt.figure(
figsize=(16,9),
dpi=100
)
- 实现了图片的保存
plt.savefig("../data/fig_size.svg")
- 设置了x、y轴上的刻度和字符串
"""设置x轴和y轴上的刻度间距"""
# y轴刻度间距
_yticks=range(min(y),max(y))
plt.yticks(_yticks)
# 调整x轴的刻度
# 将x轴上的刻度字符由数字转变为字符串
# _x=list(x)[::10] # 取步长为10
# _xticks=[f"hello,{i}" for i in _x]
# plt.xticks(_x,_xticks)
"""注意:
当x轴上的刻度是数字的时候,对于plt.xticks()我们只需要传递一个参数,这个参数它是数字,plt.xticks会把这个参数全部绘制在x轴上;
当x轴上的刻度是字符串的时候,我们需要传递两个参数,一个是数字,一个是字符串,我们要将字符串和数字进行一一对应,由于是一一对应的关系,所以说,数字的长度和字符串的长度必须是一样的
"""
# 设置x轴上刻度字符为“XX点XX分”
_x=list(x)
_xticks=[f"10点{i}分" for i in range(60)]
_xticks+=[f"11点{i}分" for i in range(60)]
plt.xticks(_x[::10],_xticks[::10],rotation=45) # 注意保证数字和字符串之间是一一对应的关系
# rotation=90 旋转的度数
# 把数值型数据对应在字符串上
- 解决了刻度稀疏和密集的问题
# 设置x轴的刻度
# plt.xticks(x)
# 设置x轴刻度的间隔
# plt.xticks(range(2,26,1)) # 间隔为1 密集
# plt.xticks(range(2,26,10)) # 间隔为10 稀疏
# 设置间隔为0.5 自己传入一个列表
# plt.xticks([0.5*i for i in range(4,49)])
# 感觉有点太密集了 怎么变稀疏呢 取步长
plt.xticks([0.5*i for i in range(4,49)][::3])
# plt.xticks(range(25,50)) # 传递一个错误的刻度
# 调整y轴的刻度的间隔
# plt.yticks([15,13,14.5,17,20,25,26,26,27,22,18,15])
plt.yticks(range(min(y),max(y)+1))
- 设置了标题、x、y轴的标签
"""给图像添加描述信息"""
plt.xlabel("时间/min") # 设置x轴的描述信息
plt.ylabel("温度/℃") # 设置y轴的描述信息
plt.title("10点到12点每分钟的气温变化情况") # 图的标题
- 设置了中文字体
# 解决中文乱码
plt.rcParams["font.sans-serif"]=["KaiTi"]
plt.rcParams["font.family"]="sans-serif"
# 解决符号无法显示的问题
plt.rcParams['axes.unicode_minus'] = False # 解决保存图像时负号'-'显示为方块的问题
- 在一个图上绘制多个图形
"""x轴数据和y轴数据"""
x=range(11,31) # 11岁到30岁
y_1 = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1] # 自己
y_2 = [1,0,3,1,2,2,3,3,2,1,2,1,1,1,1,1,1,1,1,1] # 同桌
# 在同一张画布上同时绘制出两个图
plt.plot(
x,y_1,
label="自己",
# color="orange", # 线的颜色
color="#00FF00", # 线的颜色 Lime 酸橙色 #00FF00 0,255,0
linestyle="--", # 线型
linewidth=5, # 粗细
)
plt.plot(x,y_2,label="同桌",
color="#BA55D3", # MediumOrchid 适中的兰花紫 #BA55D3 186,85,211
# color="cyan",
linestyle=":",
linewidth=3,
)
- 为不同的图线添加图例
# 在同一张画布上同时绘制出两个图
plt.plot(
x,y_1,
label="自己",
# color="orange", # 线的颜色
color="#00FF00", # 线的颜色 Lime 酸橙色 #00FF00 0,255,0
linestyle="--", # 线型
linewidth=5, # 粗细
)
plt.plot(x,y_2,label="同桌",
color="#BA55D3", # MediumOrchid 适中的兰花紫 #BA55D3 186,85,211
# color="cyan",
linestyle=":",
linewidth=3,
)
# 让“自己”和“同桌”这两个label在图上显示出来
# 添加图例
plt.legend(
loc="lower right", # 改变图例框的位置
)
# plt.legend()会结合plt.plot中的label参数,将标注显示在图上
以上统统很重要
matplotlib官方文档
https://matplotlib.org/
https://matplotlib.org/api/pyplot_summary.html
对比常用统计图
https://www.cnblogs.com/springionic/p/11147960.html