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

matplotlib教程04---绘制常用的图形,第1张

文章目录
  • 欢迎关注公众号【Python开发实战】, 获取更多内容!
  • 工具-matplotlib
    • 极坐标图
    • 三维图
    • 等高线图
    • 散点图
    • 画线
    • 直方图

欢迎关注公众号【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()

三维图

绘制三维图也非常简单。首先需要导入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()

等高线图

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

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

散点图

绘制散点图,只需要调用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()

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

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

还有其他的属性可以设置,比如填充和边缘的颜色、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()

画线

可以简单地使用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()

直方图
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()

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()

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/718470.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-25
下一篇 2022-04-25

发表评论

登录后才能评论

评论列表(0条)

保存