matplotlib学习笔记

matplotlib简单使用

导入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import matplotlib.pyplot as plt
plt.plot() #绘制图表
plt.show() #显示

plt.xticks(rotation=45) #对x轴的值旋转45度

plt.xlabel(name) #对x轴加标签
plt.ylabel(name) #对y轴加标签
plt.title(name) #表名

plt.add_subplot(4,3,x) #创建多个图表 x指定图表的位置 4行3列
plt.figure(figsize=(width,height)) #改表图表的宽高

plt.legend(loc) #绘制说明

plt.tick_params(bottom,top,left,right='off') #设置图像显示刻度

绘制柱状图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import matplotlib.pyplot as plt
import pandas as pd
from numpy import arange

# data = pd.DataFrame({'Name':[4,4.5,4.3,3,3.7]})
# 模拟数据
data = pd.DataFrame({'First':[3],'Second':[4.5],'Third':[3.4],'Fourth':[4.4],'Fifth':[4.3]})
# 列名
num_cols = ['First','Second','Third','Fourth','Fifth']
print(data)
bar_heights = data.ix[0,num_cols].values
print(bar_heights)
bar_positions = arange(5) + 0.5
print(bar_positions)
fig,ax = plt.subplots()
# 设置X的位置和y值高度 和列宽度
ax.bar(bar_positions,bar_heights,0.4)
# ax.barh(bar_positions,bar_heights,0.4) #绘制横向的图
# ax.scatter(series,series) #绘制散点图
plt.show()

# 输出

Fifth First Fourth Second Third
0 4.3 3 4.4 4.5 3.4

[3. 4.5 3.4 4.4 4.3]

[0.5 1.5 2.5 3.5 4.5]

结果

2019-04-15_23-54-57

散点图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import matplotlib.pyplot as plt
import numpy as np

# 模拟数据
n = 500
# 随机均值为0 方差2 的数据
s1 = np.random.normal(0, 2, n)
s2 = np.random.normal(3, 5, n)
print(type(s1))

fig, ax = plt.subplots()
ax.scatter(s1, s2) # 绘制散点图
plt.xlabel('s1')
plt.ylabel('s2')
plt.title('Scatter plot')
plt.show()

结果

2019-04-16_22-35-48

绘制频率柱状图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
# 模拟数据
n = 1000
# 随机均值为0 方差2 的数据
s1 = np.round(np.abs(np.random.normal(10, 3, n)), decimals=1)
data = pd.DataFrame()
data['fir'] = s1
# print(data)
print(data['fir'].value_counts().sort_index())
fig, ax = plt.subplots()
ax.hist(data["fir"]) # 自动分跨度 频率柱状图
# ax, ylim(0, 10)# 设置y的取值区间
# ax.hist(data['fir'], bins=20) # 分为20个跨度
# ax.hist(data['fir'], range(4, 5), bins=20) #取4到5之间的值分为20个跨度

plt.xlabel('Values')
plt.ylabel('Times')
plt.title('Plot')
plt.show()

结果

2019-04-16_23-25-16

盒图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
# 模拟数据
n = 100
# 随机均值为0 方差2 的数据
s1 = np.round(np.abs(np.random.normal(10, 3, n)), decimals=1)
s2 = np.round(np.abs(np.random.normal(10, 3, n)), decimals=1)
s3 = np.round(np.abs(np.random.normal(10, 3, n)), decimals=1)
data = pd.DataFrame()
data['fir'] = s1
data['sec'] = s2
data['thi'] = s3
num_cols = ["fir", "sec", "thi"]
# print(data)
fig, ax = plt.subplots()
ax.boxplot(data[num_cols].values)
ax.set_xticklabels(num_cols) # x轴的名称
# ax.set_ylim(0, 10) # 设置y的取值区间
plt.xlabel('Values')
plt.title('Plot')
plt.show()

结果

2019-04-16_23-43-20

折线图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
# 模拟数据
n = 10
# 随机均值为0 方差2 的数据
s1 = np.round(np.abs(np.random.normal(10, 3, n)), decimals=1)
s2 = np.round(np.abs(np.random.normal(10, 3, n)), decimals=1)
s3 = np.round(np.abs(np.random.normal(10, 3, n)), decimals=1)
data = pd.DataFrame()
data['fir'] = s1
data['sec'] = s2
data['thi'] = s3
num_cols = ["fir", "sec", "thi"]
# print(data)

# fig=plt.figure(figsize=(3,3))
# ax = fig.add_subplot(1,1,1)

fig, ax = plt.subplots()
# c 指定颜色 linewidth指定线条宽度
ax.plot(data["fir"], label='First', c=(0/255, 0/255, 0/255), linewidth=3)
ax.plot(data['sec'], label='Sceond')
ax.plot(data['thi'], label='Third')
plt.xlabel('Values')
plt.title('Plot')
ax.legend(loc='upper right')
plt.show()

结果

2019-04-17_00-06-39