此部分内容是我结合该阶段课程视频和自己之前的笔记进行的总结,如果有不完善的地方,还请指正。
import numpy as np
from matplotlib import pyplot as plt # 导入pyplot
import random
import matplotlib
from matplotlib import font_manager
设置font
font = {
‘family’: ‘MicroSoft YaHei’,
‘weight’: ‘bold’,
‘size’: ‘larger’
}
matplotlib.rc(“font”, family=‘MicroSoft YaHei’, weight=‘bold’)
另一种设置font的方式
my_font = font_manager.FontProperties(fname=“/System/Library/Fonts/PingFang.ttc”) # 百分百可以成功
1.能将数据进行可视化 2.是数据更加客观,更具说服力
plt.figure(figsize=(30, 8), dpi=80) # 设置图片大小 dpi:每英寸上图像点的个数,可以通过改变dpi使得图片更清晰
绘制一天气温变化
x = range(0, 120)
y = [random.randint(20, 35) for i in range(120)]
plt.figure(figsize=(40, 8), dpi=80)
plt.plot(x, y)
_x = list(x)
调整x轴的刻度
_xticks_labels = [“10点{}分”.format(i) for i in range(60)]
_xticks_labels += [“11点{}分”.format(i) for i in range(60)]
取步长,数字和字符串一一对应,数据的长度一样
plt.xticks(_x[::3], _xticks_labels[::3], rotation=45, fontproperties=my_font) # rotaion:旋转的度数, fontproperties=my_font设置字体
添加描述信息
plt.xlabel(“时间”, fontproperties=my_font)
plt.ylabel(“温度 单位摄氏度”, fontproperties=my_font)
plt.title(“10~12点每分钟的气温变化情况”, fontproperties=my_font)
plt.show()
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,2,3,1,4,6,7,2,2,3,6,5,6,2,3,3,5,1,2,1]
x = range(11, 31)
设置图形大小
plt.figure(figsize=(20, 8), dpi=80)
plt.plot(x, y_1, label=“自己”, color=‘orange’, linestyle=‘:’)
plt.plot(x, y_2, label=“同桌”, color=‘#DB7093’, linestyle=‘–’)
设置x轴刻度
_xtick_labels = [“{}岁”.format(i) for i in x]
plt.xticks(x, _xtick_labels, fontproperties=my_font)
plt.yticks(range(0,9))
绘制图例
plt.legend(prop=my_font, loc=0)
绘制网格
plt.grid(alpha=0.4, linestyle=‘–’) # alpha:设置网格线的透明度
展示
plt.show()
对比常用统计图
折线图:以折线的上升或者下降来表示统计数量的增减变化的统计图 特点:能够显示数据的变化趋势,反应事物的变化情况(变化)
直方图:由一系列高度不等的纵向条纹或者线段表示数据分布的情况,一般用横轴表示数据范围, 纵轴表示分布情况 特点:绘制连续性的数据,展示一组或者多组数据的分布情况(统计)
条形图:排列在工作表的行或者列中的数据可以绘制到条形图中。 特点:绘制离散的数据,能够一眼看出各个数据的大小,比较数据之间的差别。(统计)
散点图:用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或总结坐标点的分布模式。 特点:判断变量之间是否存在数量关联趋势,展示离群点(分布规律)
from matplotlib import pyplot as plt
from matplotlib import font_manager
import numpy as np
my_font = font_manager.FontProperties(fname=“/System/Library/Fonts/PingFang.ttc”) # 百分百可以成功
y_3 = [11,13,14,15,18,13,12,14,15,16]
y_10 = [26,24,28,19,20,17,22,15,11,10]
x_3 = range(1,11)
x_10 = range(31, 41)
设置图形大小
plt.figure(figsize=(20,8), dpi=80)
plt.scatter(x_3, y_3, label=“3号”)
plt.scatter(x_10, y_10, label=“10号”)
调整x轴的刻度
_x = list(x_3)+list(x_10)
_xtick_labels = [“3月{}日”.format(i) for i in x_3]
_xtick_labels += [“10月{}日”.format(i-20) for i in x_10]
plt.xticks(_x, _xtick_labels, fontproperties=my_font, rotation=45)
添加图例
plt.legend(loc=“upper left”, prop=my_font)
添加描述信息
plt.xlabel(“时间”, fontproperties=my_font)
plt.ylabel(“温度”, fontproperties=my_font)
plt.title(“标题”, fontproperties=my_font)
plt.show()
散点图的更多应用场景 1.不同条件(维度)之间的内在关联关系。
2.观察数据的离散聚合程度。
绘制条形图
a = [“速度与激情8”, “战狼2”, “变形金刚”, “环太平洋”, “加勒比海盗”, “刺客信条”,“魔兽世界”,“大闹天宫”,“长空”,“功夫瑜伽”]
b = [56.01, 94.09,78.07,56.38,56.29, 12.67, 81.09,34.90, 12.92, 67.30]
设置图片大小
plt.figure(figsize=(20,8), dpi=80)
plt.bar(range(len(a)), b, width=0.3) # width:宽度 barh:绘制横着的条形图
plt.xticks(range(len(a)), a, fontproperties=my_font, rotation=45)
plt.show()
绘制横着的条形图
设置图片大小
plt.figure(figsize=(20,8), dpi=80)
plt.barh(range(len(a)), width=b, height=0.3, color=“pink”) # width:宽度 height:横着的高度
plt.yticks(range(len(a)), a, fontproperties=my_font)
plt.grid(alpha=0.3)
plt.show()
绘制多个柱状图
a = [‘猩球崛起3’,‘敦刻尔克’,‘蜘蛛侠3’,‘战狼2’]
b_16 = [15746, 312, 4497, 319]
b_15 = [12357, 156, 2045, 168]
b_14 = [2358, 399, 2358,362]
bar_width=0.2
x_14 = list(range(len(a)))
x_15 = [i+bar_width for i in x_14]
x_16 = [i+bar_width*2 for i in x_14]
设置图形大小
plt.figure(figsize=(20,8))
plt.bar(range(len(a)), b_14, width=bar_width, label=“9月14日”)
plt.bar(x_15, b_15, width=bar_width, label=“9月15日”)
plt.bar(x_16, b_16, width=bar_width, label=“9月16日”)
设置图例
plt.legend(prop=my_font)
设置x轴的刻度
plt.xticks(x_15,a,fontproperties=my_font)
plt.show()
条形图的应用场景
1.数量统计 2.频率统计(市场饱和度)
绘制直方图
c = np.random.randint(80, 160, size=250)
c
array([125, 94, 116, 144, 133, 127, 136, 134, 128, 128, 81, 121, 114,
105, 112, 92, 128, 147, 115, 109, 92, 105, 155, 138, 106, 114,
95, 103, 101, 98, 128, 158, 97, 142, 151, 113, 148, 103, 123,
126, 102, 152, 96, 143, 87, 98, 81, 113, 105, 137, 94, 108,
90, 130, 139, 84, 115, 114, 91, 84, 82, 114, 146, 94, 116,
128, 145, 129, 152, 105, 100, 99, 150, 89, 121, 132, 99, 81,
88, 159, 104, 85, 121, 148, 124, 105, 85, 150, 121, 117, 130,
101, 125, 118, 111, 84, 86, 107, 98, 128, 119, 100, 113, 134,
108, 141, 114, 134, 157, 110, 130, 146, 150, 148, 117, 134, 151,
103, 132, 159, 80, 86, 159, 124, 89, 105, 130, 146, 84, 92,
98, 107, 158, 82, 147, 126, 128, 141, 131, 99, 102, 156, 102,
127, 141, 81, 155, 98, 94, 80, 129, 100, 135, 123, 153, 146,
121, 118, 148, 145, 134, 149, 91, 145, 132, 157, 98, 118, 83,
134, 148, 135, 113, 80, 158, 120, 82, 87, 136, 100, 137, 88,
131, 84, 143, 152, 145, 153, 127, 81, 96, 116, 133, 127, 97,
89, 114, 94, 87, 140, 97, 105, 155, 122, 132, 92, 145, 153,
105, 151, 102, 119, 159, 155, 152, 119, 86, 150, 122, 121, 132,
85, 97, 88, 139, 133, 154, 142, 156, 137, 144, 154, 87, 100,
115, 85, 148, 156, 120, 104, 99, 112, 137, 118, 105, 113, 111,
156, 102, 120])
c = list©
c.append(78)
c.append(156)
c
组数要适当,太少会有较大的统计无擦好,大多规律不明显 组数=极差/组距
计算组数
d = 3 # 组距:在选择时尽量选择可以被min值和max值整除的数据
num_bins = (max©-min©+ 2)//d # 组数
print(max©)
print(min©)
print(max©-min©)
设置图形的大小
plt.figure(figsize=(20, 8), dpi=80)
plt.hist(c, num_bins, density=1) # density:显示百分比
设置x轴的刻度
plt.xticks(range(min©, max©+d, d))
绘制网格
plt.grid(alpha=0.3)
plt.show()
159
78
81
interval = [0,5,10,15,20,25,30,35,40,45,60,90] # 区间范围
width = [5,5,5,5,5,5,5,5,5,15,30,60] # 组距
quantity = [836,2737,3723,3926,3596,1438,3273,642,824,613,215,47] # 数据
前面的问题中给出的数据都是统计之后的数据,所以为了达到直方图的效果,需要绘制条形图 所以一般来说能够使用plt.hist方法的是那些没有经过统计的数据。
设置图形大小
plt.figure(figsize=(20,8),dpi=80)
print(len(interval), len(width), len(quantity))
plt.bar(range(12), quantity, width=1)
设置x轴
_x = [i-0.5 for i in range(13)] # x轴的范围
_xticks_labels = interval + [150] # x轴的标签刻度
plt.xticks(_x, _xticks_labels)
plt.grid()
plt.show()
12 12 12
直方图更多应用场景: 1.用户年龄分布状态 2.一段时间内用户点击此处的分布状态 3.用户活跃时间的分布状态
matplotlib使用流程的总结
1.明确问题 2.选择图形的呈现方式 3.准备数据 4.绘图和图形完善