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