Matplotlib的简单使用

Matplotlib是一个Python 2D绘图库,只需几行代码即可生成绘图,直方图,功率谱,条形图,错误图,散点图等

官方:https://matplotlib.org/


使用前安装该模块:使用pycharm可以进入 Settings-> Project ->Project Interpreter -> 点击右侧,绿色加号

在出来的搜索框输入matplotlib-> 点击下面的Install Package 等待提示安装成功即可。


散点图:

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)  # 把整个图划分为1行1列的图 然后将该图放在第1个位置
n = 128  #
X = np.random.normal(0, 1, n)  # 生成随机数 128个点
Y = np.random.normal(0, 1, n)
T = np.arctan2(Y, X)  # 指定显示范围 颜色
# plt.axes([0.025, 0.025, 0.95, 0.95])#上色
# plt.scatter(X, Y, s=75, c=T, alpha=0.5)
ax.scatter(X, Y, s=75, c=T, alpha=0.5)
plt.xlim(-1.5, 1.5), plt.xticks(())  # x的范围 隐藏坐标x
plt.ylim(-1.5, 1.5), plt.yticks(())  # y的范围 隐藏坐标y
# plt.xlim(-1.5, 1.5)  # x的范围
# plt.ylim(-1.5, 1.5)  # y的范围
plt.axis()
plt.title("scatter")  # 设置标题
plt.xlabel("x")  # x轴
plt.ylabel("y")  # y轴
plt.savefig("scatter")
plt.show()

小结:

  • fig.add_subplot(2,2,3) 将整张画布分为2行2列 这样的话 就分为了4块区域,然后将图展示在第3块区域
  • np.random.normal(0,1,128) 随机生成128个0-1之间的随机数
  • np.arctan2(Y,X) 颜色也是随机的
  • ax.scatter(X,Y,s=75,c=T,alpha=0.5) 画图参数 横坐标 纵坐标  标记大小 颜色 透明度
  • plt.xlim(-1.5,1.5) x的范围 
  • plt.xticks(()) 隐藏x坐标
  • plt.title("散点图") 设置标题
  • plt.xlabel("x") 设置x轴标签
  • plt.ylabel("y") 设置y轴标签
  • plt.savefig("scatter") 保存生成图片为scatter.png
  • plt.show() 展示图片

图片效果:

有坐标:

隐藏坐标:


柱状图:

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
fig.add_subplot(111)  # 和fig.add_subplot(3, 3, 2) 效果同样,但是如果大于10就不能这么写了 将该图放在第一个位置
n = 10  # 10个点
X = np.arange(n)  # 生成1-9
Y1 = (1 - X / float(n)) * np.random.uniform(0.5, 1.0, n)
Y2 = (1 - X / float(n)) * np.random.uniform(0.5, 1.0, n)

plt.bar(X, +Y1, facecolor='#9999ff', edgecolor='white')  # 放在上面 填充颜色 以及边缘颜色
plt.bar(X, -Y2, facecolor='#ff9999', edgecolor='white')  # 放在下面 填充颜色 以及边缘颜色

for x, y in zip(X, Y1):  # 添加注释  条的位置
    plt.text(x + 0.4, y + 0.05, '%.2f' % y, ha='center', va='bottom')

for x, y in zip(X, Y2):  # 添加注释 条的位置
    plt.text(x + 0.4, -y - 0.05, '%.2f' % y, ha='center', va='top')

plt.savefig("bar")
plt.show()

小结:

  • fig.add_subplot(111) 是简写也是(1,1,1) 分为1行1列第一个位置
  • X=np.arange(10) 生成1-9
  • Y=(1-X/float(n)) * np.random.uniform(0.5,1.0,10) 产生10个0.5-1之间的数
  • plt.bar(X,Y,facecolor='#8986ff',edgecolor='white') 横坐标 纵坐标 填充颜色 边缘颜色
  • plt.text() 在条的位置添加注释 或是 数值

效果图:


饼图:

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
fig.add_subplot(111)
data = [3, 4, 5, 7, 3]
labels = ['a', 'b', 'c', 'd', 'e']
explodes = [0 for x in data]
explodes[0] = 0.015
plt.pie(data, labels=labels, radius=0.8,  # data 是数据,labels 是标签,radius 是饼图半径
        explode=explodes,  # explodes 为0 代表不偏离圆心, 不为零则代表偏离圆心的距离
        autopct='%1.1f%%',  # 显示所占比例,百分数
        pctdistance=0.5,
        labeldistance=0.7,  # a,b,c,d 到圆心的距离
        textprops={'fontsize': 12, 'color': 'black'})  # 标签和比例的格式
# 每一块的值为1,最后为2  设置颜色  标签
# plt.pie(Z, explode=Z * .05, colors=['%f' % (i / float(n)) for i in range(n)],
#         labels=['%.2f' % (i / float(n)) for i in range(n)])
plt.axis('equal')  # 正圆
plt.legend(loc='upper right', bbox_to_anchor=(1.1, 1.05), fontsize=14, borderaxespad=0.3)
# loc =  'upper right' 位于右上角
# bbox_to_anchor=[0.5, 0.5] # 外边距 上边 右边
# ncol=2 分两列
# borderaxespad = 0.3图例的内边距
plt.suptitle('pie', fontsize=20)
plt.savefig("pie")
plt.show()

参考:https://blog.csdn.net/sinat_38340111/article/details/81023230

图片效果:


极值图:

极值折线图

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
fig.add_subplot(111)
n = 20  # 20个点
theta = np.arange(0.0, 2 * np.pi, 2 * np.pi / n)  # 0-2π
radii = 10 * np.random.rand(n)  # 半径随机
plt.plot(theta, radii)  # 方式二 极值图内画折线
plt.savefig("polar1")
plt.show()

效果图:

饼图极值图

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
fig.add_subplot(111, polar=True)  # 如果想变为圆形图内极值图
n = 20  # 20个点
theta = np.arange(0.0, 2 * np.pi, 2 * np.pi / n)  # 0-2π
radii = 10 * np.random.rand(n)  # 半径随机
plt.polar(theta, radii)  # 方式一
plt.savefig("polar2")
plt.show()

效果图:


热图

import numpy as np
import matplotlib.pyplot as plt

n = 1000
# 用meshgrid生成一个二维数组
x, y = np.meshgrid(np.linspace(-3, 3, n), np.linspace(-3, 3, n))
z = (1 - x / 2 + x ** 5 + y ** 3) * np.exp(-x ** 2 - y ** 2)

# 画图
plt.figure('Hot', facecolor='lightgray')
plt.title('hotshot', fontsize=20)
plt.xlabel('x', fontsize=14)
plt.ylabel('y', fontsize=14)
plt.tick_params(labelsize=10)
plt.grid(linestyle=':')
plt.imshow(z, cmap='jet', origin='low')
plt.colorbar().set_label('z', fontsize=14)
plt.savefig("heatmap")
plt.show()

参考:https://www.cnblogs.com/gengyi/p/9440195.html

效果图:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm

fig = plt.figure()
fig.add_subplot(111)
data = np.random.rand(10, 10)  # 10*10随机数
cmap = cm.Blues  # 蓝色
# 差值方法 color map 最小白色 最大blue
map = plt.imshow(data, interpolation='nearest', cmap=cmap, aspect='auto', vmin=0, vmax=1)
plt.savefig("cm")
plt.show()

效果图:


3D图:

import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(1, 1, 3, s=100)
plt.savefig("3D")
plt.show()

效果图:

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
import numpy as np


fig = plt.figure()
ax = fig.gca(projection='3d')

# Make data.
X = np.arange(-5, 5, 0.25)
Y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)

# Plot the surface.
surf = ax.plot_surface(X, Y, Z, cmap=cm.coolwarm,
                       linewidth=0, antialiased=False)

# Customize the z axis.
ax.set_zlim(-1.01, 1.01)
ax.zaxis.set_major_locator(LinearLocator(10))
ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))

# Add a color bar which maps values to colors.
fig.colorbar(surf, shrink=0.5, aspect=5)
plt.savefig("surface")
plt.show()

参考:https://matplotlib.org/mpl_toolkits/mplot3d/tutorial.html#getting-started

效果图:


线形图:

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
fig.add_subplot(111)
x = np.linspace(0, 2, 100)

plt.plot(x, x, label='linear')
plt.plot(x, x**2, label='quadratic')
plt.plot(x, x**3, label='cubic')

plt.xlabel('x label')
plt.ylabel('y label')

plt.title("Simple Plot")

plt.legend()
plt.savefig("line")
plt.show()

效果图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值