import numpy as np import pandas as pd import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['FangSong'] plt.rcParams['axes.unicode_minus'] = False %config InlineBackend.figure_format = 'svg' plt.figure(figsize=(8,6),dpi=120) plt.subplot(2,1,1) plt.subplot(2,1,2)
Matplotlib —> 画图给自己看,用于数据探索
figure()
—> Figuresubplot()
—> 一个画布上可以有多个坐标系 —> Axesplot()
/ scatter()
/ bar()
/ pie()
/ hist()
/ box()
…
Seaborn —> 对Matplotlib做了封装,用默认的配置减少绘图参数
ECharts / D3.js —> 商业数据看板 / 数字化大屏 —> 前端JavaScript绘图库
# 折线图和散点图 x = np.linspace(-2 * np.pi, 2 * np.pi, 60) y1, y2 = np.sin(x), np.cos(x) y3, y4 = np.sin(x), np.cos(x) # 创建画布 ---> figure函数会返回Figure对象 # fig = plt.figure(...) plt.figure(figsize=(8, 6), dpi=120) # 创建坐标系 ---> subplot函数会返回Axes对象 # ax = fig.add_subplot(2, 2, 1) plt.subplot(2, 2, 1) # 调用plot函数绘制折线图,如果之前没有创建画布,在调用plot时会自动用默认设置创建画布 # ax.plot(...) plt.plot(x, y1, marker='x', color='#ff00ff', linestyle=':', linewidth=1) # 横轴和纵轴的标签 plt.xlabel(r'$ \alpha $') plt.ylabel(r'$ y = sin(\alpha) $') # 图的标题 plt.title('正弦曲线') ax = plt.subplot(2, 2, 2) # 修改坐标轴的位置和显示方式 ax.spines['top'].set_visible(False) ax.spines['right'].set_visible(False) ax.spines['left'].set_position(('data', 0.0)) ax.spines['bottom'].set_position(('data', 0.0)) # 定制x和y轴的可读 plt.xticks( np.arange(-2 * np.pi, 2 * np.pi + 1, np.pi / 2), labels=[r'$-2\pi$', r'$-\frac{3}{2}\pi$', r'$-\pi$', r'$-\frac{\pi}{2}$', '0', r'$\frac{\pi}{2}$', r'$\pi$', r'$\frac{3}{2}\pi$', r'$2\pi$'] ) plt.yticks(np.arange(-1, 1.1, 0.5)) plt.plot(x, y2, marker='.', color='#00ffff', linestyle='-', linewidth=2) plt.subplot(2, 1, 2) # 调用scatter函数绘制散点图 plt.scatter(x, y3, s=x ** 2, c=y3, cmap='Reds', label='正弦') plt.scatter(x, y4, s=(y4 * 15 + 20), c=y4, cmap='Greens', label='余弦') # 在图上添加注释 plt.annotate('正弦曲线', xy=(0.1, 0.2), xytext=(1, -0.8), arrowprops={ 'facecolor': 'blue', 'arrowstyle': '->', 'edgecolor': 'blue', 'connectionstyle': 'angle3,angleA=0,angleB=90' }) # 添加图例 plt.legend(loc='lower right') # 保存图像 plt.savefig('result.png') # 显示图像 plt.show()
# 饼图 plt.figure(figsize=(4, 4), dpi=120) data = np.random.randint(100, 500, 5) print(data) labels = ['苹果', '香蕉', '桃子', '荔枝', '石榴'] plt.pie( data, autopct='%.1f%%', radius=1, pctdistance=0.8, # explode=[0.1, 0, 0.2, 0, 0], # shadow=True, # 字体属性 # textprops=dict(fontsize=8, color='black'), textprops={'fontsize': 8, 'color': 'black'}, # 楔子属性 wedgeprops=dict(linewidth=1, width=0.35, edgecolor='white'), labels=labels ) plt.show()
# 柱状图 labels = np.array(['Q1', 'Q2', 'Q3', 'Q4']) group1 = np.random.randint(20, 50, 4) print(group1) group2 = np.random.randint(10, 60, 4) print(group2) group3 = np.random.randint(30, 40, 4) print(group3) plt.bar(labels, group1, 0.6, label='销售A组') # 通过bottom属性设置数据堆叠 plt.bar(labels, group2, 0.6, bottom=group1, label='销售B组') plt.bar(labels, group3, 0.6, bottom=group1 + group2, label='销售C组') plt.legend() plt.show()
width = 0.2 x = np.arange(labels.size) plt.bar(x - width, group1, width, label='销售A组') plt.bar(x, group2, width, label='销售B组') plt.bar(x + width, group3, width, label='销售C组') plt.xticks(x, labels=labels) plt.legend(loc='lower right') plt.show()
plt.figure(figsize=(6, 3)) days = np.arange(7) sleeping = [7, 8, 6, 6, 7, 8, 10] eating = [2, 3, 2, 1, 2, 3, 2] working = [7, 8, 7, 8, 6, 2, 3] playing = [8, 5, 9, 9, 9, 11, 9] plt.stackplot(days, sleeping, eating, working, playing) plt.legend(['睡觉', '吃饭', '工作', '玩耍'], fontsize=10) plt.show()
# 雷达图(极坐标折线图) labels = np.array(['专业技能', '工作经验', '团队意识', '沟通能力', '学习能力']) values = np.array([78, 85, 95, 72, 88]) angles = np.linspace(0, 2 * np.pi, labels.size, endpoint=False) # 加一条数据让图形闭合 values = np.concatenate((values, [values[0]])) angles = np.concatenate((angles, [angles[0]])) plt.figure(figsize=(4, 4), dpi=120) ax = plt.subplot(projection='polar') # 绘图和填充 plt.plot(angles, values, marker='o', linestyle='--', linewidth=2) plt.fill(angles, values, alpha=0.25) # 设置文字和网格线 ax.set_thetagrids(angles[:-1] * 180 / np.pi, labels, fontsize=10) ax.set_rgrids([20, 40, 60, 80], fontsize=10) plt.show()
# 玫瑰图(圆形柱状图) x = np.array([f'A-Q{i}' for i in range(1, 5)] + [f'B-Q{i}' for i in range(1, 5)]) y = np.array(group1.tolist() + group2.tolist()) print(y) theta = np.linspace(0, 2 * np.pi, x.size, endpoint=False) width = 2 * np.pi / x.size colors = np.random.rand(8, 3) # 将柱状图投影到极坐标 ax = plt.subplot(projection='polar') plt.bar(theta, y, width=width, color=colors, bottom=0) ax.set_thetagrids(theta * 180 / np.pi, x, fontsize=10py plt.show()
plt.figure(figsize=(8, 4), dpi=120) ax = plt.subplot(projection='3d') colors = ['r', 'g', 'b'] yticks = range(2020, 2017, -1) for idx, y in enumerate(yticks): x_data = [f'{x}季度' for x in '一二三四'] z_data = np.random.randint(100, 600, 4) ax.bar(x_data, z_data, zs=y, zdir='y', color=colors[idx], alpha=0.5) ax.set_xlabel('季度') ax.set_ylabel('年份') ax.set_zlabel('销量') ax.set_yticks(yticks) plt.show()
度’ for x in ‘一二三四’]
z_data = np.random.randint(100, 600, 4)
ax.bar(x_data, z_data, zs=y, zdir=‘y’, color=colors[idx], alpha=0.5)
ax.set_xlabel(‘季度’)
ax.set_ylabel(‘年份’)
ax.set_zlabel(‘销量’)
ax.set_yticks(yticks)
plt.show()
![在这里插入图片描述](https://www.www.zyiz.net/i/ll/?i=e55622dcfa4d48d98efe448b9130f88b.png?,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6Zuq55CD5rua5rua5rua,size_19,color_FFFFFF,t_70,g_se,x_16#pic_center)