其他分享
首页 > 其他分享> > 08【matplotlib】06matplotlib绘制多次图形和不同图形的差异介绍和总结

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岁等

代码+结果

代码

# -*- 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轴上的刻度间距"""

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

"""给图像添加描述信息"""
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

在这里插入图片描述

标签:11,plt,08,30,06matplotlib,xticks,range,刻度,图形
来源: https://blog.csdn.net/yuhui_2000/article/details/110264353