比较(五)利用python绘制棒棒糖图

比较(五)利用python绘制棒棒糖图

棒棒糖图(Lollipop plot)简介

1

棒棒糖图实际上是修饰后的条形图。当在处理大量的值,并且当这些值都很高时,棒棒糖图就很有用。

快速绘制

  1. 基于matplotlib

    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt# 自定义数据
    df = pd.DataFrame({'group':list(map(chr, range(65, 85))), 'values':np.random.uniform(size=20) })# 按值重新排序
    ordered_df = df.sort_values(by='values')
    my_range=range(1,len(df.index)+1)# 利用stem(茎叶图)快速绘制
    plt.stem(ordered_df['values'])
    plt.xticks( my_range, ordered_df['group'])plt.show()
    

    2

定制多样化的棒棒糖图

自定义棒棒糖图一般是结合使用场景对相关参数进行修改,并辅以其他的绘图知识。参数信息可以通过官网进行查看,其他的绘图知识则更多来源于实战经验,大家不妨将接下来的绘图作为一种学习经验,以便于日后总结。

matplotlib主要利用stem绘制棒棒糖图,可以通过matplotlib.pyplot.stem了解更多用法

  1. 修改参数

    import pandas as pd
    import matplotlib as mpl
    import matplotlib.pyplot as plt
    import numpy as npplt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签# 自定义数据
    values = np.random.uniform(size=50)# 初始化布局
    fig = plt.figure(figsize=(12,6))# 隐藏标记
    plt.subplot(2, 3, 1) 
    plt.stem(values, markerfmt=' ', bottom=0.5)
    plt.title('隐藏标记')# 隐藏基线
    plt.subplot(2, 3, 2) 
    plt.stem(values, basefmt=" ")
    plt.title('隐藏基线')# 自定义基线位置
    plt.subplot(2, 3, 3) 
    plt.stem(values, markerfmt=' ', bottom=0.5)
    plt.title('自定义基线位置')# 通过获取stem返回值获取(markers, stemlines, baseline),并进行自定义操作
    # 获取markers并自定义标记
    plt.subplot(2, 3, 4) 
    (markers, stemlines, baseline) = plt.stem(values)
    plt.setp(markers, marker='D', markersize=10, markeredgecolor="orange", markeredgewidth=2)
    plt.title('获取markers并自定义标记')# 获取baseline并自定义基线
    plt.subplot(2, 3, 5) 
    (markers, stemlines, baseline) = plt.stem(values)
    plt.setp(baseline, linestyle="-", color="grey", linewidth=6)
    plt.title('获取baseline并自定义基线')# 获取baseline并自定义茎叶
    plt.subplot(2, 3, 6) 
    (markers, stemlines, baseline) = plt.stem(values)
    plt.setp(stemlines, linestyle="-", color="olive", linewidth=0.5 )
    plt.title('获取baseline并自定义茎叶')plt.tight_layout()
    plt.show()
    

    3

  2. 水平棒棒糖图

    import pandas as pd
    import matplotlib as mpl
    import matplotlib.pyplot as plt
    import numpy as npplt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签# 自定义数据
    df = pd.DataFrame({'group':list(map(chr, range(65, 85))), 'values':np.random.uniform(size=20) })# 按值重新排序
    ordered_df = df.sort_values(by='values')
    my_range=range(1,len(df.index)+1)# 自定义需要重点突出的数据
    my_color=np.where(ordered_df ['group']=='B', 'orange', 'skyblue')
    my_size=np.where(ordered_df ['group']=='B', 70, 30)# 初始化布局
    fig = plt.figure(figsize=(12,4))# 水平棒棒糖图
    plt.subplot(1, 2, 1) 
    plt.hlines(y=my_range, xmin=0, xmax=ordered_df['values'], color='skyblue')
    plt.plot(ordered_df['values'], my_range, "o")
    plt.yticks(my_range, ordered_df['group'])
    plt.title('水平棒棒糖图')# 水平棒棒糖图-Highlight
    plt.subplot(1, 2, 2) 
    plt.hlines(y=my_range, xmin=0, xmax=ordered_df['values'], color=my_color, alpha=0.4)
    plt.scatter(ordered_df['values'], my_range, color=my_color, s=my_size, alpha=1)
    plt.yticks(my_range, ordered_df['group'])
    plt.title('水平棒棒糖图-Highlight')plt.show()
    

    4

  3. 分组棒棒糖图

    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt# 自定义数据
    value1=np.random.uniform(size=20)
    value2=value1+np.random.uniform(size=20)/4
    df = pd.DataFrame({'group':list(map(chr, range(65, 85))), 'value1':value1 , 'value2':value2 })# 重新排序
    ordered_df = df.sort_values(by='value1')
    my_range=range(1,len(df.index)+1)# 绘制水平棒棒糖图
    plt.hlines(y=my_range, xmin=ordered_df['value1'], xmax=ordered_df['value2'], color='grey', alpha=0.4)
    plt.scatter(ordered_df['value1'], my_range, color='skyblue', alpha=1, label='value1')
    plt.scatter(ordered_df['value2'], my_range, color='green', alpha=0.4 , label='value2')
    plt.legend()# 标题、轴标签
    plt.yticks(my_range, ordered_df['group'])
    plt.title("Comparison of the value 1 and the value 2", loc='left')
    plt.xlabel('Value of the variables')
    plt.ylabel('Group')plt.show()
    

    5

  4. 颜色对比棒棒糖图

    import matplotlib.pyplot as plt
    import numpy as np
    import seaborn as sns# 自定义数据
    x = np.linspace(0, 2*np.pi, 100)
    y = np.sin(x) + np.random.uniform(size=len(x)) - 0.2# 自定义颜色:正值为橘色
    my_color = np.where(y>=0, 'orange', 'skyblue')# 绘制棒棒糖图
    plt.vlines(x=x, ymin=0, ymax=y, color=my_color, alpha=0.4)
    plt.scatter(x, y, color=my_color, s=1, alpha=1)# 标题、轴标签
    plt.title("Evolution of the value of ...", loc='left')
    plt.xlabel('Value of the variable')
    plt.ylabel('Group')plt.show()
    

    6

总结

以上通过matplotlib的stem快速绘制棒棒糖图,也可以利用matplotlib的vlines(垂直线)+scatter(散点)构造各种各样的棒棒糖图。

共勉~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/37600.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【前端环境1】安装nvm

【前端环境1】安装nvm 写在最前面一、下载nvm二、安装教程三、验证nvm安装 🌈你好呀!我是 是Yu欸 🌌 2024每日百字篆刻时光,感谢你的陪伴与支持 ~ 🚀 欢迎一起踏上探险之旅,挖掘无限可能,共同成…

狗都能看懂的Reinforcement Learning简介

文章目录 一、什么是强化学习二、强化学习的应用 一、什么是强化学习 强化学习的流程可以用上面这张图来说明:智能体(Agent)对环境进行观测,然后根据观测结果(Observation / State)采取相应的动作&#xff…

实现Ubuntu计划任务的反弹shell

一、实验环境 Ubuntu:IP地址:192.168.223.156 Kali : IP地址:192.168.223.152 二、编写crontab计划任务 在Ubuntu的系统中使用crontab -e命令编写计划任务,如下所示: 作用:是将一个交互式的bash …

device_node和platform_device的生成流程

1. machine_desc的匹配 《这篇》有介绍DT_MACHINE_START的一些初始化操作,匹配上就会在后续的初始化中调用DT_MACHINE_START的成员来初始化系统的设备树,时钟,中断等 start_kernelsetup_arch(&command_line);mdesc setup_machine_fdt(…

行列视报表系统制作的报表与厂级监控信息系统(SIS)系统中的报表有什么区别?

厂级监控信息系统是集过程实时监测、优化控制及生产过程管理为一体的厂级自动化信息系统,是处于DCS以及相关辅助程控系统与全厂管理信息系统之间的一套实时厂级监控信息系统,该产品也是本公司的一套独立产品。 SIS系统中的报表只是其中的一个模块&#…

混合云管道的未来:集成 MinIO、Tailscale 和 GitHub Actions

数据处理是现代软件开发的基本实践。它使团队能够自动收集、处理和存储数据,确保高质量的数据和高效的处理。 在本文中,我们将探讨如何建立一个全面的数据处理管道,重点介绍如何使用 Tailscale GitHub Action 进行安全网络。此设置还将包含 …

植物大战僵尸杂交版手机下载与安装全攻略

植物大战僵尸杂交版是一款深受玩家喜爱的策略冒险游戏,以其丰富的植物种类、多样的关卡设计和趣味的玩法著称。本文将为您提供详细的下载与安装教程,帮助您快速上手,享受游戏带来的乐趣。 游戏简介 植物大战僵尸杂交版在传统玩法的基础上&a…

【机器学习】语音转文字 - FunASR 的应用与实践(speech to text)

本文将介绍 FunASR,一个多功能语音识别模型,包括其特点、使用方法以及在实际应用中的表现。我们将通过一个简单的示例来展示如何使用 FunASR 将语音转换为文字,并探讨其在语音识别领域的应用前景。 一、引言 随着人工智能技术的不断发展&am…

linux的安全技术和防火墙

一、安全技术 1.入侵检测系统:特点式不阻断网络访问,主要式提供报警和事后监督,不主动介入,默默的看着你(相当于360安全卫士) 2.入侵防御系统:透明模式工作,对数据包,网…

平价高性价比蓝牙耳机有哪些?盘点好用平价的蓝牙耳机推荐

在当今快节奏的生活中,蓝牙耳机已经成为人们日常生活中不可或缺的配件,它们不仅让我们可以在行走、工作或者锻炼时享受音乐,还提供了便利的通话功能。然而,市面上蓝牙耳机种类繁多,价格相差甚远,大家往往难…

走进开源企业 | 湖南大学OpenHarmony技术实训活动在开鸿智谷顺利举办!

6月24日-6月26日,2024开放原子校源行之湖南大学信息科学与工程学院师生走进开源企业实训交流活动顺利落下帷幕。湖南大学信息科学与工程学院的师生代表团一行90人参与了湖南开鸿智谷数字产业有限公司(以下简称“开鸿智谷”)与母公司拓维信息系…

HEC-HMS水文模型教程

原文链接:HEC-HMS水文模型教程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247607904&idx5&sn1a210328a3fc8f941b433674d8fe2c85&chksmfa826787cdf5ee91d01b6981ebd89deac3e350d747d0fec45ce2ef75d7cb8009341c6f55114d&token90645021…

放射性单位请问放射性物质的单位cpm、dpm什么意思

放射性单位请问放射性物质的单位cpm、dpm什么意思?和Ci怎样换算?现在做同位素,搞不清楚剂量了.  anse7esn 1年前 已收到2个回答举报 赞 渡海 幼苗 共回答了22个问题采纳率:90.9% 举报 放射性活度单位 放射性核素在单位时间内发生衰变…

vue项目手机录音

手机实现录音功能&#xff0c;安卓和苹果都可。功能&#xff0c;点击开始录制录音后&#xff0c;随时可以停止录音&#xff0c;如果不点击停止最多录制15秒。 页面结构 <!--音频--> <div class"audio-box"><audio id"audioPlayer"controlsc…

修改element-ui日期下拉框datetimePicker的背景色样式

如图&#xff1a; 1、修改背景色 .el-date-picker.has-sidebar.has-time { background: #04308D; color: #fff; border: 1px solid #326AFF } .el-date-picker__header-label { color: #ffffff; } .el-date-table th { color: #fff; } .el-icon-d-arrow-left:before { color: …

从零搭建Java酒店预订系统:实战指南_01

项目介绍 一、 项目概述 项目背景: 模拟真实酒店预订流程,实现核心功能角色设定: 顾客、前台、后勤管理(可选:管理员)技术选型: Java + Spring Boot + 数据库(MySQL)+ 前端框架(Vue.js/React等)二、 需求分析与功能设计 功能模块划分: 用户模块:用户注册、登录、…

Postgres14.4(Docker安装)

Postgres14.4&#xff08;Docker安装&#xff09; 一&#xff0c;Docker拉取镜像 docker pull postgres:14.4 #检查镜像是否拉取成功 docker images | grep postgres二&#xff0c;新建挂载目录&#xff0c;并运行容器 mkdir -p /data/postgre/data chmod 777 /data/postgre…

AQS同步队列、条件队列源码解析

AQS详解 前言AQS几个重要的内部属性字段内部类 Node同步队列 | 阻塞队列等待队列 | 条件队列 重要方法执行链同步队列的获取、阻塞、唤醒加锁代码流程解锁 条件队列的获取、阻塞、唤醒大体流程 调用await()方法1. 将节点加入到条件队列2. 完全释放独占锁3. 等待进入阻塞队列4. …

【Python】探索 Pandas 中的 where 方法:条件筛选的利器

那年夏天我和你躲在 这一大片宁静的海 直到后来我们都还在 对这个世界充满期待 今年冬天你已经不在 我的心空出了一块 很高兴遇见你 让我终究明白 回忆比真实精彩 &#x1f3b5; 王心凌《那年夏天宁静的海》 在数据分析中&#xff0c;Pandas 是一个强大且…

小程序安卓手机点击uni-data-select 下拉框选择器会出现蓝色阴影

解决方法&#xff1a;在导入的包中找到uni-data-select.vue&#xff0c;接着找到.uni-stat__select样式&#xff0c;把cursor: pointer去掉。 如果出现穿透问题&#xff0c;uni-select__selector的z-index加高&#xff0c;默认是2。