matplotlib教程04---绘制常用的图形

欢迎关注公众号【Python开发实战】,免费领取Python学习电子书!

工具-matplotlib

使用matplotlib可以绘制出漂亮的图形。

极坐标图

绘制极坐标图,和创建子图时将projection属性设置为polar一样简单。

导入matplotlib

import matplotlib
import matplotlib.pyplot as plt
import numpy as np
radius = 1
theta = np.linspace(0, 2*np.pi*radius, 1000)
plt.subplot(111, projection='polar')
plt.plot(theta, np.sin(5*theta), 'g-')
plt.plot(theta, 0.5*np.cos(20*theta), 'r-')

plt.show()

png

三维图

绘制三维图也非常简单。首先需要导入Axes3D, 用来注册3d投影。然后创建一个子图,并将projection属性设置为3d,这将返回一个Axes3DSubplot对象,使用它调用plot_surface()方法,并提供x、y、z坐标以及可选属性。

from mpl_toolkits.mplot3d import Axes3D

x = np.linspace(-5, 5, 50)
y = np.linspace(-5, 5, 50)
X, Y = np.meshgrid(x, y)   # 根据坐标向量返回坐标矩阵
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)

figure = plt.figure(1, figsize=(12, 4))
subplot3d = plt.subplot(111, projection='3d')
subplot3d.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=matplotlib.cm.coolwarm, linewidth=0.1)
plt.show()

png

等高线图

还可以通过等高线来绘制上面的数据。

plt.contourf(X, Y, Z, cmap=matplotlib.cm.coolwarm)
plt.colorbar()
plt.show()

png

散点图

绘制散点图,只需要调用scatter()函数,并提供点对应的x和y坐标即可。

from numpy.random import rand
x, y = rand(2, 100)   # 返回一个形状为(2, 100)元素取值在[0,1)之间的数组 拆分为x和y

plt.scatter(x, y)
plt.show()

png

还可以选择提供每个点的大小。

x, y, scale = rand(3, 100)
scale = 500 * scale ** 5
plt.scatter(x, y, s=scale)
plt.show()

png

还有其他的属性可以设置,比如填充和边缘的颜色、alpha透明度等。

for color in ['red', 'green', 'blue']:
    n= 100
    x, y = rand(2, n)
    scale = 500.0 * rand(n) ** 5
    plt.scatter(x, y, s=scale, edgecolors='blue', color=color, alpha=0.3)
plt.grid(True)
plt.show()

png

画线

可以简单地使用plot()函数画线。在给定斜率和截距的情况下,可以很方便地创建一个函数来画一条无限长的线。还可以使用hlines和vlines函数来绘制水平和垂直线段。

from numpy.random import randn

def plot_line(axis, slope, intercept, **kwargs):
    # slope斜率 intercept截距
    xmin, xmax = axis.get_xlim()
    plt.plot([xmin, xmax], [xmin*slope+intercept, xmax*slope+intercept], **kwargs)
    
x = randn(1000)
y = 0.5*x+5+randn(1000)*2
plt.axis([-2.5, 2.5, -5, 15])   # 坐标轴的范围
plt.scatter(x, y, alpha=0.2)   # 散点图
plt.plot(1, 0, 'ro')    # 绘制点
plt.vlines(1, -5, 0, color='red')   # 垂直线段
plt.hlines(0, -2.5, 1, color='yellow')   # 水平线段
plot_line(axis=plt.gca(), slope=0.5, intercept=5, color='green')  # 画线
plt.grid(True)
plt.show()

png

直方图

data = [1, 1.1, 1.8, 2, 2.1, 3.2, 3, 3, 3, 3]
plt.subplot(211)
plt.hist(data, bins=10, rwidth=0.8)   # bins表示绘制条柱的个数 默认为10 rwidth表示条柱宽度的百分比
plt.subplot(212)
plt.hist(data, bins=[1, 1.5, 2, 2.5, 3], rwidth=0.95)
plt.xlabel('Value')
plt.ylabel('Frequency')
plt.show()

png

data1 = randn(400)
data2 = randn(500) + 3
data3 = randn(450) + 6
data4a = randn(200) + 9
data4b = randn(100) + 10

plt.hist(data1, bins=5, color='g', alpha=0.75, label='bar hist')
plt.hist(data2, color='b', alpha=0.65, histtype='stepfilled', label='stepfilled hist')
plt.hist(data3, color='r', histtype='step', label='step hist')
plt.hist((data4a, data4b), color=('r', 'm'), alpha=0.55, histtype='barstacked', label=('barstacked a', 'barstacked b'))

plt.xlabel('Value')
plt.ylabel('Frequency')
plt.legend()
plt.grid(True)
plt.show()

png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

凯旋.Lau

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

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

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

打赏作者

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

抵扣说明:

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

余额充值