matplotlib基本知识

Matplotlib库的效果
http://matplotlib.org/gallery.html

1. 折线图

案例一

假设一天中每隔两个小时(range(2,26,2))的气温(℃)为
[15, 13, 14.5, 17, 20, 25, 26, 26, 27, 22, 18, 15]

from matplotlib import pyplot as plt
x = range(2, 26, 2)  # x轴坐标
y = [15, 13, 14.5, 17, 20, 25, 26, 26, 27, 22, 18, 15]  # y轴坐标
# 设置了图片的大小和分辨率
plt.figure(figsize=(10, 6), dpi=80)
# 通过 plot画出折线
plt.plot(x, y)
# 设置 x的刻度
plt.xticks(x)
# 设置折线标题  fontproperties属性设置中文字体
plt.title("温度的变化", fontproperties='simhei', fontsize=20)
# 设置 x轴标签
plt.xlabel('时间', fontproperties='simhei', fontsize=16)
# 设置 y轴标签
plt.ylabel('温度', fontproperties='simhei', fontsize=16)
# 将输出图形存储为文件,默认 PNG格式,可以通过 dpi修改输出质量
plt.savefig("./test.png", dpi=80)
# 设置网格  alpha透明度  网格也可以设置 linestyle
plt.grid(alpha=0.6, linestyle="--")
# 显示折线
plt.show()

在这里插入图片描述

常用样式
中文字体
中文字体说明
‘‘SimHei’中文黑体
‘Kaiti’中文楷体
‘LiSu’中文隶书
‘FangSong’中文仿宋
‘YouYuan’中文幼圆
‘STSong’华文宋体
折线的色彩和样式
  1. color 属性:指定折线的颜色
符号颜色
bblue
ggreen
rred
ccyan
mmagenta
Yyellow
kblack
  1. linestyle 属性:指定折线的样式
线型描述
‘’-’solid
‘–’dashed
‘-.’dash_dot
‘:’dotted
‘None’draw nothing
‘’draw nothing
  1. marker 属性:指定折线的标记
“o”circle
“v”triangle_down
“s”square
“p”pentagon
“*”star
“h”hexagon l
“+”plus
“D”diamond
案例二
from matplotlib import pyplot as plt
import numpy as np
x = np.arange(0, 4, 0.2)
# 设置了图片的大小和分辨率
plt.figure(figsize=(4, 3), dpi=100)

plt.title('title')
plt.xlabel('x轴', fontproperties='Kaiti', fontsize=18)
plt.ylabel('y轴', fontproperties='LiSu', fontsize=18)

plt.plot(x, x, color='red', linestyle=':', marker='D', label='line1')
plt.plot(x, x+2, color='b', linestyle='--', marker='+', label='line2')
plt.plot(x, x**2, color='c', linestyle='-.', marker='h', label="line3")
plt.legend(loc='upper left')
plt.savefig("test2.png")
plt.show()

在这里插入图片描述

案列三
多子图

在一个画布当中画多个折线图,需要通过subplot(m,n,p)函数设置画子图
m 和 n 代表在一个图像窗口中显示 m 行 n 列个图像
p 表示从左到右、从上到下的第 p 个位置

import matplotlib.pyplot as plt
x=[2, 4, 6, 8, 10, 12]
y=[41, 43, 45, 50, 43, 41]
# (2行 1列,第一个区域)
plt.subplot(2, 1, 1)
plt.plot(x, x, color='r', marker='+')
# (2行 1列,第二个区域)
plt.subplot(2, 1, 2)
plt.plot(y, y, color='g', marker='o')
plt.savefig("./test3.png")
plt.show()

在这里插入图片描述

2. 饼图

饼图表示各项的大小与各项总和的比例

通过 plt.pie(x, explode, labels, autopct, shadow, startangle)函数可以绘制饼图。

plt.pie(x, explode, labels, autopct, shadow, startangle)
(1)x表示数据
(2)labels表示标签
(3)autopct表示数据标签,%0.1%%保留一位小数
(4)explode表示突出的部分
(5)shadow表示是否显示阴影bool
(6)pctdistance表示数据标签的距离圆心位置 0~1
(7)labeldistance表示标签的比例。
(8)startangle表示开始绘图的角度
(9)radius表示半径长,默认是1
案列四

例如:frogs 有 15%,logs 有 10%,hogs 有 30%,dogs 有 45%

import matplotlib.pyplot as plt
plt.figure(figsize=(5,3), dpi=80)

# labels 表示标签
labels = 'Frogs', 'Logs', 'Hogs', 'Dog'

# x 表示数据
x = [15, 10, 30, 45]

# explode 表示突出的部分
explode = (0, 0, 0.1, 0)

# 绘制饼图
# autopct 表示数据标签, %0.1%% 保留一位小数
# shadow 表示是否显示阴影 bool
# startangle 表示开始绘图的角度
# 补充:
# pctdistance 表示数据标签的距离圆心位置 0-1
# labeldistance 表示标签的比例
# radius 表示半径长,默认是 1
plt.pie(x, explode=explode, labels=labels, autopct='%1.1f%%', shadow=False, startangle=60)

# x,y轴刻度等长
plt.axis('equal')
plt.savefig("./test4.png")
plt.show()

在这里插入图片描述

3. 散点图

散点图用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或总结坐标点的分布模式。判断变量之间是否存在数量关联趋势,展示离群点(分布规律)。

通过plt.scatter (x, y, s, c, marker, alpha)函数可以绘制散点图。

plt.scatter (x, y, s, c, marker, alpha)
(1)x,y:表示的是x轴和y轴的坐标。
(2)s:是一个实数,表示点的大小。
(3)c:表示的是颜色。
(4)marker:表示点形状,默认的是’o’。
(5)alpha:是一个实数,表示点的透明度。
案列五

假设通过爬虫你获取到了北京2016年3月和10月份每天白天的最高气温(分别位于列表a和 b),那么此时如何寻找出气温和随时间(天)变化的某种规律?
a=[11,17,16,11,12,11,12,6,6,7,8,9,12,15,14,17,18,21,16,17,20,14,15,15,15,19,21,22,22,22,23]
b=[8,26,28,19,21,17,16,19,18,20,20,19,22,23,10,20,21,20,22,15,11,15,5,13,17,10,11,13,12,13,6]

import matplotlib.pyplot as plt
import numpy as np
x=range(0,31,1)
y3=[11,17,16,11,12,11,12,6,6,7,8,9,12,15,14,17,
18,21,16,17,20,14,15,15,15,19,21,22,22,22,23]
y10=[8,26,28,19,21,17,16,19,18,20,20,19,22,23,10,
20,21,20,22,15,11,15,5,13,17,10,11,13,12,13,6]
plt.scatter(x, y3, c='r', marker='o')
plt.scatter(x, y10, c='g', marker='x')
plt.xlabel('day')
plt.ylabel('temperture')
plt.savefig("./test5.png")
plt.show()

在这里插入图片描述

4. 直方图

直方图是数值数据分布的精确图形表示。为了构建直方图,首先是将值的范围分段,即将整个值的范围分成一系列间隔,然后计算每个间隔中有多少值。这些值通常被指定为连续的,不重叠的变量间隔。间隔必须相邻,并且通常是相等的大小。

通过plt.hist (x, bins, color, density, histtype)函数可以绘制散点图。

plt.hist (x, bins, color, density, histtype)
(1)x表示数据,数值类型。
(2)bins表示条形数。
(3 )color表示颜色,“r” ,“g”,“y”,“c”。
(4)density表示是否以密度的形式显示,bool=True/False。
(5)histtype表示线条的类型,“bar”:方形,“barstacked”:柱形,“step”:“未填充线条”,“stepfilled”:“填充线条”。

把数据分组统计:
组数:将数据分组,当数据在100个以内时,按数据多少常分为5-12组。
组距:指每个小组的两个端点的距离。
组数=极差/组距=max-min/组距。

案列六

假设你获取了250部电影的时长(列表a 中),希望统计出这些电影时长的分布状态(比如时长为100分钟到120分钟电影的数量,出现的频率)等信息,你应该如何呈现这些数据?

a=[131,98,125,131,124,139,131,117,128,108,135,138,131,102,107,114,119,128,121,142,127,130,124,101,110,116,117,110,128,128,115,99,136,126,134,95,138,117,111,78,132,124,113,150,110,117,86,95,144,105,126,130,126,130,126,116,123,106,112,138,123,86,101,99,136,123,117,119,105,137,123,128,125,104,109,134,125,127,105,120,107,129,116,108,132,103,136,118,102,120,114,105,115,132,145,119,121,112,139,125,138,109,132,134,156,106,117,127,144,139,139,119,140,83,110,102,123,107,143,115,136,118,139,123,112,118,125,109,119,133,112,114,122,109,106,123,116,131,127,115,118,112,135,115,146,137,116,103,144,83,123,111,110,111,100,154,136,100,118,119,133,134,106,129,126,110,111,109,141,120,117,106,149,122,122,110,118,127,121,114,125,126,114,140,103,130,141,117,106,114,121,114,133,137,92,121,112,146,97,137,105,98,117,112,81,97,139,113,134,106,144,110,137,137,111,104,117,100,111,101,110,105,129,137,112,120,113,133,112,83,94,146,133,101,131,116,111,84,137,115,122,106,144,109,123,116,111,111,133,150]

假设已知数据为a ,设置组距 bin_width ,组数num_bins=(max(a)-min(a))/ bin_width。

import matplotlib.pyplot as plt
import numpy as np
a = np.array([131,98,125,131,124,139,131,117,128,108,135,138,131,102,107,114,119,128,121,142,127,130,124,101,110,116,117,110,128,128,115,99,136,126,134,95,138,117,111,78,132,124,113,150,110,117,86,95,144,105,126,130,126,130,126,116,123,106,112,138,123,86,101,99,136,123,117,119,105,137,123,128,125,104,109,134,125,127,105,120,107,129,116,108,132,103,136,118,102,120,114,105,115,132,145,119,121,112,139,125,138,109,132,134,156,106,117,127,144,139,139,119,140,83,110,102,123,107,143,115,136,118,139,123,112,118,125,109,119,133,112,114,122,109,106,123,116,131,127,115,118,112,135,115,146,137,116,103,144,83,123,111,110,111,100,154,136,100,118,119,133,134,106,129,126,110,111,109,141,120,117,106,149,122,122,110,118,127,121,114,125,126,114,140,103,130,141,117,106,114,121,114,133,137,92,121,112,146,97,137,105,98,117,112,81,97,139,113,134,106,144,110,137,137,111,104,117,100,111,101,110,105,129,137,112,120,113,133,112,83,94,146,133,101,131,116,111,84,137,115,122,106,144,109,123,116,111,111,133,150])
min=np.min(a)
max=np.max(a)
bin_width=5
num_bins=(max-min)//bin_width
plt.hist(a, bins=num_bins, density=False, histtype='stepfilled', color='b', alpha=0.7)
plt.title('Histogram')
plt.savefig("./test6.png")
plt.show()

在这里插入图片描述

5. 柱状图

柱状图通过使用水平或垂直方向柱子的高度来显示不同类别的数值,其中柱状图的一个轴显示正在比较的类别,而另一个轴代表对应的刻度值。

通过bar(x, height,width, color, align, yerr)函数可以绘制柱状图。

bar(x, height,width, color, align, yerr)
(1)x:表示x轴的位置序列,一般采用range函数产生一个序列;
(2)y:表示y轴的数值序列,也就是柱形图的高度,一般就是我们需要展示的数据;
(3)width:为柱形图的宽度,一般这是为1即可;
(4)color:为柱形图填充的颜色;
(5)yerr:让柱形图的顶端空出一部分。
(6)alpha:设置柱状填充颜色的透明度。
(7)align:设置对齐方式
案列七

例如:假设你获取到了2017年内地电影票房前20的电影(列表a)和电影票房数据(列表b),那么如何更加直观的展示该数据?

a=[“战狼2”,“速度与激情8”,“功夫瑜伽”,“西游伏妖篇”,“变形金刚5:最后的骑士”,“摔跤吧!爸爸” ,“加勒比海盗5:死无对证”, “金刚:骷髅岛”, “极限特工:终极回归”,“生化危机6:终章”,“乘风破浪”,“神偷奶爸3”, “智取威虎山”,“大闹天竺”,“金刚狼3:殊死一战”,“蜘蛛侠:英雄归来”,“悟空传”,“银河护卫队2”,“情圣”,“新木乃伊”]
b=[56.01,26.94,17.53,16.49,15.45,12.96,11.8,11.61,11.28,11.12,10.49,10.3,8.75,7.55,7.32,6.99,6.88,6.86,6.58,6.23]单位:亿

import matplotlib.pyplot as plt
x_lable=["战狼2","速度与激情8","功夫瑜伽","西游伏妖篇","变形金刚5:最后的骑士","摔跤吧!爸爸" ,"加勒比海盗5:死无对证","金刚:骷髅岛", "极限特工:终极回归","生化危机6:终章","乘风破浪","神偷奶爸3", "智取威虎山","大闹天竺","金刚狼3:殊死一战","蜘蛛侠:英雄归来","悟空传","银河护卫队2","情圣","新木乃伊"]
x=range(len(x_lable))
y=[56.01,26.94,17.53,16.49,15.45,12.96,11.8,11.61,11.28,11.12,10.49,10.3,8.75,7.55,7.32,6.99,6.88,6.86,6.58,6.23]
plt.bar(x, y, width=0.2, color='r')
# 设置坐标轴,并将文字旋转90度
plt.xticks(x,x_lable,fontproperties='simhei',rotation=90)
plt.xlabel('片名', fontproperties='simhei', fontsize=18)
plt.ylabel('票房', fontproperties='simhei', fontsize=18)
plt.savefig("./test7.png")
plt.show()

在这里插入图片描述

6. 箱型图

箱型图:是一种用作显示一组数据分散情况资料的统计图,包含一组数据的:最大值、最小值、中位数、第一分位数(Q1)、第三分位数(Q3)、异常值。把数据从小到大进行排列并等分成四份,第一分位数(Q1),第二分位数(Q2)和第三分位数(Q3)分别为数据的第25%,50%和75%的数字。
在这里插入图片描述

(1)中位数median:一组数据平均分成两份,中间的数
(2)第一个四分位数Q1:最小数和数据集的中位数之间的中间数;
(3)第三四分位数Q3:数据集的中位数和最大值之间的中间值;
(4)四分位间距IQR:IQR=Q3-Q1;
(5)最大值区间Q3+1.5IQR;
(6)最小值区间Q1-1.5IQR ;(7)异常值outliers。

用plot.box()函数可以绘制箱型图。

案列八
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
df=pd.DataFrame(np.random.rand(10,5),columns=['A','B','C','D','E'])
f=df.boxplot(sym='o', # sym异常点形状
             vert=True, # 是否垂直
             whis=1.5, # IQR
             patch_artist=True, # 上下四分位框是否填充
             meanline=False, showmeans=True, # 是否有均值线及其形状
             showbox=True, # 是否显示箱线
             showfliers=True, # 是否显示异常值
             notch=False, # 中间箱体是否缺口
             return_type='dict') # 返回类型为字典
plt.title('箱线图',fontproperties="simhei")
plt.savefig("test7.png")
plt.show()

在这里插入图片描述
(完。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shi_jiaye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值