前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用 matplotlib 的两种姿势

使用 matplotlib 的两种姿势

作者头像
数据山谷
发布2020-11-13 10:17:16
5380
发布2020-11-13 10:17:16
举报
文章被收录于专栏:数据山谷数据山谷

本文环境说明

熊猫本次用的是 Anaconda 的 jupyter notebook 编写的本文代码。今天用到的库都是已经集成好的,无须另行安装。每个库的版本号我列在下方了。

Python :3.7.4

pandas : 1.1.4

numpy : 1.19.4

matplotlib : 3.3.2

可以在终端中运行如下代码查询自己环境中各个库的版本,如果你的版本比较低,可以运行升级代码对相应的库进行升级。

代码语言:javascript
复制
pip list #查看各个库的版本号
pip install --upgrade 库名 #升级对应库版本

先 import 一波操作

本文整体都在这基础上编写代码,如果你正一边看我的文章,一边在自己的电脑上实现代码,可以直接复制下面的代码先运行一波。

代码语言:javascript
复制
import pandas as pd
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
%matplotlib

# 让图像可以正常显示中文
plt.rcParams['font.family']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False

Matplotlib 作图组件

Matplotlib 擅长制作 2D 图表,每张图表的元素有很多,每个元素都有对应的方法做编辑修改。下图来自 Matplotlib 官网。

使用 Matplotlib 的两种姿势

使用 Matplotlib 一般有两种方法,也就是常说的两种接口。

  • 面向对象接口:创建并显示图形和轴,并在其基础上调用方法。
  • pyplot 接口:自动管理图形和轴,使用 pyplot 方法函数进行绘图。

不管是什么样的图,两种方式都是可以实现的。没有过多的区别,可能只是书写风格上有区别。下面就给大家展示一下,用两种不同风格的代码做出同样一张图。大家可以感受一下。

目标输出图

数据准备

首先我们看到目标输出的图片是一个画布上分为四个模块,分别是直方图、散点图、折线图、柱状图。下面这部分代码,分别是为这 4 张图准备的数据。可以直接复制到你们的编译器中,运行看看每个变量的数据都是什么样的,这里就不做展示了。(PS:由于有随机性函数,所以每个人运行出来的结果不一样,是正常的哦~)

代码语言:javascript
复制
# 折线图数据,我们使用一个累加数据,
data1 = np.random.randn(50).cumsum()
# 直方图数据,直方图只需要一组数据即可生成
data2 = np.random.randn(100)
# 散点图数据,散点图中每个点都需要横纵坐标来确定位置,所以需要两组数据;
data3_1 = np.arange(30)
data3_2 = data3_1+np.random.randn(30)
# 柱状图数据,data4_1中的数据作为分类型数据作为横坐标,用data4_2来确定每个柱子的高低。
data4_1 = ['数','据','山','谷','十','万','加']
data4_2 = [10,15,20,30,17,11,15]

风格实现

良心注释,代码其实很简单。每个第一次用到的参数都在注释中标明了。

代码语言:javascript
复制
# 创建一个画布
# figsize表示画布横纵尺寸
# dpi表示清晰度(数值越大越清晰)
fig = plt.figure(figsize=(15,8),dpi=120)

# 在画布上创建 4 个子图
# fig.add_subplot(横向分布数,纵向分布数,子图索引)
ax1 = fig.add_subplot(2,2,1) 
ax2 = fig.add_subplot(2,2,2)
ax3 = fig.add_subplot(2,2,3)
ax4 = fig.add_subplot(2,2,4)

# 用 data1 数据在第一个子图上创建折线图
# color 折线颜色
# linestyle 折线样式,这里使用了虚线
# marker 折点样式
# markersize 折点大小
ax1.plot(data1,color='k',linestyle='--',marker='o',markersize=3)

# 用 data2 数据在第二个子图上创建直方图
# bin 直方图柱子个数
# alpha 图像透明度(0为完全透明,1为完全不透明)
ax2.hist(data2,bins=20,color='k',alpha=0.7)

# 用 data3_1 和 data3_2 在第三个子图上创建散点图
ax3.scatter(data3_1,data3_2,color='k')

# 用 data4_1 和 data4_2 在第三个子图上创建柱状图
ax4.bar(data4_1,data4_2,color='k',alpha=0.7)

# 给每个小图像添加标题
ax1.set_title("折线图")
ax2.set_title("直方图")
ax3.set_title("散点图")
ax4.set_title("柱状图")

pyplot 风格实现

代码语言:javascript
复制
plt.figure(figsize=(15,8),dpi=120)

# 编辑第一个子图
plt.subplot(221)
plt.title("折线图")
plt.plot(data1,color='k',linestyle='--',marker='o',markersize=3)

# 编辑第二个子图
plt.subplot(222)
plt.title("直方图")
plt.hist(data2,bins=20,color='k',alpha=0.7)

# 编辑第三个子图
plt.subplot(223)
plt.title("散点图")
plt.scatter(data3_1,data3_2,color='k')

# 编辑第四个子图
plt.subplot(224)
plt.title("柱状图")
plt.bar(data4_1,data4_2,color='k',alpha=0.7)

写在最后

参考完这两种书写方法,大家可以找到自己更喜欢的风格。最好是按照一种风格书写,不要写串了风格~毕竟喜欢可视化的人不但追求作图好看,代码也要好看。

祝大家也能写出如诗般的代码。下课!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据山谷 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图数据库 KonisGraph
图数据库 KonisGraph(TencentDB for KonisGraph)是一种云端图数据库服务,基于腾讯在海量图数据上的实践经验,提供一站式海量图数据存储、管理、实时查询、计算、可视化分析能力;KonisGraph 支持属性图模型和 TinkerPop Gremlin 查询语言,能够帮助用户快速完成对图数据的建模、查询和可视化分析。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档