Matplotlib库的效果
http://matplotlib.org/gallery.html
假设一天中每隔两个小时(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’ | 华文宋体 |
符号 | 颜色 |
---|---|
b | blue |
g | green |
r | red |
c | cyan |
m | magenta |
Y | yellow |
k | black |
线型 | 描述 |
---|---|
‘’-’ | solid |
‘–’ | dashed |
‘-.’ | dash_dot |
‘:’ | dotted |
‘None’ | draw nothing |
‘’ | draw nothing |
“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()
饼图表示各项的大小与各项总和的比例
通过 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()
散点图用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或总结坐标点的分布模式。判断变量之间是否存在数量关联趋势,展示离群点(分布规律)。
通过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()
直方图是数值数据分布的精确图形表示。为了构建直方图,首先是将值的范围分段,即将整个值的范围分成一系列间隔,然后计算每个间隔中有多少值。这些值通常被指定为连续的,不重叠的变量间隔。间隔必须相邻,并且通常是相等的大小。
通过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()
柱状图通过使用水平或垂直方向柱子的高度来显示不同类别的数值,其中柱状图的一个轴显示正在比较的类别,而另一个轴代表对应的刻度值。
通过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()
箱型图:是一种用作显示一组数据分散情况资料的统计图,包含一组数据的:最大值、最小值、中位数、第一分位数(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()