当前位置: 首页 > 编程日记 > 正文

10 个案例分享几个 Python 可视化小技巧,助你绘制高质量图表

8071d0fbd00adb622888cdb6b6254c4c.gif

作者 | 俊欣

来源 | 关于数据分析与可视化

一般在Python当中,我们用于绘制图表的模块最基础的可能就是matplotlib了,今天小编分享几个用该模块进行可视化制作的技巧,帮助你绘制出更加高质量的图表。

同时本篇文章的第二部分是用Python来制作可视化动图,让你更加清楚的了解到数据的走势

数据集的导入

最开始,我们先导入数据集,并且导入我们需要用到的库

import pandas as pd
import matplotlib.pyplot as plt
plt.style.use("seaborn-darkgrid")# 读取数据
aapl = pd.read_csv("AAPL.csv")
print(aapl.head())

output

Date        Open        High  ...       Close   Adj Close    Volume
0  2021-9-30  143.660004  144.380005  ...  141.500000  141.293793  88934200
1  2021-10-1  141.899994  142.919998  ...  142.649994  142.442108  94639600
2  2021-10-4  141.759995  142.210007  ...  139.139999  138.937225  98322000
3  2021-10-5  139.490005  142.240005  ...  141.110001  140.904358  80861100
4  2021-10-6  139.470001  142.149994  ...  142.000000  141.793060  83221100

简单的折线图

上面的代码我们用到的是“苹果”公司2021年的9月31日到12月31日的股价走势,我们先来简单的画一张折线图,代码如下

plt.figure(figsize=(12,6))
plt.plot(aapl["Close"])

output

145cb6b67afab67d2f832ef22ddeec4a.png

上面的折线图看着就有点单调和简单,我们就单单只可以看到数据的走势,除此之外就没有别的收获,我们甚至都不知道这条折线所表示的意义,因为接下来我们来进行一系列的优化

添加标题以及设置Y轴标签

第一步我们先给图表添加标题以及给X轴、Y轴设置标签,代码如下

plt.figure(figsize=(12,6))
plt.plot(aapl["Close"])# 添加标题和给Y轴打上标记
plt.ylabel("Closing Price", fontsize=15)  ## 收盘价
plt.title("Apple Stock Price", fontsize=18) ## 标题:苹果公司股价

output

9805ca6ccdcbe0c5d46e2d2d20ffc44d.png

再添加一个Y轴

现有的这个Y轴代表的是收盘价,要是我们还想再往图表当中添加另外一列的数据,该数据的数值范围和已有的收盘价的数值范围不同,如果放在一起,绘制出来的图表可不好看,如下

plt.figure(figsize=(12,6))
plt.plot(aapl["Close"])# 第二根折线图
plt.plot(aapl["Volume"])# Y轴的名称和标记
plt.ylabel("Closing Price", fontsize=15)
plt.title("Apple Stock Price", fontsize=18)

output

aac0d31632b7123f0db89096c64823ef.png

可以看到我们代表股价的那条蓝线变成了水平的直线,由于它的数值范围和“Volume”这一列当中的数据,数值范围差了不少,因此我还需要一个Y轴,来代表“Volume”这一列数据的走势,代码如下

fig, ax1 = plt.subplots(figsize=(12,6))# 第二个Y轴的标记
ax2 = ax1.twinx()
ax1.plot(aapl["Close"])
ax2.plot(aapl["Volume"], color="r")# 添加标题和Y轴的名称,有两个Y轴
ax1.set_ylabel("Closing Price", fontsize=15)
ax2.set_ylabel("Volume", fontsize=15)
plt.title("Apple Stock Price", fontsize=18)

output

cfdd6702042b108149ec4a97eda3e9c5.png

上面的代码我们通过twinx()方法再来新建一个Y轴对象,然后对应的数据是Volume这一列当中的数据,而给Y轴标记的方式也从上面的plt.ylabel()变成了ax.set_ylabel()

添加图例

接下来给绘制好的图表添加图例,不同的折线代表的是不同的数据,代码如下

fig, ax1 = plt.subplots(figsize=(12,6))
# 第二个Y轴
ax2 = ax1.twinx()
ax1.plot(aapl["Close"])
ax2.plot(aapl["Volume"], color="r")
# 设置Y轴标签和标题
ax1.set_ylabel("Closing Price", fontsize=15)
ax2.set_ylabel("Volume", fontsize=15)
plt.title("Apple Stock Price", fontsize=18)
# 添加图例
ax1.legend(["Closing price"], loc=2, fontsize=12)
ax2.legend(["Volume"], loc=2, bbox_to_anchor=(0, 0.9), fontsize=12)

output

d1cac4204d908eb16189b0a580ecf9d1.png

plt.legend()方法当中的loc参数代表的是图例的位置,2代表的是左上方,具体的大家可以通过下面的链接来查阅

https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.legend.html

将网格线去除掉

有时候我们感觉图表当中的网格线有点碍眼,就可以将其去掉,代码如下

fig, ax1 = plt.subplots(figsize=(12,6))
# 第二个Y轴
ax2 = ax1.twinx()
ax1.plot(aapl["Close"])
ax2.plot(aapl["Volume"], color="r")
# 设置Y轴标签和标题
ax1.set_ylabel("Closing Price", fontsize=15)
ax2.set_ylabel("Volume", fontsize=15)
plt.title("Apple Stock Price", fontsize=18)
# 添加图例
ax1.legend(["Closing price"], loc=2, fontsize=12)
ax2.legend(["Volume"], loc=2, bbox_to_anchor=(0, 0.9), fontsize=12)
# 去掉网格线
ax1.grid(False)
ax2.grid(False)

output

5a5e00f9dde5e9b6e20fc9c040d804a3.png

这样出来的图表是不是看着顺眼多了呢?!

在图表当中添加一些文字

有时候我们也想在图表当中添加一些文字,可以是注释也可以是一些赞美性的语言,可以通过代码来实现,如下

fig, ax1 = plt.subplots(figsize=(12,6))
# 第二个Y轴
ax2 = ax1.twinx()
ax1.plot(aapl["Close"])
ax2.plot(aapl["Volume"], color="r")
# 设置Y轴标签和标题
ax1.set_ylabel("Closing Price", fontsize=15)
ax2.set_ylabel("Volume", fontsize=15)
plt.title("Apple Stock Price", fontsize=18)
# 添加图例
ax1.legend(["Closing price"], loc=2, fontsize=12)
ax2.legend(["Volume"], loc=2, bbox_to_anchor=(0, 0.9), fontsize=12)
# 去掉网格线
ax1.grid(False)
ax2.grid(False)date_string = datetime.strptime("2021-10-31", "%Y-%m-%d")# 添加文字
ax1.text(date_string, ## 代表的是添加的文字的位置170, "Nice plot!", ## 添加的文字的内容fontsize=18, ## 文字的大小color="green" ## 颜色
)

output

96a1f79e32a6176ee57ea7a0e20355eb.png

图表当中的中文显示

在上面的图表当中,无论是标题还是注释或者是图例,都是英文的,我们需要往里面添加中文的内容时候,还需要添加下面的代码

plt.rcParams['font.sans-serif'] = ['SimHei']fig, ax1 = plt.subplots(figsize=(12,6))
# 第二个Y轴
ax2 = ax1.twinx()
ax1.plot(aapl["Close"])
ax2.plot(aapl["Volume"], color="r")
# 设置Y轴标签和标题
ax1.set_ylabel("收盘价", fontsize=15)
ax2.set_ylabel("成交量", fontsize=15)
plt.title("苹果公司股价走势", fontsize=18)
# 添加图例
ax1.legend(["Closing price"], loc=2, fontsize=12)
ax2.legend(["Volume"], loc=2, bbox_to_anchor=(0, 0.9), fontsize=12)
# 去掉网格线
ax1.grid(False)
ax2.grid(False)
# 添加文字
ax1.text(date_string,170, "画的漂亮", fontsize=18, color="green"
)

output

b3d08c12f577157007b277f3b5aa4f68.png

这样全局的字体都被设置成了“黑体”,文本内容都是用中文来显示

X轴/Y轴上刻度字体的大小

我们还可以给X轴/Y轴添加边框,以及边框的粗细也可以通过代码来进行调整,如下

plt.rcParams["axes.edgecolor"] = "black"
plt.rcParams["axes.linewidth"] = 2

同时我们还可以对X轴以及Y轴上面的刻度,它们的字体大小进行设置,代码如下

# tick size
ax1.tick_params(axis='both', which='major', labelsize=13)
ax2.tick_params(axis='both', which='major', labelsize=13)

output

0ceac4959e532a14b5092d50041b0330.png

出来的图表是不是比一开始的要好很多呢?

制作动图

接下来给大家介绍一个制作动图的Python库,bar_chart_race,只需要简单的几行代码,就可以制作出随着时间变化的直方图动图,代码如下

import bar_chart_race as bcr
import pandas as pd
# 生成GIF图像
df = pd.read_csv('covid19_tutorial.csv', index_col=index_col,parse_dates=parse_dates)
bcr.bar_chart_race(df, 'covid19_tutorial_horiz.gif')

output

368e959015ec8f3e4f8ff465c77a6012.gif

大家若是感兴趣,可以登上它的官网

https://www.dexplo.org/bar_chart_race/

来了解更多如何使用该模块来制作Python可视化动图的案例

3a5a4d61b6625d0653062a5b955ff024.gif

技术

用技术实现时序羽毛球动作预测

资讯

AI在嘈杂环境中看唇语识别理解

技术

50行python代码制作数据大屏

资讯

GPT-3平替版语言模型,性能更优化

e8d340ce594386d91481447cab60fbc4.png

分享

3c76251cb6cc836c026548a7d691f52e.png

点收藏

89d8d52cb14b63686052e93b1ac6fae3.png

点点赞

ae317d7fa6514a6248d9a4a2b101184a.png

点在看

相关文章:

(转) 地区赛获胜策略,赛前默念!

1. 比赛中评测会有些慢,偶尔还会碰到隔10分钟以上才返回结果的情况,这段时间不能等结果,必须开工其他题,如果WA,两道题同时做。交完每道题都要先打印。2. 比赛时发的饭不是让你当时就吃的,那是给你赛后吃的…

USG防火墙telnet实验

实验使用USG5500防火墙 &#xff0c;<SRG>system-view [SRG]interface g0/0/0       [SRG-GigabitEthernet0/0/0]ip address 192.168.1.1 24          接口配置地址[SRG-GigabitEthernet0/0/0]display this&#xff08;显示当前配置&#xff09; [SRG-G…

如何营造专属你的企业技术影响力氛围感?我不允许你还不知道

CSDN 推出《开发者研究与洞察》服务。基于3200万开发者的资源&#xff0c;从开发者视角出发&#xff0c;聚焦开发者“关注”、“使用”、“体验”三方面&#xff0c;帮助技术推广者打造技术品牌、优化技术产品的市场投放策略、提升技术产品的开发者使用体验&#xff0c;直接聆听…

php报错Permission denied

去apache的log下看error_log文件 #cd /usr/local/apache2/logs/ (13)Permission denied: exec of ....index.php failed加权限就可以 #chmod x index.php路径

Spring笔记——8.基于XML Schema的简化配置

我们可以使用XML Schema的配置方式来简化xml文件的配置。p&#xff1a;简化设值注入p&#xff1a;与property子元素作用相同&#xff0c;用于设值注入。若想使用p&#xff0c;则xml文件中需要引入对p的说明&#xff0c;一般自动生成的xml都会自带。xmlns:p"http://www.spr…

测试服务命名和动态注册路由的方式@Xan

2019独角兽企业重金招聘Python工程师标准>>> 1、测试服务命名&#xff1a;如不需要网关进行权限和登录验证时&#xff0c;服务名称命名后面加“tests”&#xff0c;例如&#xff1a; sysadmintests 2、动态注册路由地址&#xff1a; http://192.168.2.164:55551/sys…

POJ1386 Play on Words

题意&#xff1a;判断一些单词能不能首尾连成一体 #include <iostream> #include <algorithm> #include <cstring> #include <cmath> #include <cstdio> using namespace std; int n,father[30],range[30],save[100010],in[30],out[30]; bool us…

Linux tail 命令详解

用途从指定点开始将文件写到标准输出。使用tail命令的-f选项可以方便的查阅正在改变的日志文件&#xff0c;tail -f filename会把filename里最尾部的内容显示在屏幕上&#xff0c;并且不但刷新&#xff0c;使你看到最新的文件内容。 语法标准语法tail [ -f ] [ -c Number | …

万粉博主推荐,微信小程序 +Flask 后端调用 AnimeGanV2

作者 | Yunlord博客 | Yunlord做一个小程序&#xff0c;直接在手机端就能一键生成专属于自己的动漫头像&#xff0c;下面是展示效果&#xff01;&#xff01;&#xff01;核心功能设计该小程序想要实现的是将微信头像或者选择相册中的照片动漫化&#xff0c;所以拆解需求后&…

第十周课下作业

第十周课下作业&#xff08;补做课堂测试&#xff09; 一、知识点总结 1、单链表 创建单链表链表中数据的插入list.add("**");链表中数据的排序Collections.sort();链表中数据的删除lsit.remove("");2、排序 树集概念树映射 TreeMap<K,V>**适合用于数…

IE6的bug

内部系统 公司6楼正常&#xff0c;7楼不正常&#xff0c;一查系统没问题&#xff0c;7楼IE6&#xff0c;6楼是IE8 原因是系统接入第三方一个富客户端的程序&#xff0c;这个IE6不支持所以一直卡着。卡多了就挂了。 因为表象是还在卡着的网页浏览器一关重开就好了。。。。 而如…

python-sendcmd主动模式访问ftp——修改port中IP地址信息

用python访问ftp站点&#xff0c;主动模式发送port时&#xff0c;修改了IP地址&#xff0c;抓包分析网络会话信息。activesocket.py 1 #python for socket active mode 2 #!/usr/bin/python 3 # -*- coding: utf-8 -*- 4 import ftplib5 import os 6 import socket 7 impor…

「CSDN 2021年度 IT 技术影响力之星评选」活动报名倒计时!

“CSDN 2021年度IT技术影响力之星评选”活动自2021年12月6日启动以来受到了行业各界的关注以及企业和个人的积极响应&#xff0c;截止目前&#xff0c;已收到上千份参评报名。本次评选活动的第一阶段——企业/个人参与提名将于2022年1月30日结束&#xff0c;以真实数据为基础&a…

Spring Cloud入门教程 - Zuul实现API网关和请求过滤

简介 Zuul是Spring Cloud提供的api网关和过滤组件&#xff0c;它提供如下功能&#xff1a; 认证过滤压力测试Canary测试动态路由服务迁移负载均衡安全静态请求处理动态流量管理在本教程中&#xff0c;我们将用zuul&#xff0c;把web端的请求/product转发到对应的产品服务上&…

​谷歌大神 Jeff Dean 领衔,万字展望5大 AI 趋势

‍‍作者 | 学术头条来源 | 学术头条对于关心人工智能技术进展的读者来说&#xff0c;每年年底来自整个谷歌 research 团队撰写的年终总结&#xff0c;可谓是必读读物。今天&#xff0c;由谷歌大神 Jeff Dean 领衔&#xff0c;这份总结虽迟但到。出于知识传播目的&#xff0c;“…

php的webservice的wsdl的XML无法显示

php的webservice的因为wsdl有中文所以xml无法显示 可以用Nopepad 转码即可 以UTF-8无BOM编码

Journey源码分析三:模板编译

2019独角兽企业重金招聘Python工程师标准>>> 在Journey源码分析二&#xff1a;整体启动流程中提到了模板编译&#xff0c;这里详细说下启动流程 看下templates.Generate()源码: func Generate() error {compiledTemplates.Lock()defer compiledTemplates.Unlock()//…

linux中安装程序

实验&#xff1a;为 Linux 主机安装应用程序 环境&#xff1a;vmware workstation 14 . redhad-server-6.4需求&#xff1a;1.使用 RPM 包的方式安装 Mozilla Firefox 浏览器2.使用源代码包编译的方式安装 Apache3.使用 RPM 包的方式安装Webmin管理软件&#xff0c;并使用 rpm查…

php 的webservice类库NuSoap介绍

NuSOAP 是 PHP 环境下的 WEB 服务编程工具&#xff0c;用于创建或调用 WEB 服务。它是一个开源软件&#xff0c;当前版本是 0.9.5 &#xff0c;支持 SOAP1.1 、 WSDL1.1 &#xff0c;可以与其他支持 SOAP1.1 和 WSDL1.1 的系统互操作。 NuSOAP 完全由PHP语言编写&#xff0c;由…

我用 YOLOv5 做情感识别!

作者 | 陈信达来源 | DatawhaleAI技术已经应用到了我们生活中的方方面面&#xff0c;而目标检测是其中应用最广泛的算法之一&#xff0c;疫情测温仪器、巡检机器人、甚至何同学的airdesk中都有目标检测算法的影子。下图就是airdesk&#xff0c;何同学通过目标检测算法定位手机位…

Odoo 学习 【二】Environment 概览

Environment 参考链接: http://odoo-new-api-guide-line.readthedocs.io/en/latest/environment.html#environment 在新的API中&#xff0c;引入了环境的概念&#xff0c;它的主要目标是提供对游标、用户、模型、上下文、记录集、和缓存的封装。 有了这些&#xff0c;你没有必要…

php使用NuSoap产生webservice结合WSDL让asp.net调用

<?php require_once("nusoap-0.9.5/lib/nusoap.php"); //定义服务程序 function Add($a,$b){return $a$b;}//初始化服务对象 , 这个对象是类 soap_server 的一个实例 $soap new soap_server; //调用服务对象的 register 方法注册需要被客户端访问…

分享 10 个超实用的 Python 编程技巧

作者 | 欣一来源 | Python爱好者集中营今天小编来给大家分享几个Python的编程技巧&#xff0c;帮助你迅速完成地从小白到Python大神的蜕变。字典翻转首先我们来看字典的翻转&#xff0c;假设我们有下面类似的一个字典对象与数据car_dict { "brand":"Tesla"…

百度编辑器(1.4.3—net版)上传图片路径及其他配置

1&#xff1a;文件配置图&#xff1a; 2&#xff1a;文件夹配置图&#xff1a; 3&#xff1a;多余的功能删除&#xff08;懒人不想使用百度编辑器官网的自定义&#xff0c;而选择全部功能的直接下载&#xff0c;对于没用的功能可以注释掉&#xff0c;以后有需要就可以再拿出来用…

windows下配置redis集群,启动节点报错:createing server TCP listening socket *:7000:listen:Unknown error...

windows下配置redis集群&#xff0c;启动节点报错&#xff1a;createing server TCP listening socket *:7000:listen:Unknown error 学习了&#xff1a;https://blog.csdn.net/u014652744/article/details/71774171 竟然真的是需要bind 127.0.0.1 不同的机器为啥就不一样呢&am…

apache日志分析简介

对apache的日志分析做下简单的介绍,主要参考apache官网的Log Files,手册参照 http://httpd.apache.org/docs/2.2/logs.html一.日志分析 如果apache的安装时采用默认的配置,那么在/logs目录下就会生成两个文件,分别是access_log和error_log1.access_log access_log为访问日志,记…

Kotlin语法(基础)

一、基础语法&#xff1a; 1. 定义包名&#xff1a; 包名应该在源文件的最开头&#xff0c;包名不必和文件夹路径一致&#xff1a;源文件可以放在任意位置。 package my.demo 2. 定义函数&#xff1a; fun sum(a: Int , b: Int) : Int{return a b } 表达式函数体自动推断型的返…

未来十年,人机交互将是重要的发展

编译 | 禾木木出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;机器人市场包括广泛且不断扩大的产品范围。经过多年的合作&#xff0c;可以预测机器人技术和机器人行业的未来发展。根据需求&#xff0c;专业服务应用将占据主要市场份额。客户行为的变化已成为行业发展…

20170507Linux七周二次课 io监控free ps 网络状态 抓包

七周二次课&#xff08;5月7日&#xff09;10.6 监控io性能10.7 free命令10.8 ps命令10.9 查看网络状态10.10 linux下抓包扩展tcp三次握手四次挥手 http://www.doc88.com/p-9913773324388.htmltshark几个用法&#xff1a;http://www.aminglinux.com/bbs/thread-995-1-1.html监控…

navicat for mysql导出表结构

show create table cm_events;