点击上"蓝字"关注我们
本文环境说明熊猫本次用的是 Anaconda 的 jupyter notebook 编写的本文代码。今天用到的库都是已经集成好的,无须另行安装。每个库的版本号我列在下方了。
Python :3.7.4
pandas : 1.1.4
numpy : 1.19.4
matplotlib : 3.3.2
可以在终端中运行如下代码查询自己环境中各个库的版本,如果你的版本比较低,可以运行升级代码对相应的库进行升级。
pip list #查看各个库的版本号pip install --upgrade 库名 #升级对应库版本
先 import 一波操作本文整体都在这基础上编写代码,如果你正一边看我的文章,一边在自己的电脑上实现代码,可以直接复制下面的代码先运行一波。
import pandas as pdimport numpy as npimport matplotlib as mplimport 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:由于有随机性函数,所以每个人运行出来的结果不一样,是正常的哦~)
# 折线图数据,我们使用一个累加数据,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]
风格实现良心注释,代码其实很简单。每个第一次用到的参数都在注释中标明了。
# 创建一个画布# 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 风格实现
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)
写在最后参考完这两种书写方法,大家可以找到自己更喜欢的风格。最好是按照一种风格书写,不要写串了风格~毕竟喜欢可视化的人不但追求作图好看,代码也要好看。祝大家也能写出如诗般的代码。下课!
扫码关注
长按扫码