Matplotlib是一个Python 2D绘图库,只需几行代码即可生成绘图,直方图,功率谱,条形图,错误图,散点图等
使用前安装该模块:使用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()
效果图: