Matplotlib 另类时间变化图制作

公众号后台回复“图书“,了解更多号主新书内容

作者:宁海涛

来源:DataCharm

01. 引言

本期推文主要介绍的还是Matplotlib关于 线(lines) 图的制作,虽然Matplotlib 制作线图的灵活性无法和ggplot2 的geom_segment()相比,但对于使用 Python进行可视化绘制的小伙伴们,希望本期推文对你有所帮助(Matplotlib或者seaborn 对于绘制稍带"艺术性"的图表绘制,其灵活性简直······,后面推文的可视化绘制,我还是首选Matplotlib进行绘制,但偶尔也会采用 ggplot2 进行绘制,其目的就是一个:绘制精美的数据可视化作品

02. 数据处理 

本期推文所采用的数据主要关于历代罗马皇帝(Roman Emperors)的死因的描述,时间跨度较长,正好可以采用 类似于时间变化的图表进行可视化展示。数据形式主要如下(部分):

这里的“case”列主要代表历代罗马皇帝的死因,通过查看可以发现,主要包括以下三种状况:

其中:

'Fatality or in Captivity' 表示"死亡或被囚禁",

'Natural Death in Peace'表示 '自然死于安乐',

'Unknown Cause of Death' 表示'死因不明',

这三种情况会在可视化结果中用 不同颜色给予区分,同时映射到对应的罗马皇帝名字上。

(1)设置死因(case)对应的颜色(字典的灵活应用)

代码:

结果如下:

(2)创建绘图辅助数据

这里需要创建用于绘图的辅助数据 ,涉及到的知识点也都是python数据 处理中常用的技巧,如append()np.repeat()、pandas的apply()结合lambda 等 ,如下:

结果如下:

(3)构建图例数据 

这里用到pandas 的DataFrame()构建,如下:

03. 数据可视化

(1)垂直线的绘制

垂直线的绘制用到的为 ax.vlines()方法,这里设置了线宽,颜色、以及ymin和ymax,其结果如下:

(2)连接线的绘制

Matplotlib 连接线的绘制方法还是还是采用上期推文Matplotlib 气球图 制作 中方法,此外还添加了文本绘制,如下:

效果如下(部分):

(3)绘制散点

散点的绘制也是常规的绘制方法,因为x的位置固定,这里需要有些不同,如下:

x位置设置如下:

x = np.repeat(1.5,data.shape[0])

效果如下:

(4)绘制文本和点的连接线

方法还是和上面连接线绘制方法一样,如下:

由于Matplotlib无法像ggplot2的拓展包ggrepel那样解决文本的重贴问题,这里设置了text_y 用于均匀绘制y轴位置:

text_y = np.linspace(data['reign_start'][0], 420, data.shape[0])

使用np.linspace()方法绘制间隔相等的y轴位置 坐标。

效果如下(部分):

至于文本颜色的设置,还是采用字典的依次取值,大家有什么不懂得地方可以看下我之前的推文Bar Chart Race Matplotlib制作,或者直接联系我

(5)图例文本的绘制

用于文本图例的绘制方法,即上面介绍的死因(cause)新数据集,绘制如下:

效果如下:

(6)字体设置

Matplotlib 用于字体设置的方法还是比较简单的,这里解释下是因为我在字体设置时遇到的问题,由于采用的字体为 cinzel (字体格式为Cinzel-Regular.otf),也已添加到电脑系统字体中 ,但在引言时还是不起作用 ,最终通过如下方法解决:

from matplotlib.font_manager import FontProperties
font_file = r"E:/Data_resourses/cinzel/Cinzel-Regular.otf"
font = FontProperties(fname=font_file,size=15)

在查阅资料时,找到:

修改 matplotlibrc 文件的字体修改方式,方法没试,不知道行不行,希望有此问题的解决方法,望告知,感谢

最后经过图表的修饰,其图表最后结果如下:

04. 总结

本期推文涉及的Matplotlib 绘图技巧还是 连接线的绘制方法,再加上辅助数据的添加,希望大家可以认真看下绘制连接线的定义函数,多练,多看,多模仿,是绘制优秀可视化作品的基础哦,希望大家能在此篇推文中学到一些对自己有用的知识点

>>>>

参考内容

(1)https://matplotlib.org/api/font_manager_api.html?highlight=fontproperties#matplotlib.font_manager.FontProperties

(2)https://matplotlib.org/api/_as_gen/matplotlib.lines.Line2D.html#matplotlib.lines.Line2D

(3)https://matplotlib.org/api/_as_gen/matplotlib.axes.Axes.text.html?highlight=text#matplotlib.axes.Axes.text

另外,为了大家更好的学习交流,DataCharm的学习交流群已经建立,由于群的二维码连接易失效,可以通过扫面下方二维码,添加本人微信,我拉你入群

◆ ◆ ◆  ◆ ◆

当当网开学季活动来袭,满100减50的基础上,实付满200的基础上使用优惠码DYU6NM可以再减40,相当于400-240,

使用方法如下:

步骤一,挑选心仪的图书至购物车点击结算 

步骤二,点击优惠券/码处

步骤三,输入优惠码DYU6NM (注意全部要大写)

需要注意的是:优惠码全场自营图书可用(教材、考试类除外)

                           

更多详情可以扫描下方二维码或点击小程序:

点击阅读原文,即可参与当当400-240购书活动
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值