matplotlib制作条形图、直方图

python散点图

编写思路

单个画板思路

  1. 导入相关模块
  2. 获取数据为列表格式 (这是Y的值,每一个X都能找到一个对应的Y值,称为函数)
  3. 设置颜色(可选)
  4. 添加画板
  5. 设置轴、轴长度
  6. 设置X的数据
  7. 给画板添加数据
  8. 显示画板

多个画板思路

  1. 导入香相关模块

  2. 获取lis数据为列表格式 (这是Y的值,每一个X都能找到一个对应的Y值,称为函数)

  3. 设置颜色(可选)

  4. 添加子图1-子图n并设置XY轴长度

  5. 设置X的数据

  6. 添加画板

    1
    2
    for i in range(len(lis)):
    ax1.scatter(x,lis[i],c=colors[i])
  7. 展示画板

源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import numpy as np
import matplotlib.pyplot as plt
# 从data.csv文件读取四列数据,结果返回是一个类似列表的数据,但类型不是列表,可当它是列表使用
opening,top,bottom,closing=np.loadtxt('data.csv', delimiter=',', usecols=(3,4,5,6), unpack=True)

# 将数据封装为列表,便于将数据循环添加进画板
lis = [opening,top,bottom,closing]
colors = ['green','red','b','k']

fig1 = plt.figure(2) # 可有可无
ax1 = plt.subplot(211,ylim=(330,370),xlim=(-5,35)) # 添加上子图 211
ax2=plt.subplot(212) # 添加下子图 212
x = np.arange(0,30) # 设置x轴
for i in range(len(lis)):
ax1.scatter(x,lis[i],c=colors[i]) # 给上子图添加数据
ax2.plot(x,lis[i],c=colors[i]) # 给下子图添加数据
plt.show() # 展示画板

散点图

期末成绩分布(不读取文件)

直方图

编写思路

  1. 导入模块
  2. 设置数据Y
  3. 设置数据X
  4. 设置中文字体
  5. 设置条形图横还是竖
  6. 显示图例
  7. 设置X、Y坐标的标签
  8. 设置标题
  9. 显示面板
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import numpy as np
import matplotlib.pyplot as plt

data_y = [112,155,103,72,24,9]
x = ["50分以下","50-60分","60-70分","70-80分","80-90分","90-100分"]
# 解决plt显示中文问题
plt.rcParams['font.sans-serif'] = ['SimHei']
# plt.rcParams['axes.unicode_minus'] = False

# 可以把条形图转至方向(横)
plt.bar(x, data_y, 0.5, label='close', color='#87CEFA')
# plt.barh(x, data_y, 0.5, label='close', color='#87CEFA')

plt.legend() #显示图例
plt.xlabel('成绩分布')
plt.ylabel('人数') #x轴标签
plt.title('考试成绩统计') #y轴标签
plt.show()

考试成绩-条形图

饼图

编写思路

  1. 导入相关的模块

  2. 设置数据X、Y

  3. 初始化颜色列表cols[]

  4. 设置中文字体

  5. 给饼图设置相关参数

    plt.pie(

    data, # 数据
    labels=x, # 数据对应的字段
    colors=cols, # 颜色
    startangle=180, # 旋转角度
    shadow= True, # 阴影
    explode=(0,0,0,0,0,0.1), # 突出某一块,有几个数据就设置几个0或者0.1
    autopct=‘%1.1f%%’) # 接受特定String,指定数值显示方式,默认为None

  6. 设置标题

  7. 显示面板

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

data = [112,155,103,72,24,9]
x = ['50分以下','50-60分','60-70分','70-80分','80-90分','90-10分']
cols=['c','m','r','b']
# 解决plt中文显示的问题
plt.rcParams['font.sans-serif'] = ['SimHei']
# 制作饼图
plt.pie(data,# 数据
labels=x, # 数据对应的字段
colors=cols, # 颜色
startangle=180, # 旋转角度
shadow= True, # 阴影
explode=(0,0,0,0,0,0.1), # 突出某一块,有几个数据就设置几个0或者0.1
autopct='%1.1f%%') # 接受特定String,指定数值显示方式,默认为None

plt.title('考试成绩统计')
plt.show()

01

期末成绩分布(读取文件)

饼图

编写思路

  1. 导入相关模块

  2. 读取文件数据

    列数1的数据,列数2的数据=np.loadtxt(‘scores.csv’, delimiter=‘,’, usecols=(列数1,列数2), unpack=True)

  3. 设置字段(X)

  4. 初始化颜色列表

  5. 设置中文字体

  6. 设置饼图参数

  7. 设置标题

  8. 显示画板

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
30
31
32
33
34
35
36
37
38
import numpy as np
import matplotlib.pyplot as plt

# usecols=(读取列数),默认从0开始
c=np.loadtxt('scores.csv', delimiter=',', usecols=(1), unpack=True)
# 设置分数段的参数,每有一个达到该分数段则+1
s4,s5,s6,s7,s8,s9,s10=0,0,0,0,0,0,0
for i in c:
if i<=40:
s4 +=1
elif i<=50:
s5+=1
elif i<=60:
s6+=1
elif i<=70:
s7+=1
elif i<=80:
s8+=1
elif i<=90:
s9+=1
elif i<=100:
s10+=1
i =[s4, s5, s6, s7, s8, s9, s10]
# 设置每个分数段的字段
field = ['0-40分','40-50分','50-60分','60-70分','70-80分','80-90分','90-10分']
cols=['c','m','r','b','w','y','g'] # 设置颜色列表
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置中文字体

# 设置饼图的基本参数
plt.pie(i, # 数据
labels=field, # 数据对应的字段
colors=cols, # 颜色
startangle=180, # 旋转角度
shadow= True, # 阴影
explode=(0,0,0,0,0,0.1,0), # 突出某一块,抽出
autopct='%1.1f%%') # 接受特定String,指定数值显示方式,默认为None
plt.title('考试成绩统计') # 设置标题
plt.show()

考试成绩-pie

直方图2{.red}

编写思路

  1. 导入相关模块
  2. 获取文件数据
  3. 设置字段(X)
  4. 初始化颜色列表
  5. 设置中文字体
  6. 设置直方图为竖向
  7. 显示图例
  8. 设置X、Y的标签
  9. 设置标题
  10. 显示画板
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
30
31
32
33
34
import numpy as np
import matplotlib.pyplot as plt

c=np.loadtxt('scores.csv', delimiter=',', usecols=(1), unpack=True)
s4,s5,s6,s7,s8,s9,s10=0,0,0,0,0,0,0
for i in c:
if i<=40:
s4 +=1
elif i<=50:
s5+=1
elif i<=60:
s6+=1
elif i<=70:
s7+=1
elif i<=80:
s8+=1
elif i<=90:
s9+=1
elif i<=100:
s10+=1
i =[s4, s5, s6, s7, s8, s9, s10]
field = ['0-40分','40-50分','50-60分','60-70分','70-80分','80-90分','90-100分']
cols=['c','m','r','b','w','y','g']
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.bar(field, i, 0.5, label='close', color='#87CEFA')
# 可以把条形图转至方向(横)
# plt.barh(x, data_y, 0.5, label='close', color='#87CEFA')
plt.legend() #显示图例
plt.xlabel('成绩分布')
# #x轴标签
plt.ylabel('人数')
# #y轴标签
plt.title('考试成绩统计')
plt.show()

考试成绩-条形图

相关文件下载data.csvscore.csv