DataWhale 数据可视化笔记

此部分内容是我结合该阶段课程视频和自己之前的笔记进行的总结,如果有不完善的地方,还请指正。

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使得图片更清晰

matplotlib绘制折线图 x = range(2, 26, 2) # 数据在x轴的位置 y = [15,13,14.5,17,20,25,26,24,26,22,18,15] # 数据在y轴的位置 plt.plot(x,y) # plot绘制折线图 x_tick_labels = [i/2 for i in range(4, 49)] plt.xticks(range(2, 26, 2), font=my_font) # 将x中的每个刻度都刻画在坐标轴上,决定了在x轴上显示哪些刻度 plt.yticks(range(min(y), max(y)+1)) # 绘制y轴刻度 plt.savefig("./sig_size.png") # 保存图片, 保存svg这种矢量图格式,放大不会有锯齿 plt.show() # 在执行程序的时候显示图形

绘制一天气温变化

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.绘图和图形完善

  • 44
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值