草庐IT

python数据分析-matplotlib散点图-条形图的绘制以及完整方法归纳02

Transcend oneself 2023-04-21 原文

matplotlib的基本使用02

一.散点图的绘制

散点图的绘制使用的是scatter()方法,传入的参数也是两个列表,分别为x,y坐标轴的值使用散点图可以显示若干数列序列中各数值之间是否存在相关性.

二.散点图绘图步骤及案例解析

1.导入模块

from matplotlib import pyplot as plt
import matplotlib

2.设置散点图所有字符的字体样式

matplotlib.rcParams[‘font.family’] = ‘Microsoft Yahei’ # 字体样式

3.编写主体代码

from matplotlib import pyplot as plt
import matplotlib

matplotlib.rcParams['font.family'] = 'Microsoft Yahei'  # 字体样式


def draw():
    x = [30.1, 29.9, 29.9, 28.1, 28.1, 27.7, 27.6, 27.0, 26.5, 26.4, 26.0,
         25.5, 24.6, 24.5, 24.4, 23.4, 23.2, 22.4,
         21.6,
         21.3, 21.2, 21.0, 20.6, 20.4, 20.3, 20.3, 20.1, 20.1, 20.0, 19.4,
         18.6, 18.2, 18.2, 18.2, 18.1, 18.1, 18.1,
         18.1,
         18.0, 17.9, 17.6, 17.4, 17.3, 17.3, 17.2, 17.1, 17.1, 16.9, 16.7,
         16.7]

    y = [52.3, 55.2, 48.9, 45.9, 45.7, 50.3, 49.3, 45.1, 58.0, 46.1, 45.3,
         43.7, 47.9, 45.3, 52.9, 46.8, 47.3, 49.3,
         46.5,
         47.6, 46.3, 43.6, 44.3, 44.6, 49.0, 40.8, 41.1, 41.2, 42.5, 44.1,
         50.5, 46.0, 45.2, 44.0, 54.2, 48.0, 41.0,
         45.8,
         40.8, 50.1, 48.3, 41.5, 44.3, 47.9, 63.8, 46.3, 45.2, 39.2, 46.8,
         39.3]
    z = ['勒布朗-詹姆斯', '扬尼斯-阿德托昆博', '乔尔-恩比德', '特雷-杨', '卢卡-东契奇', '德马尔 - 德罗赞',
         '贾 - 莫兰特', '杰森 - 塔特姆', '尼古拉 - 约基奇', '德文 - 布克', '多诺万-米切尔',
         '斯蒂芬-库里', '扎克-拉文', '谢伊-吉尔杰斯-亚历山大', '卡尔-安东尼-唐斯',
         '杰伦-布朗', '达龙-福克斯', '帕斯卡尔-西亚卡姆', '达里厄斯-加兰', '吉米-巴特勒', '德章泰-默里',
         '安东尼-爱德华兹', '泰勒-希罗', '克里斯-米德尔顿', '迈尔斯-布里奇斯', '弗雷德 - 范弗利特',
         '朱利叶斯 - 兰德尔', 'RJ - 巴雷特', '拉梅洛 - 鲍尔', '特里 - 罗齐尔', '朱 - 霍勒迪',
         '德斯蒙德-贝恩', '乔丹-普尔', '拉塞尔-威斯布鲁克', '约纳斯-瓦兰丘纳斯', '尼古拉 - 武切维奇',
         '小加里 - 特伦特', '博扬 - 波格丹诺维奇', '丹吉洛 - 拉塞尔', '克里斯蒂安 - 伍德',
         '托拜厄斯-哈里斯', '凯德-坎宁安', '安芬尼-西蒙斯', '泰雷斯-马克西', '德安德烈 - 艾顿',
         '安德鲁 - 威金斯', '凯尔 - 库兹马', '雷吉 - 杰克逊', '哈里森 - 巴恩斯', '科尔 - 安东尼']
    # 绘制图像
    plt.figure(figsize=(16, 8), dpi=80)
    # 将数据绘制到散点图上
    plt.scatter(x, y)
    plt.title('NBA2021-2022赛季球员得分榜前50名命名率散点图', color='red',fontsize=23)  # 添加标题
    plt.xlabel('分数', color='green', fontsize=16)  # 添加x轴文字
    plt.ylabel('命名率: %', color='green', fontsize=16)  # 添加y轴文字

    x_ticks = x[::-1]  # 得到升序的分数
    # 添加x轴的刻度内容
    plt.xticks(x_ticks[::5] + [max(x)], rotation=45)  # 按照步长为5拿内容, 再将最后的一个数字放进去

    y_ticks = range(int(min(y)), int(max(y)) + 1)  # 得到命中率的升序
    # 添加xy轴的刻度内容
    plt.yticks(y_ticks[::4])  # 将y轴的刻度内容展现出来
    # 将姓名放到图当中付出
    n = 0
    for i, j in zip(x, y):  # 迭代两个列表
        # x轴坐标 y轴坐标 姓名 字体大小
        plt.text(i - 0.5, j + 0.4, z[n], fontsize='10')
        n += 1
    # 将图展示出来
    plt.show()


draw()

4.主题代码解析

for i, j in zip(x, y): # 迭代两个列表
# x轴坐标 y轴坐标 姓名 字体大小
plt.text(i - 0.5, j + 0.4, z[n], fontsize=‘10’)
n += 1
这段代码主要是给每一个点都写上它的标识,这里的zip是matplotlib的一种迭代方法,它可以配合for循环迭代,将两个列表的对应元素打包成一个个的元组,然后返回有这些元组组成的列表
[(),(),(),(),(),(),(),()],里面使用text方法把各个元组对应的点的标识添加上去,上面-0.5和+0.4是因为有些元组对应坐标点在我们绘制图的范围外.

5.图形展示

三.条形图的绘制

使用bar方法,条形图用来比较各独立类别下的某单独数据的大小
plt.bar(x, height, width)
x: 数据的个数, 可以数字, 也可以是range对象
height: 要绘制的数据
width: 表示柱状的宽度, 默认为0.8

四.条形图案例展示

例: 勒布朗.詹姆斯职业生涯常规赛平均数据条形图

1.导入模块

from matplotlib import pyplot as plt
import matplotlib

五.绘制条形图完整代码

def main():
    # 每赛季的平均得分
    height = [20.9, 27.2, 31.4, 27.3, 30.0, 28.4, 29.7, 26.7, 27.1,
              26.8, 27.1, 25.3, 25.3, 26.4, 27.5, 27.4, 25.3, 25.0,
              30.1]
    # 生涯平均得分
    avg = sum(height) / len(height)
    # 绘制图像
    plt.figure(figsize=(16, 9), dpi=80)
    # 将数据绘制到柱状图上
    plt.bar(range(len(height)), height, width=0.4)
    # 将生涯平均得分画一条折线图
    plt.plot(range(len(height)), [avg for i in range(len(height))],
             color='red')
    # 添加标题
    plt.title('勒布朗.詹姆斯职业生涯常规赛平均数据条形图', color='red',
              fontsize=23)
    # 添加x轴文字
    plt.xlabel('赛季', color='green', fontsize=16)
    # 添加y轴文字
    plt.ylabel('分数', color='green', fontsize=16)
    # 生成x轴内容的列表
    x_ticks = ['%d-%d赛季' % (i, i + 1) for i in range(2003, 2022)]
    # 添加x轴的刻度内容
    plt.xticks(range(len(height)), x_ticks, rotation=30)
    # 得到一个range对象, 起始值是分数最小值, 结束值是分数是大值, 同时得把最大值包含进去
    y_ = range(int(min(height)), int(max(height)) + 2)  # 得到命中率的升序
    y_ticks = ['%d分' % i for i in y_]  # 生成分数的列表内容
    plt.yticks(y_[::2], y_ticks[::2])  # 将y轴的刻度内容展现出来
    # 展示风格
    plt.grid(alpha=0.3)
    # 将图展示出来
    plt.show()


main()

grid是设置背景网格的透明度(0-1)

六.条形图展示

七.多个条形图展示

例: 勒布朗.詹姆斯/凯文.杜兰特职业生涯常规赛平均数据对比条形图

from matplotlib import pyplot as plt
import matplotlib  # 载入matplotlib完整库

matplotlib.rcParams['font.family'] = 'Microsoft Yahei'  # 字体,改为微软雅黑,默认 sans-serif


def main():
    # 詹姆斯
    height1 = [20.9, 27.2, 31.4, 27.3, 30.0, 28.4, 29.7, 26.7, 27.1, 26.8,
               27.1, 25.3, 25.3, 26.4, 27.5, 27.4, 25.3, 25.0, 30.3]
    # 杜兰特
    height2 = [20.3, 25.3, 30.1, 27.7, 28.0, 28.1, 32.0, 25.4, 28.2, 25.1,
               26.4, 26.4, 26.0, 26.9, 29.6]
    # 库里
    height3 = [30, 50.3, 50.1, 47.7, 48.0, 58.1, 62.0, 55.4, 78.2, 45.1,
               54, 56.4, 56.0, 56.9, 59.6, 54.8, 52.6, 62.5, 71.3]

    # 绘制图像
    plt.figure(figsize=(16, 9), dpi=80)
    # 将数据绘制到柱状图上
    # 从x轴不断往右来添加数据, 同时在原有位置上往右挪0.4
    plt.bar([i for i in range(len(height1))], height1, width=0.2,
            color='red', label='勒布朗.詹姆斯')
    plt.bar([i+0.2 for i in range(len(height2))], height2, width=0.2,
            color='green', label='凯文.杜兰特')
    plt.bar([i + 0.4 for i in range(len(height3))], height3, width=0.2,
            color='blue', label='史蒂芬.库里')
    # 添加标题
    plt.title('勒布朗.詹姆斯/凯文.杜兰特/史蒂芬.库里职业生涯常规赛平均数据对比条形图',
              color='red', fontsize=23)
    # 添加x轴文字
    plt.xlabel('赛季', color='green', fontsize=16)
    # 添加y轴文字
    plt.ylabel('分数', color='green', fontsize=16)
    # 生成x轴内容的列表
    x_ticks = ['第%d个赛季' % (i + 1) for i in range(len(height1))]
    # 添加x轴的刻度内容
    plt.xticks(range(len(height1)), x_ticks, rotation=30)
    # 得到一个range对象, 起始值是分数最小值, 结束值是分数是大值, 同时得把最大值包含进去
    y_ = range(int(min(height1)), int(max(height1)) + 2)  # 得到命中率的升序
    y_ticks = ['%d分' % i for i in y_]  # 生成分数的列表内容
    plt.yticks(y_[::4], y_ticks[::4])  # 将y轴的刻度内容展现出来
    # 展示风格
    plt.grid(alpha=0.3)
    # 展示图例
    plt.legend()
    # 将图展示出来
    plt.show()


main()

1.结果展示

八.总结

本篇文章主要是为了通过案例的形式,去熟悉matplotlib库里面的实例方法,再者条形图散点图以及上篇文章折线图,其实他们的主要步骤是一样的,我们只需要记忆并且熟悉他们不相同的地方,达到事半功倍的效果,希望本篇文章能够给你带来帮助,感谢支持!

有关python数据分析-matplotlib散点图-条形图的绘制以及完整方法归纳02的更多相关文章

  1. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  2. ruby - 什么是填充的 Base64 编码字符串以及如何在 ruby​​ 中生成它们? - 2

    我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%

  3. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  4. ruby - Ruby 有 `Pair` 数据类型吗? - 2

    有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳

  5. Python 相当于 Perl/Ruby ||= - 2

    这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。

  6. java - 什么相当于 ruby​​ 的 rack 或 python 的 Java wsgi? - 2

    什么是ruby​​的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht

  7. ruby - 我如何添加二进制数据来遏制 POST - 2

    我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_

  8. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  9. 华为OD机试用Python实现 -【明明的随机数】 2023Q1A - 2

    华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o

  10. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

随机推荐