直播365足球-beat365投注网站-bst365官网

如何用python画图——带你入门matplotlib

点击蓝色字关注我们吧! matplotlib是python中常用的一个可视化库,大多数的操作与MATLAB非常类似,所以对于从MATLAB迁移到python的朋友是非常友好

如何用python画图——带你入门matplotlib

点击蓝色字关注我们吧!

matplotlib是python中常用的一个可视化库,大多数的操作与MATLAB非常类似,所以对于从MATLAB迁移到python的朋友是非常友好的。matplotlib使用numpy进行数组运算,也支持pandas的Series直接用于matplotlib画图。

关于matplotlib的介绍我们将分为两期,本期主要介绍一些基本操作,下一期介绍一下稍微复杂一些的实例操作,及其一些画图设置。

下面简单介绍一下matplotlib的基本操作,带领大家入门。这里不可能面面俱到,更加详细的内容大家可以进一步参考官网。matplotlib官网(https://matplotlib.org/)

1. 简单画图示例先来一道appetizer,带大家感受一下matplotlib画图的基本操作及流程。要画出好看的图,对这些基础知识的了解必不可少。

代码语言:javascript代码运行次数:0运行复制# 1.0 生成画图实验数据

x = np.linspace(-10, 30, 100)

y1 = 0.1*x**3 - 10*x**2 + np.pi

y2 = - y1-1500

# 1.1 画图

plt.figure(figsize=(8,6),dpi=100) # 设置画图大小和分辨率

l1, = plt.plot(x, y1, c='steelblue', linewidth=2.0, linestyle='-')

l2, = plt.plot(x, y2, c='seagreen', linewidth=2.0, linestyle='--')

# 更多设置参考: [plot参数设置](https://matplotlib.org/api/_as_gen/matplotlib.pyplot.plot.html#matplotlib.pyplot.plot)

# 更多色彩设置: ![image](https://i.stack.imgur.com/k2VzI.png)

# 1.2 设置x,y轴取值范围和标签

plt.xlim((-10, 10)) # x取值范围

plt.ylim((-1500, 100)) # y取值范围

plt.xlabel('X',fontsize=20) # x标签

plt.ylabel('Y',fontsize=20) # y标签

# 1.3 设置新的刻度点

plt.xticks([-10,-5,0,5,10])

plt.yticks(np.linspace(-1600,100,18)) # 在[-1500,100]线性生成17个点

# 设置刻度点的一些属性,这里仅为了展示功能,视觉效果大家可以自己去尝试一下

plt.tick_params(labelcolor='firebrick', labelsize='20', width=1)

# 也可以把数字映射为字符串:

# plt.xticks([-10,-5,0,5,10],['S','M','L','XL','XXL'])

# 1.4 legend

plt.legend(handles=[l1,l2],labels=['Blue','Green'],loc='best',prop={'size': 10},ncol=2,framealpha=0.3)

# # loc 参数:

# 'best' : 0,

# 'upper right' : 1,

# 'upper left' : 2,

# 'lower left' : 3,

# 'lower right' : 4,

# 'right' : 5,

# 'center left' : 6,

# 'center right' : 7,

# 'lower center' : 8,

# 'upper center' : 9,

# 'center' : 10

# 1.5 title

plt.title('Title',size=20)

# # gca = 'get current axis'

# ax = plt.gca()

# 1.6 存图

plt.savefig("test.png", dpi=100)

plt.show()2. 柱状图示例很多时候我们需要绘制柱状图,那么用matplotlib怎么实现呢?很简单:

代码语言:javascript代码运行次数:0运行复制x_bar = [10, 20, 30, 40, 50]

y_bar = [0.2, 0.7, 0.6, 0.9, 0.6]

# 画图:

plt.figure(figsize=(6,5),dpi=100) # 设置画图大小和分辨率

bars = plt.bar(x_bar, y_bar, color='steelblue', label=x_bar, width=5)

# 在柱状图上标注数值:

for i, rec in enumerate(bars):

x_text = rec.get_x() # 获取柱形图横坐标 可以+/-数值使其居中

y_text = rec.get_height() + 0.02 # 获取柱子的高度 +0.02

plt.text(x_text, y_text, '%.2f' %y_bar[i], fontsize=15) # 标注文字

# 坐标轴设置:

plt.ylim((0, 1)) # y取值范围

plt.xlabel('X',fontsize=20) # x标签

plt.ylabel('Y',fontsize=20) # y标签

plt.tick_params(labelcolor='black', labelsize='15', width=1)

plt.show()3. 散点图与subplot散点图可以直观的展示变量之间的关系,也是我们常用的绘图类型,下面介绍一下如何用matplotlib绘制散点图,及用子图的方式展现对比。

代码语言:javascript代码运行次数:0运行复制plt.figure(figsize=(16,8), dpi=100) # 设置画图大小和分辨率

## 生成随机数:

X = np.random.normal(10, 20, 666) # 正态分布 mean = 10, std = 20

Y = np.random.normal(6, 66, 666) # 正态分布 mean = 6, std = 66

color = X + Y # 用颜色来区分散点的数值

size = ((X - Y)/10 + 0.001)**2 # 用大小来区分散点的数值

## 画图:

# subplot(行序号, 列序号, 图序号)

# plt.subplot(n_rows, n_cols, plot_num)

## subplot 1

plt.subplot(1, 2, 1)

plt.scatter(X, Y, s = 100, c = color, alpha=.6)

plt.xticks(()) # ignore xticks

plt.yticks(()) # ignore yticks

## subplot 2

plt.subplot(1, 2, 2)

plt.scatter(X, Y, s = size, c = 'seagreen',alpha=.6)

plt.xticks(()) # ignore xticks

plt.yticks(()) # ignore yticks

plt.tight_layout()

plt.show()4.图中图

有时候我们需要在图中画一些小的子图,这时候就要了解图中图的画法了。

代码语言:javascript代码运行次数:0运行复制fig = plt.figure(figsize=(10,6), dpi=100)x = np.linspace(0,12,20)

y = x**1.6

left, bottom, width, height = 0.1, 0.1, 0.9, 0.9

## 外图

ax1 = fig.add_axes([left, bottom, width, height])

ax1.plot(x, y, 'indianred')

# 坐标轴及标题设置:

ax1.set_xlabel('X',fontsize=20) # x标签

ax1.set_ylabel('Y',fontsize=20) # y标签

ax1.tick_params(labelcolor='black', labelsize='15', width=1)

ax1.set_title('title outside',fontsize=20)

## 内图1

ax2 = fig.add_axes([0.15, 0.5, 0.3, 0.4])

ax2.plot(y, np.exp(x)/10000, 'steelblue')

ax2.set_title('title inside 1')

## 内图2

ax3 = fig.add_axes([0.55, 0.65, 0.15, 0.25])

ax3.plot(y, x, 'black')

ax3.set_xlabel('x')

ax3.set_ylabel('y')

ax3.set_title('title inside 2')

## 内图3

## 还可以用另一种方式添加子图:

plt.axes([0.67, 0.175, 0.3, 0.35])

plt.plot(y[::-1], np.log(x+0.01), 'seagreen')

plt.xlabel('x')

plt.ylabel('y')

plt.title('title inside 3')

plt.show()5.一个栗子在掌握了以上matplotlib的基础后,我们可以我们可以借助matplotlib画出比较成熟的示意图,如下:

代码语言:javascript代码运行次数:0运行复制# 网上的一个栗子,供参考

import numpy as np

import matplotlib.pyplot as plt

plt.figure(figsize=(8, 5), dpi=80)

ax = plt.subplot(111)

ax.spines['right'].set_color('none')

ax.spines['top'].set_color('none')

ax.xaxis.set_ticks_position('bottom')

ax.spines['bottom'].set_position(('data', 0))

ax.yaxis.set_ticks_position('left')

ax.spines['left'].set_position(('data', 0))

X = np.linspace(-np.pi, np.pi, 256, endpoint=True)

C, S = np.cos(X), np.sin(X)

plt.plot(X, C, color="blue", linewidth=2.5, linestyle="-", label="Cos Function")

plt.plot(X, S, color="red", linewidth=2.5, linestyle="-", label="Sin Function")

plt.xlim(X.min() * 1.1, X.max() * 1.1)

plt.xticks([-np.pi, -np.pi / 2, 0, np.pi / 2, np.pi],

[r'$-\pi$', r'$-\pi/2$', r'$0$', r'$+\pi/2$', r'$+\pi$'])

plt.ylim(C.min() * 1.1, C.max() * 1.1)

plt.yticks([-1, +1],

[r'$-1$', r'$+1$'])

t = 2 * np.pi / 3

plt.plot([t, t], [0, np.cos(t)],

color='blue', linewidth=1.5, linestyle="--")

plt.scatter([t, ], [np.cos(t), ], 50, color='blue')

plt.annotate(r'$\sin(\frac{2\pi}{3})=\frac{\sqrt{3}}{2}$',

xy=(t, np.sin(t)), xycoords='data',

xytext=(+10, +30), textcoords='offset points', fontsize=16,

arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))

plt.plot([t, t], [0, np.sin(t)],

color='red', linewidth=1.5, linestyle="--")

plt.scatter([t, ], [np.sin(t), ], 50, color='red')

plt.annotate(r'$\cos(\frac{2\pi}{3})=-\frac{1}{2}$',

xy=(t, np.cos(t)), xycoords='data',

xytext=(-90, -50), textcoords='offset points', fontsize=16,

arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))

plt.legend(loc='upper left', frameon=False)

plt.show()6.又一个栗子我们经常会遇到要画序列对比的图,下面就是一个简易的“画图模板”,供大家参考。

代码语言:javascript代码运行次数:0运行复制x = np.linspace(1,100,100)

y1 = np.random.randint(-10,50,(100,))

y2 = np.random.randint(-10,50,(100,))

fig = plt.figure(figsize=(16,10),dpi=100)

ax1 = fig.add_subplot(211)

l1,=ax1.plot(x,y1, c='steelblue', label='y1')

ax1.tick_params(labelcolor='k', labelsize='20', width=3)

ax1.set_ylabel("y1",fontsize=20)

ax2 = fig.add_subplot(212)

l1,=ax2.plot(x,y2, c='indianred', label='y2')

ax2.tick_params(labelcolor='k', labelsize='20', width=3)

ax2.set_xlabel("x",fontsize=20)

ax2.set_ylabel("y2",fontsize=20)

plt.subplots_adjust(hspace =0.15)

plt.show()好了,这一期的matplotlib入门介绍就到这里啦,不可能面面俱到,更多内容需要大家自己查阅官网,参考部分给大家提供了一些学习资源供参考。

下一期我们将从毕业论文的绘图实例出发,给大家深入介绍matplotlib的一些进阶操作。

← 上一篇: 借呗借的钱在哪里找出来?
下一篇: 手机安装不了qq怎么办 →

相关推荐

千牛怎么样上传宝贝?千牛怎么批量上传宝贝

千牛怎么样上传宝贝?千牛怎么批量上传宝贝

电子商务逐渐成为人们生活的重要组成部分。作为阿里巴巴旗下的一款重要工具——千牛,为广大电商卖家提供了便捷的店铺管理、商品发布、

C919飞机再度拿下百架大单,目录价格为何较半年前涨超9%?

C919飞机再度拿下百架大单,目录价格为何较半年前涨超9%?

界面新闻记者 | 薛冰冰 4月26日晚间,中国国航(601111.SH)发布公告称,今日与中国商飞签订协议,向商飞购买100架C919飞机,基本价格合计约为10

耵聍多比较硬3天能泡软吗

耵聍多比较硬3天能泡软吗

三天是有可能将硬耵聍泡软的,但也可能需要更长时间。如果遵医嘱使用正确的方法和合适的软化剂,在一定条件下可以取得较好的效果。 目前

mysql修复表的三个方法

mysql修复表的三个方法

大家好,又见面了,我是全栈君。 断电或非正常关机可能导致MySQL数据库出现表损坏,特别是MyISAM表数据很大的时候。有三种方法,一种方法使

龟头上有两个马眼怎么回事

龟头上有两个马眼怎么回事

龟头上有两个马眼怎么回事 已通过实名认证 执业资质已审核通过 李传贵 男科 副主任医师 保定市第一中心医院 好评 4.8 接诊量 4.1万 同行认可 1

下周一起,“鸟箱”免费存放时间缩短为12小时,超时要交逾期费!

下周一起,“鸟箱”免费存放时间缩短为12小时,超时要交逾期费!

“鸟箱”运营方厦门奕宝互联科技有限公司相关负责人表示,此次将免费时效调整为12小时,是公司经过数据调研和实际情况调查后作出的决定