我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python Matplotlib数据可视化绘图之(三)————散点图

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python Matplotlib数据可视化绘图之(三)————散点图

文章目录

文本


前言

本文我们主要介绍利用Python中的Matplotlib模块进行几种散点图的画法,包括整张图片只有一种颜色的不分组散点图、整张图片有好几种颜色的不分组散点图、整张图片有好几种颜色的分组散点图等。


一、所用到的模块

主要利用Python中的Matplotlib模块完成该功能。

二、单一颜色的普通不分组散点图

1.示例数据如下

表格如下(示例):


班别语文成绩(分/100分制)
甲班80
90
75
65
85
95
100
100
80
70
90
95
85
86
92
90
95
90
85
100
乙班60
70
80
65
75
80
73
75
85
90
95
65
70
75
80
85
95
85
80
70
丙班60
80
100
100
100
100
90
95
95
95
85
95
95
95
95
80
95
90
90
90

现在需要把表格中的数据绘制成散点图,从而进一步分析每个班级的学生成绩情况。

2.代码如下

2.1 代码如下(示例):

2.1.1 Case1:
import matplotlib.pyplot as plt# 设置字体, 解决中文乱码问题plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']# 解决图像中的'-'负号的乱码问题plt.rcParams['axes.unicode_minus'] = False# A班的语文成绩ClassA_C = [80, 90, 75, 65, 85, 95, 100, 100, 80, 70, 90, 95, 85, 86, 92, 90, 95, 90, 85, 100]# B班的语文成绩ClassB_C = [60, 70, 80, 65, 75, 80, 73, 75, 85, 90, 95, 65, 70, 75, 80, 85, 95, 85, 80, 70]# C班的语文成绩ClassC_C = [60, 80, 100, 100, 100, 100, 90, 95, 95, 95, 85, 95, 95, 95, 95, 80, 95, 90, 90, 90]fig = plt.figure(figsize=(8, 6), facecolor='#B0C4DE')ax = fig.add_subplot(facecolor='white')# 橙绿蓝color_list = ['#FF8C00', '#00FF00', '#0000FF']x_labels = ['甲班', '乙班', '丙班']x_loc = [1, 2, 3]scatter_plot_data = [ClassA_C, ClassB_C, ClassC_C]# 每个数据(scatter_plot_data里面的每个数据)对应的x轴的坐标值spotx = []for i, j in zip(x_loc, range(len(scatter_plot_data))):    spotx_tmp = [i] * len(scatter_plot_data[j])    spotx.append(spotx_tmp)ax.scatter(spotx, scatter_plot_data, c=color_list[0], s=30)ax.grid(True, ls=':', color='b', alpha=0.3)plt.title('甲乙丙各班语文成绩Scatter_chart分析', fontweight='bold')ax.set_xticks(x_loc)ax.set_xticklabels(x_labels, rotation=90)ax.set_ylabel('分数/百分制', fontweight='bold')# 设置x, y坐标轴的刻度标签字体加粗plt.xticks(weight='bold')plt.yticks(weight='bold')fig.tight_layout()plt.show()

输出结果如下:

在这里插入图片描述

注意:如果想保存这种画布带背景颜色且轴域也带背景颜色的图片(在此图中,画布[fig]背景颜色为#B0C4DE,轴域[ax]背景颜色为white),需要使用以下语句保存到本地,具体语句如下:

plt.savefig(picture_name + '.jpg', facecolor=self.fig.get_facecolor())# 其中picture_name为给图片命的名字

三、多种颜色的普通不分组散点图

1.示例数据如下

表格如下(示例):


班别语文成绩(分/100分制)
甲班80
90
75
65
85
95
100
100
80
70
90
95
85
86
92
90
95
90
85
100
乙班60
70
80
65
75
80
73
75
85
90
95
65
70
75
80
85
95
85
80
30
丙班60
80
100
100
100
100
90
95
95
95
85
95
95
95
95
80
95
90
90
90

现在需要把表格中的数据绘制成散点图,从而进一步分析每个班级的学生成绩情况。

2.代码如下

2.1 代码如下(示例):

2.1.1 Case1:
import matplotlib.pyplot as plt# 设置字体, 解决中文乱码问题plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']# 解决图像中的'-'负号的乱码问题plt.rcParams['axes.unicode_minus'] = False# A班的语文成绩ClassA_C = [80, 90, 75, 65, 85, 95, 100, 100, 80, 70, 90, 95, 85, 86, 92, 90, 95, 90, 85, 100]# B班的语文成绩ClassB_C = [60, 70, 80, 65, 75, 80, 73, 75, 85, 90, 95, 65, 70, 75, 80, 85, 95, 85, 80, 30]# C班的语文成绩ClassC_C = [60, 80, 100, 100, 100, 100, 90, 95, 95, 95, 85, 95, 95, 95, 95, 80, 95, 90, 90, 90]fig = plt.figure(figsize=(8, 6), facecolor='#B0C4DE')ax = fig.add_subplot(facecolor='white')# 橙绿蓝color_list = ['#FF8C00', '#00FF00', '#0000FF']# 'o':圆圈; 'D':钻石; 's':正方形marker_list = ['o', 'D', 's']x_labels = ['甲班', '乙班', '丙班']x_loc = [1, 2, 3]scatter_plot_data = [ClassA_C, ClassB_C, ClassC_C]# 每个数据(scatter_plot_data里面的每个数据)对应的x轴的坐标值spotx = []for i, j in zip(x_loc, range(len(scatter_plot_data))):    spotx_tmp = [i] * len(scatter_plot_data[j])    spotx.append(spotx_tmp)# 每个数据(scatter_plot_data里面的每个数据)对应的marker的颜色color_list_x = []color_list_x_final = []for i, j in zip(color_list, range(len(scatter_plot_data))):    color_list_x_tmp = [i] * len(scatter_plot_data[j])    color_list_x.append(color_list_x_tmp)for i in color_list_x:    for j in i:        color_list_x_final.append(j)ax.scatter(spotx, scatter_plot_data, c=color_list_x_final, s=30, marker='o')ax.grid(True, ls=':', color='b', alpha=0.3)plt.title('甲乙丙各班语文成绩Scatter_chart分析', fontweight='bold')ax.set_xticks(x_loc)ax.set_xticklabels(x_labels, rotation=90)ax.set_ylabel('分数/百分制', fontweight='bold')# 设置x, y坐标轴的刻度标签字体加粗plt.xticks(weight='bold')plt.yticks(weight='bold')fig.tight_layout()plt.show()

输出结果如下:

在这里插入图片描述

注意:如果想保存这种画布带背景颜色且轴域也带背景颜色的图片(在此图中,画布[fig]背景颜色为#B0C4DE,轴域[ax]背景颜色为white),需要使用以下语句保存到本地,具体语句如下:

plt.savefig(picture_name + '.jpg', facecolor=self.fig.get_facecolor())# 其中picture_name为给图片命的名字
2.1.2 Case2:
import matplotlib.pyplot as plt# 设置字体, 解决中文乱码问题plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']# 解决图像中的'-'负号的乱码问题plt.rcParams['axes.unicode_minus'] = False# A班的语文成绩ClassA_C = [80, 90, 75, 65, 85, 95, 100, 100, 80, 70, 90, 95, 85, 86, 92, 90, 95, 90, 85, 100]# B班的语文成绩ClassB_C = [60, 70, 80, 65, 75, 80, 73, 75, 85, 90, 95, 65, 70, 75, 80, 85, 95, 85, 80, 30]# C班的语文成绩ClassC_C = [60, 80, 100, 100, 100, 100, 90, 95, 95, 95, 85, 95, 95, 95, 95, 80, 95, 90, 90, 90]fig = plt.figure(figsize=(8, 6), facecolor='#B0C4DE')ax = fig.add_subplot(facecolor='white')# 橙绿蓝color_list = ['#FF8C00', '#00FF00', '#0000FF']# 'o':圆圈; 'D':钻石; 's':正方形marker_list = ['o', 'D', 's']x_labels = ['甲班', '乙班', '丙班']x_loc = [1, 2, 3]scatter_plot_data = [ClassA_C, ClassB_C, ClassC_C]# 每个数据(scatter_plot_data里面的每个数据)对应的x轴的坐标值spotx = []for i, j in zip(x_loc, range(len(scatter_plot_data))):    spotx_tmp = [i] * len(scatter_plot_data[j])    spotx.append(spotx_tmp)########################################################################################################################### 每个数据(scatter_plot_data里面的每个数据)对应的marker的形状marker_list_x = []marker_list_x_final = []for i, j in zip(marker_list, range(len(scatter_plot_data))):    marker_list_x_tmp = [i] * len(scatter_plot_data[j])    marker_list_x.append(marker_list_x_tmp)for i in marker_list_x:    for j in i:        marker_list_x_final.append(j)########################################################################################################################### 每个数据(scatter_plot_data里面的每个数据)对应的marker的颜色color_list_x = []color_list_x_final = []for i, j in zip(color_list, range(len(scatter_plot_data))):    color_list_x_tmp = [i] * len(scatter_plot_data[j])    color_list_x.append(color_list_x_tmp)for i in color_list_x:    for j in i:        color_list_x_final.append(j)ax.scatter(spotx, scatter_plot_data, c=color_list_x_final, s=30, marker=marker_list_x_final)ax.grid(True, ls=':', color='b', alpha=0.3)plt.title('甲乙丙各班语文成绩Scatter_chart分析', fontweight='bold')ax.set_xticks(x_loc)ax.set_xticklabels(x_labels, rotation=90)ax.set_ylabel('分数/百分制', fontweight='bold')# 设置x, y坐标轴的刻度标签字体加粗plt.xticks(weight='bold')plt.yticks(weight='bold')fig.tight_layout()plt.show()

输出结果如下:

在这里插入图片描述

注意:这里我们可以看到此时程序运行的时候报错,而2.1.2 Case2 与2.1.1 Case1 相比仅仅只是多了如下几行代码:
#############################################################
#############################################################
# 每个数据(scatter_plot_data里面的每个数据)对应的marker的形状
marker_list_x = []
marker_list_x_final = []
for i, j in zip(marker_list, range(len(scatter_plot_data))):
marker_list_x_tmp = [i] * len(scatter_plot_data[j])
marker_list_x.append(marker_list_x_tmp)
for i in marker_list_x:
for j in i:
marker_list_x_final.append(j)
#############################################################
#############################################################
这几行代码的目的本来是想给每组数据(scatter_plot_data里面包含三组数据:[ClassA_C, ClassB_C, ClassC_C])赋予不同的marker形状类型,但是这样行不通,原因是ax.scatter()在一次绘图中只能接受一种marker类型,若想赋予多种marker类型,需要多次调用ax.scatter(),但这显然不符合我们的本次绘图的主要意图。这种情况的绘图详见本文中第四部分所讲内容。



注意:如果想保存这种画布带背景颜色且轴域也带背景颜色的图片(在此图中,画布[fig]背景颜色为#B0C4DE,轴域[ax]背景颜色为white),需要使用以下语句保存到本地,具体语句如下:

plt.savefig(picture_name + '.jpg', facecolor=self.fig.get_facecolor())# 其中picture_name为给图片命的名字

四、多种颜色的普通分组散点图

1.示例数据如下

表格如下(示例):


班别语文成绩(分/100分制)数学成绩(分/100分制)英语成绩(分/100分制)
甲班807090
9090100
7595100
658585
857575
958590
10090100
100100100
8010075
708570
909085
959590
859895
869995
928590
908880
958670
907580
857870
1009075
乙班606070
707075
807575
658070
757560
807590
736598
758095
856085
908075
959070
659560
709565
759070
808075
858575
957580
857575
806070
706580
丙班6010080
8010090
100100100
10095100
10095100
1009590
909595
959595
959095
958590
859095
959090
959095
959590
959095
809590
959595
909590
909595
909085

现在需要把表格中的数据绘制成散点图,从而进一步分析每个班级的学生成绩情况。

2.代码如下

2.1 代码如下(示例):

2.1.1 Case1:
import matplotlib.pyplot as pltimport numpy as np# 设置字体, 解决中文乱码问题plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']# 解决图像中的'-'负号的乱码问题plt.rcParams['axes.unicode_minus'] = FalseClassA_C = [80, 90, 75, 65, 85, 95, 100, 100, 80, 70, 90, 95, 85, 86, 92, 90, 95, 90, 85, 100]ClassA_M = [70, 90, 95, 85, 75, 85, 90, 100, 100, 85, 90, 95, 98, 99, 85, 88, 86, 75, 78, 90]ClassA_E = [90, 100, 100, 85, 75, 90, 100, 100, 75, 70, 85, 90, 95, 95, 90, 80, 70, 80, 70, 75]ClassB_C = [60, 70, 80, 65, 75, 80, 73, 75, 85, 90, 95, 65, 70, 75, 80, 85, 95, 85, 80, 70]ClassB_M = [60, 70, 75, 80, 75, 75, 65, 80, 60, 80, 90, 95, 95, 90, 80, 85, 75, 75, 60, 65]ClassB_E = [70, 75, 75, 70, 60, 90, 98, 95, 85, 75, 70, 60, 65, 70, 75, 75, 80, 75, 70, 80]ClassC_C = [60, 80, 100, 100, 100, 100, 90, 95, 95, 95, 85, 95, 95, 95, 95, 80, 95, 90, 90, 90]ClassC_M = [100, 100, 100, 95, 95, 95, 95, 95, 90, 85, 90, 90, 90, 95, 90, 95, 95, 95, 95, 90]ClassC_E = [80, 90, 100, 100, 100, 90, 95, 95, 95, 90, 95, 90, 95, 90, 95, 90, 95, 90, 95, 85]fig = plt.figure(figsize=(8, 6), facecolor='#B0C4DE')ax = fig.add_subplot(facecolor='white')group_dataA = [ClassA_C, ClassA_M, ClassA_E]scatter_dataABC_C = [ClassA_C, ClassB_C, ClassC_C]scatter_dataABC_M = [ClassA_M, ClassB_M, ClassC_M]scatter_dataABC_E = [ClassA_E, ClassB_E, ClassC_E]# 橙绿蓝color_list = ['#FF8C00', '#00FF00', '#0000FF']# 'o':圆圈; 'D':钻石; 's':正方形marker_list = ['o', 'D', 's']x_labels = ['甲班', '乙班', '丙班']legend_labels = ['语文', '数学', '英语']length = len(x_labels)x_loc = np.arange(length)# 统计每个刻度标签下有几个groupgroup_number = len(group_dataA)total_width = 0.5scatter_total_width = total_width * 0.65interval_total_width = total_width * 0.35scatter_width = scatter_total_width / group_number###################################################if group_number == 1:    interval_width = interval_total_widthelse:    interval_width = interval_total_width / (group_number - 1)###################################################if group_number % 2 == 0:    x1_scatter = x_loc - (group_number / 2 - 1) * scatter_width - scatter_width / 2 - (group_number / 2 - 1) * interval_width - interval_width / 2else:    x1_scatter = x_loc - ((group_number - 1) / 2) * scatter_width - ((group_number - 1) / 2) * interval_widthx_list_scatter = [x1_scatter + scatter_width * i + interval_width * i for i in range(group_number)]###################################################scatter_data = [scatter_dataABC_C, scatter_dataABC_M, scatter_dataABC_E]for i in range(len(scatter_data)):    ##################################################################    # scatter_data_num用来统计每组数据的长度, 画scatter图时会用到    scatter_data_num = []    for j in scatter_data[i]:        scatter_data_num_tmp = len(j)        scatter_data_num.append(scatter_data_num_tmp)    ##################################################################    # 画scatter    # spotx是每一组scatter所有的点的横坐标    spotx = []    for j_spotx, k_spotx in zip(x_list_scatter[i], scatter_data_num):        spotx_tmp = [j_spotx] * k_spotx        spotx.append(spotx_tmp)    # print('$$$spotx:', spotx)    ax.scatter(spotx, scatter_data[i], c=color_list[i], s=30, label=legend_labels[i], marker=marker_list[i])    ##################################################################ax.grid(True, ls=':', color='b', alpha=0.3)plt.title('甲乙丙各班语文/数学/英语成绩Scatter_chart分析', fontweight='bold')ax.set_xticks(x_loc)ax.set_xticklabels(x_labels, rotation=90)ax.set_ylabel('分数/百分制', fontweight='bold')################################################################################################################################################################################################################################plt.legend(title='学科', loc='center left', bbox_to_anchor=(1.02, 0.5), facecolor='None', edgecolor='#000000',           frameon=True, ncol=1, markerscale=3, borderaxespad=0, handletextpad=0.1, fontsize='x-large', title_fontsize='x-large')################################################################################################################################################################################################################################plt.xticks(weight='bold')plt.yticks(weight='bold')fig.tight_layout()plt.show()

输出结果如下:

在这里插入图片描述

注意:如果想保存这种画布带背景颜色且轴域也带背景颜色的图片(在此图中,画布[fig]背景颜色为#B0C4DE,轴域[ax]背景颜色为white),需要使用以下语句保存到本地,具体语句如下:

plt.savefig(picture_name + '.jpg', facecolor=self.fig.get_facecolor())# 其中picture_name为给图片命的名字

五、总结

以上就是今天要讲的内容,本文详细介绍了各种散点图的绘制过程和方法,并用实例给大家演示了具体的实现代码和实现逻辑,希望对大家学习画散点图有帮助。

来源地址:https://blog.csdn.net/Mr_Dragon66/article/details/127814209

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python Matplotlib数据可视化绘图之(三)————散点图

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python数据可视化之用Matplotlib绘制常用图形

目录一、散点图二、柱状图三、直方图四、扇形图总结一、散点图 散点图用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或总结坐标点的分布模式。 特点:判断变量之间是否存在数量关联趋势,表示离群点的分布规律。散点图绘制:
2022-06-02

Python数据可视化实践之使用Matplotlib绘制图表

数据可视化是数据分析的重要环节,通过将数据转化为图形,可以更直观地展示数据特征和规律。Python中的Matplotlib库是一个强大的数据可视化工具,本文将带您了解Matplotlib的基本使用方法,以及如何绘制常见的图表
2023-05-18

Python数据可视化之怎么用Matplotlib绘制常用图形

这篇文章主要介绍Python数据可视化之怎么用Matplotlib绘制常用图形,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、散点图散点图用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或
2023-06-15

 python如何用matplotlib可视化绘图

本篇文章为大家展示了 python如何用matplotlib可视化绘图,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1、Matplotlib 简介Matplotlib 简介:Matplotlib 是
2023-06-26

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录