MatPlotLib实践编程(二)

一、简单的例子

本文课pyplot风格,pyplot风格通常不如面向对象编程灵活。在这里看到的大多数函数调用也可以作为Axes对象的方法调用。我们建议浏览tutorials例程来了解它是如何工作的。
参考教程:https://matplotlib.org/stable/tutorials/introductory/pyplot.html

使用pyplot可以方便的产生可视化图像

import matplotlib.pyplot as plt
plt.plot([3, 8, 2, 9])
plt.ylabel('some numbers')
plt.show()

plt.plot说明:这里只有一个参数,代表y轴的值,而x轴默认从0开始算,即上述代码画的四个点为(0,3),(1,8),(2,2)和(3,9)
在这里插入图片描述
而给出具体的坐标则代码改为

plt.plot([1, 2, 7, 9],[1, 6, 9, 10])

则画(1,1),(2,6),(7,9)和(9,10)四个点
在这里插入图片描述

二、格式化绘图风格

对于每一对x、y参数都有一个可选的第三个参数。它是一个指示绘图颜色和线条类型的格式化字符串。您可以将颜色字符串与线条样式字符串连接起来。默认的格式字符串是’b-’,它表示蓝色实线。例如,要用红色圆圈绘制上面的图。代码改为

import matplotlib.pyplot as plt
plt.plot([1, 2, 7, 9],[1, 6, 9, 10],'ro')
plt.axis([0, 10, 0, 12])
plt.show()

上图代表将四个点画成红色圆圈,axis的参数表示[xmin, xmax, ymin, ymax]。有关完整的风格和格式字符串,参数plot官方文档
在这里插入图片描述
你还可以使用numpy数组,实际上,所有序列都在内部转换为numpy数组。

import matplotlib.pyplot as plt
import numpy as np

#evenly sampled time at 200ms intervals
t = np.arange(0., 5., 0.2)

#red dashes, blue squares and green triangles
plt.plot(t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^')
plt.show()

函数解析:
t = np.arange(0.,5.,0.2)代表起点为0,终点为5,步长的0.2的一串数字。然后通道plot的(t,t),(t,t2)以及(t,t3)画图。
输出结果
在这里插入图片描述

三、使用关键字字符串绘图

在某些情况下,数据格式需要使用字符串访问特定变量。例如,使用numpy.recarraypandas.DataFrame

import numpy as np
import matplotlib.pyplot as plt

data = {'a': np.arange(50),
        'c': np.random.randint(0, 50, 50),
        'd': np.random.randn(50)}
data['b'] = data['a'] + 10 * np.random.randn(50)
data['d'] = np.abs(data['d']) * 100

plt.scatter('a', 'b', c='c', s='d', data=data)
plt.xlabel('entry a')
plt.ylabel('entry b')
plt.show()

解析:scatter()是画散点图 。前两个参数分别代表x,y,c代表颜色(序列),s是标题或shape数组。
官方文档下有一段关于使用字典传参的注解。

Note
In addition to the above described arguments, this function can take a data keyword argument. If such a data argument is given, the following arguments are replaced by data[]:
All arguments with the following names: ‘c’, ‘color’, ‘edgecolors’, ‘facecolor’, ‘facecolors’, ‘linewidths’, ‘s’, ‘x’, ‘y’.
Objects passed as data must support item access (data[]) and membership test ( in data).

运行结果
在这里插入图片描述

四、用分类变量绘图

示例

import numpy as np
import matplotlib.pyplot as plt

names = ['group_a', 'group_b', 'group_c']
values = [1, 10, 100]
plt.figure(figsize=(9, 3))  
plt.subplot(131)
plt.bar(names, values)
plt.subplot(132)
plt.scatter(names, values)
plt.subplot(133)
plt.plot(names, values)
plt.suptitle('Categorical Plotting')
plt.show()

代码解析:plt.figure(figsize=(9, 3))代表创建一个9*3英寸的figure。plt.subplot(131)表示当前正准备在绘一行三列的三个子图中的第一个子图。然后在此画柱状图(plt.bar(names, values)),接着在一行三列的三个子图中的第二个子图画散点(plt.scatter(names,values)),最后在第三个子图直线(plt.plot(names.values))。

本例代码中的plt.figure(figsize=(9, 3))是可选的,因为一个figure为空时会被自动创建,subplot调用指定numrows, numcols和plot_number,其中plot_number的范围是1到numrowsnumcols。如果numrowsnumcols < 10,则subplot中的逗号是可选的。所以subplot(131)subplot(1,3,1)是一样的。

在这里插入图片描述

五、使用多种figures(图窗)和axes(笛卡尔坐标区)

在pyplot中,有一个figure和axes的概念。所有的绘图函数都要在当前的axes中完成。函数gca返回当前的axes(一个matplotlib.axes.Axes的实例,gcf返回当前的figure(一个matplotlib.figure.Figure实例)。通常情况下,我们不需要关心这些,因为函数底层已经帮我们完成。如下的脚本产生两个子图。

import numpy as np
import matplotlib.pyplot as plt

def f(t):
    return np.exp(-t) * np.cos(2*np.pi*t)

t1 = np.arange(0.0, 5.0, 0.1)
t2 = np.arange(0.0, 5.0, 0.02)

plt.figure()
plt.subplot(211)
plt.plot(t1, f(t1), 'bo', t2, f(t2), 'k')

plt.subplot(212)
plt.plot(t2, np.cos(2*np.pi*t2), 'r--')
plt.show()

代码解析:创建两行一列的子图plt.subplot(21x),在第一个位置画蓝色的圈以及黑色的线(plt.plot(t1, f(t1), 'bo', t2, f(t2), 'k'))。在第二个位置画红色的虚线。
运行结果
在这里插入图片描述

六、添加文本

可以任意位置添加文本(text),也可以为x轴,y轴设置文本以及设置标题(更多的例子)。

import numpy as np
import matplotlib.pyplot as plt

mu, sigma = 100, 15
x = mu + sigma * np.random.randn(10000)

# the histogram of the data
n, bins, patches = plt.hist(x, 50, density=1, facecolor='g', alpha=0.75)

plt.xlabel('Smarts')   #亦可设置属性fontsize = 14,color='red'
plt.ylabel('Probability')
plt.title('Histogram of IQ')
plt.text(60, .025, r'$\mu=100,\ \sigma=15$')
plt.axis([40, 160, 0, 0.03])
plt.grid(True)
plt.show()

运行结果
在这里插入图片描述
TIPS: 文本的属性,以及公式标题数学公式

七、注释文本

import numpy as np
import matplotlib.pyplot as plt

ax = plt.subplot()

t = np.arange(0.0, 5.0, 0.01)
s = np.cos(2*np.pi*t)
line, = plt.plot(t, s, lw=2)

plt.annotate('local max', xy=(2, 1), xytext=(3, 1.5),
             arrowprops=dict(facecolor='black', shrink=0.05),
             )

plt.ylim(-2, 2)
plt.show()

运行结果
在这里插入图片描述
在这个基本示例中,xy(箭头尖端)和xytext位置(文本位置)都位于数据坐标中。可参阅其他基本用法高级用法以及示例

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贱贱的剑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值