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

介绍三种绘制时间线图的方法

aaa72e987e0c848e52ca15dc49ea04fa.gif

作者 |周萝卜

来源 |萝卜大杂烩

今天我们再来分享几种不同的制作方法,大家可以自行比较下各种方法的优劣。

Matplotlib 制作

Matplotlib 作为 Python 家族最为重要的可视化工具,其基本的 API 以及绘制流程还是需要掌握的。尤其是该库的灵活程度以及作为众多工具的基础,重要性不言而喻

下面我们来看下该如何绘制一个时间线图表

导入库以及设置 XY 轴数据

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = Falsey1 = [5, 10, 15, 20, 25, 30, 35, 40, 45, 50]
x1 = [4, 4, 4, 4, 4, 4, 4, 4, 4, 4]

因为是通过折线图来实现时间线效果,为了达到展示一条竖线的情况,这里设置了 X 轴数值都相同,Y 轴数值等差分布

创建画布及标题

fig, ax = plt.subplots(sharey=True, figsize=(7, 4))
ax.plot(x1, y1, label='First line', linewidth=3, color='r', marker='o', markerfacecolor='white', markersize=12)
plt.title('萝卜大杂烩')
plt.suptitle('历史上的今天', fontsize=16, color='red')

此时效果如下

83d50dd6d1a07c7b087f73360d2aa815.png

接下来我们设置时间线两边的数据

# 右侧数据
right_y_year = 0.95
right_y_text = 0.9
year_right = 1931
for i in range(5):plt.text(0.57, right_y_year, str(year_right+1), fontsize=15, horizontalalignment='center', verticalalignment='center', transform=ax.transAxes, color='black')plt.text(0.75, right_y_text, "从百草园到三味书屋-鲁迅" + str(i), fontsize=15, horizontalalignment='center', verticalalignment='center', transform=ax.transAxes, color='red')right_y_year -= 0.2right_y_text -= 0.2year_right += 1# 左侧数据
left_y_year = 0.85
left_y_text = 0.8
year_left = 1941
for i in range(5):plt.text(0.43, left_y_year, str(year_left+1), fontsize=15, horizontalalignment='center', verticalalignment='center', transform=ax.transAxes, color='black')plt.text(0.2, left_y_text, "从百草园到三味书屋-鲁迅" + str(i), fontsize=15, horizontalalignment='center', verticalalignment='center', transform=ax.transAxes, color='red', url='https://www.baidu.com')left_y_year -= 0.2left_y_text -= 0.2year_left += 1

主要使用了 text 函数,为时间线轴两边分别添加数据

如果我们还想要添加个人的其他信息,比如公众号二维码等,可以在指定位置增加图片,同时去掉坐标轴

# 增加图片
img = plt.imread('二维码.png')
ax2 = plt.axes((0.7, 0.1, 0.3, 0.3))
ax2.imshow(img, origin='lower', alpha=0.5)
ax2.axis('off')
ax.axis('off')
plt.show()

可以看出,由于 text 函数是通过坐标来确定文字显示的位置的,所以我们时间线轴两边的数据分布还是不是特别完美,不知道是否有其他的更加方便的方法来设置,待探索。。。

Plotly 绘制

Plotly 作为 Python 家族另一个非常强大的可视化工具,同样可以完成时间线图的绘制

在绘图之前,我们先处理数据

这里使用的数据是2020年全年的微博热搜数据

import pandas as pdweibo = pd.read_csv("weibo_2020.csv")
def deal_date(frame):tmp = frame.split('-')return tmp[0] + '-' + tmp[1]weibo['new_date'] = weibo['date'].apply(lambda x : deal_date(x))
key_list_right = []
for i in range(1, 12, 2):if i < 10:mydate = '2020-0%s' % str(i)else:mydate = '2020-%s' % str(i)keyword = weibo[weibo['new_date'] == mydate].sort_values(by='searchCount', ascending=False)['keyword'].tolist()[0]searchCount = weibo[weibo['new_date'] == mydate].sort_values(by='searchCount', ascending=False)['searchCount'].tolist()[0]mount = str(i) + '月'content = ','.join([keyword, str(searchCount) + '搜索量', mount])key_list_right.append(content)
print(key_list_right)

Output:

['最新疫情地图,18130201搜索量,1月','肖战工作室道歉,13117531搜索量,3月','何鸿燊去世,15302424搜索量,5月','高考作文,15647446搜索量,7月','乘风破浪的姐姐成团之夜,8226994搜索量,9月','特朗普,7310000搜索量,11月']

可以看到,通过上面的数据处理,我们成功提取了1、3、5、7、9以及11月的当月搜索量最高的热搜标题,同理可以获取到双月份的热搜标题数据

下面开始作图

import plotly.express as px
import plotly.graph_objects as go
from plotly.subplots import make_subplots
import pandas as pd
from plotly.graph_objs import *layout = Layout(paper_bgcolor='rgba(0,0,0,0)',plot_bgcolor='rgba(0,0,0,0)',title={'text': '微博热搜', 'x': 0.5},yaxis={'title': 'Proportion (%)'}
)
fig = go.Figure(layout=layout)
fig.add_traces([go.Scatter(x=[2,2,2,2,2,2], y=[5, 10, 15, 20, 25, 30], text=key_list_right, textposition="bottom right", mode="lines+text"),go.Scatter(x=[2,2,2,2,2,2], y=[5, 10, 15, 20, 25, 30], textposition="top left", mode="lines+text", text=key_list_left)]) 
fig.update_traces(showlegend=False)
fig.update_layout(xaxis=dict(visible=False), yaxis=dict(visible=False))
fig.show()

通过 Plotly 绘图就相对简单很多了,直接使用 text 参数把我们得到的热搜数据添加上即可

最终效果如下

2924815cb73a36d58f309bc113108dae.png

效果很朴素,是因为我们没有进行过多的样式设置,大家可以自行探索下不同样式

Excel 绘制

上面的两种方法都需要有一定的代码基础,下面介绍的 Excel 方法则可以说是人人都能完成,一起来看看吧

先来看看最终的效果

db59bbb9bcdc77b341cad6350b2bbfa0.png

首先准备数据,我们在新建的 Excel 文档中创建如下数据

39313f1a15b1a846e09a21b879b9fb11.png

然后插入散点图

58ca91b87085ab60cb91780e5e10c18a.gif

先插入一个空白散点图,然后将 X 轴设置为【年份】,Y 轴设置为【位置】

cb4df96902fd7864fce58da92faee9ea.gif

再把 Y 轴和网格线都删除

接下来我们美化一下 X 轴

be00529822c9c1caaec3d188f4e0689d.gif

我们双击 X 轴,调出格式窗口,在坐标轴选项标签中设置【单位】,将【小】改为1,设置【刻度线】,将【主刻度线】设置为交叉

e988009c539a4a680e03b3d19701a840.gif

再点击【油漆桶】,选择一个线条的颜色,将宽度调整为2,将【结尾箭头类型】调整为向右箭头

再接下来我们把 X 轴连接起来

3c68f4b6e4c395f23c7c189a9f04032c.gif

首先选择一个散点,添加误差线。然后把横向的误差线设置为无轮廓,再选中竖向的误差线,把【垂直误差线】设置为负偏差,再把误差量设置为100%

f5bee7715aaf41e2a5aee46170eb319b.gif

422961119b80f299736f6cf20ac0be83.gif

最后再给竖向误差线调整样式即可

下面开始添加数据

我们把公司的各种大事件添加到数据表当中

49102b75eddcd066c78cf9d6dbd95a0f.gif

向图表中添加【数据标签】,即数据中事件那一列

a770e6c10f8dfb6af33ee781856e5532.gif

然后再去掉 Y 值即可

最后我们还可以通过 Excel 自带的各种图标进行美化操作

ba2ab8a595153ec0ece1ea3fe6a05891.gif

好了,以上就是今天分享的所有内容~

22aff775ce56f648d076e29caefdf4ad.gif

技术

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

资讯

体验在元宇宙豪宅里开聚会

技术

50行python代码制作数据大屏

资讯

这个AI模型火上GitHub热榜

251d54ea450da744eff1d1a0823cc278.png

分享

aa76572656452c47e9b1bcf48a6981fd.png

点收藏

6f9eb642e7ca78c212a167f7c1fa3d83.png

点点赞

a430df1bb0f9912f832a73b9cce0ff0c.png

点在看

相关文章:

phpize是什么

安装php&#xff08;fastcgi模式&#xff09;的时候&#xff0c;常常有这样一句命令&#xff1a;/usr/local/webserver/php/bin/phpize 一、phpize是干嘛的&#xff1f; phpize是什么东西呢&#xff1f;php官方的说明&#xff1a; http://php.net/manual/en/install.pecl.phpiz…

C语言比较好的风格梳理

errno int err;tb malloc(sizeof(struct xtracer_table));if (!tb) {err errno;fprintf(stderr, "%s:%d, errno:%d, %s\n",__func__, __LINE__, err, strerror(err));return NULL;} 转载于:https://www.cnblogs.com/muahao/p/8979144.html

Linux下Memcache服务器端的安装

Linux下Memcache服务器端的安装服务器端主要是安装memcache服务器端&#xff0c;目前的最新版本是 memcached-1.3.0 。下载&#xff1a;http://www.danga.com/memcached/dist/memcached-1.2.2.tar.gz http://memcached.googlecode.com/files/memcached-1.4.9.tar.gz 另外&#…

如何用技术恢复模糊的图像?在线教学…

作者 |小白 来源 |小白学视觉 有人认为恢复模糊的图像是不可能的&#xff0c;因为会丢失信息。但我对这个问题进行了很多思考&#xff0c;并认为如果输出图像的大小与输入图像的大小相同&#xff0c;那实际上是可能的&#xff01;这样&#xff0c;输出就有足够的像素/信息来恢复…

数据库创建索引的原则

数据库建立索引的原则 铁律一&#xff1a;天下没有免费的午餐&#xff0c;使用索引是需要付出代价的 索引的优点有目共睹&#xff0c;但是&#xff0c;却很少有人关心过采用索引所需要付出的成本。若数据库管理员能够对索引所需要付出的代价有一个充分的认识&#xff0c;也就不…

Linux上实现ssh免密码登陆远程服务器

平常使用ssh登陆远程服务器时&#xff0c;都需要使用输入密码&#xff0c;希望可以实现通过密钥登陆而免除输入密码&#xff0c;从而可以为以后实现批量自动部署主机做好准备。 环境如下&#xff1a; IP地址操作系统服务器端10.0.0.10CentOS 6.5 x86客户端10.0.0.61CentOS 6.5 …

分享memcache和memcached安装过程

Memcache是什么&#xff1f; Memcache是一个自由和开放源代码、高性能、分配的内存对象缓存系统。用于加速动态web应用程序&#xff0c;减轻数据库负载。 它可以应对任意多个连接&#xff0c;使用非阻塞的网络IO。由于它的工作机制是在内存中开辟一块空间&#xff0c;然后建立一…

导入导出Android手机文件

1、获得root权限&#xff1a;adb root&#xff1b; 如提示adbd cannot run as root in production builds&#xff0c;参见我的另一篇文章&#xff1a;http://www.cnblogs.com/hdk1993/p/4770388.html 2、设置/system为可读写&#xff1a;adb remount&#xff1b; 3、将文件复制…

GPT-3 不够 Open,BigScience 构建开放语言模型,规模小 16 倍

编译 | 禾木木 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; 大约一年前&#xff0c;总部位于纽约布鲁克林的自然语言处理初创公司 Hugging Face 推出了 BigScience。这是一个拥有 900 多名研究人员的国际项目&#xff0c;旨在更好地理解自然语言模型原理和提高大…

华为云微服务引擎CSE大量新特性上线,诚邀您免费体验

1、提供GO语言微服务开发框架SDK 支持插件化注册中心、多RPC协议&#xff08;已默认实现http和highway&#xff0c;可扩展&#xff09; 提供熔断降级、容错、路由管理、限流、错误注入、灰度发布等治理能力 2、提供Service Mesh商业版 支持.NET、Node.js、PHP等多语言应用…

memcache和memcached安装

首先要明确 memcache不是memcached第一步安装libevent #wget https://github.com/downloads/libevent/libevent/libevent-2.0.15-stable.tar.gz #tar libevent-2.0.15-stable.tar.gz #tar xzvf libevent-2.0.15-stable.tar.gz #cd libevent-2.0.15-stable #./configure --h…

点击按钮下载文件

RequestMapping("/download.do")public void download(HttpServletRequest request,HttpServletResponse response)throws Exception {String filePath "文件路径";FileInputStream fis null;OutputStream os null;try {fis new FileInputStream(fileP…

开源社区的危机:拒绝被“白嫖”?2大著名项目遭作者破坏

作者 | 林檎来源 | 数据实战派近日&#xff0c;一位开源开发者的故意破坏&#xff0c;再次引发了机构依赖开源库的争议。这一类开源库往往由维护者义务工作而支撑。被破坏的开源库是 Marak Squires 开发的 color.js 库和 faker.js 库。这两个库被广泛使用&#xff0c;其中不乏企…

状态和面向对象编程——1.定位步骤

定位 所有无人驾驶车要安全畅游全球&#xff0c;都必须经过一系列相同的步骤。 你一直在学习第一步&#xff1a;定位。在车辆能够安全驾驶之前&#xff0c;它们首先要使用传感器和收集的其他数据对它们所处的位置做出最佳估计。 卡尔曼滤波器 让我们来回顾一下卡尔曼滤波器对汽…

ldconfig命令详解,linux动态链接库

动态链接库管理命令 为了让动态链接库为系统所共享,还需运行动态链接库的管理命令--ldconfig.此执行程序存放在/sbin目录下. ldconfig命令的用途,主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如前介绍…

用于自动驾驶的实时 YUV 多任务 CNN

作者 | AI 修炼之路来源 | AI 修炼之路摘要本文提出了一种针对低功耗车用SoC优化的多任务卷积神经网络(CNN)结构。我们介绍了一个基于统一架构的网络&#xff0c;其中编码器由检测和分割两个任务共享。该网络以25FPS运行&#xff0c;分辨率为1280800。简要讨论了直接利用原生YU…

博客5:文件,目录以及用户的权限管理

linux用户与组的相关内容简介&#xff1a; 1.Linux用户&#xff1a;Username/UID管理员&#xff1a;root&#xff0c;0普通用户&#xff1a;1-65535系统用户&#xff1a;1-499&#xff08;在centos7上为1-999&#xff09;作用&#xff1a;对守护进程获取资源进行权限分配登录…

以太坊代币空投合约的实现

2019独角兽企业重金招聘Python工程师标准>>> 本文将介绍如何在以太坊智能合约中实现代币的空投。区块链以太坊世界中所谓空投&#xff08;airdrop&#xff09;&#xff0c;就是免费给你的区块链地址&#xff08;公钥&#xff09;发送代币。 代币空投的方式层出不穷&…

linux命令:ln 使用方法

命令&#xff1a;ln 使用方法指令名称 : ln使用权限 : 所有使用者使用方式 : ln [options] source dist&#xff0c;其中 option 的格式为 :[-bdfinsvF] [-S backup-suffix] [-V {numbered, existing, simple}][--help] [--version] [--] 说明 : Linux/Unix 档案系统中&#xf…

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

作者 | 俊欣来源 | 关于数据分析与可视化一般在Python当中&#xff0c;我们用于绘制图表的模块最基础的可能就是matplotlib了&#xff0c;今天小编分享几个用该模块进行可视化制作的技巧&#xff0c;帮助你绘制出更加高质量的图表。同时本篇文章的第二部分是用Python来制作可视…

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

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

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>**适合用于数…