matplotlib使用示例——直线坐标系、极坐标系、柱形图、直方图、散点图、气泡图、饼图、多边形、3D图、盒图

一、直线坐标系
# encoding=utf-8
"""
@Time : 2020/1/9 17:15 
@Author : LiuYanZhe
@File : demo1.py 
@Software: PyCharm
@Description: 直线坐标系
"""
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator

# 数据
x = np.arange(-10, 10, 0.1)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.power(x, 2)
y4 = np.power(x, 3)

# 创建画布
fig, ax_arr = plt.subplots(2, 1)  # 同时创建一个窗口和2个子图
# 创建子图
ax1 = ax_arr[0]
ax2 = ax_arr[1]
axes = plt.axes([0.2, 0.3, 0.1, 0.1], facecolor='y')  # 添加子图,不挤压原图空间,覆盖在原图之上
# 画布设置
# fig=plt.gcf()   # 获取当前figure
# fig.set_size_inches(5, 6)   # 设置画布大小
fig.subplots_adjust(hspace=0.3, top=0.95)  # 子图之间保留的宽度,与顶部保持的宽度
# 子图设置
ax1.set_title('sin/cos')  # 设置标题
ax2.set_title('x^2/x^3')
ax1.set_xlim(-5, 5)  # 设置横纵坐标范围
ax1.set_ylim(-1, 1)
ax2.set_xlim(-3, 3)
ax2.set_ylim(0, 9)
xmajorLocator = MultipleLocator(2)  # 设置坐标显示格式,刻度差为2的倍数
ax2.xaxis.set_major_locator(xmajorLocator)
ax1.grid(b=True, which='major', axis='both', alpha=0.5,
         color='skyblue', linestyle='--', linewidth=1)  # 绘制网格 参数:which=major(绘制大刻度)/minor(小刻度)/both,axis=x/y/both
ax2.xaxis.grid(True, which='major')  # 设置网格-xy单独设置
ax2.yaxis.grid(True, which='major')
ax1.set_xticks([])  # 手动设置坐标轴刻度(无刻度)
ax1.set_xticks([-5, -2.5, 0, 2.5, 5])  # 手动设置坐标轴刻度(无刻度)
# ax2.set_xticklabels(labels=['', 'x1', 'x2', 'x3', 'x4'], rotation=-30, fontsize='small')  # 设置坐标轴显示文本,倾斜角度,字体
# ax1.legend(loc='legned_lyz')    # 显示图例
ax1.text(-0.6, 0.1, 'y=sin(x)')  # 指定位置显示文本
ax1.text(-2, 0.6, 'y=cos(x)')
ax2.annotate('import point (2,4)', xy=(2, 4), xytext=(-1, 7),
             arrowprops=dict(facecolor='red', alpha=0.5, shrink=0.05))  # 添加标注(箭头)(指向位置,文字位置,颜色,透明度,收缩比例)

# 在子图中绘制图像
ax1.plot(x, y1)
ax1.plot(x, y2, linestyle='--', color='r', label='line')  # 绘制点图并设置格式
ax2.plot(x, y3, marker='.', alpha=0.5, color='g', label='point')
axes.plot(x, y4)
# 保存图像
plt.savefig('G:/demo.png', dpi=400, bbox_inches='tight')
# 显示画布
plt.show()

在这里插入图片描述

二、极坐标系
# encoding=utf-8
"""
@Time : 2020/1/10 16:42 
@Author : LiuYanZhe
@File : demo2.py
@Software: PyCharm
@Description: 极坐标系
"""
import numpy as np
import matplotlib.pyplot as plt

# 数据
x1 = np.arange(-2 * np.pi, 2 * np.pi, 0.1)
x2 = np.arange(0, 2 * np.pi, 0.02)
print('x2:', x2)

# 创建画布
fig = plt.figure(figsize=(8, 7))    # 创建一个画板,设定大小,后期添加子图
fig.subplots_adjust(top=0.95, bottom=0.05)  # 设置画板
# 添加子图
ax1 = fig.add_subplot(2, 2, 1)  # 添加一个子图,将画板分成1行5列,该子图为第1个,直角坐标系
ax2 = fig.add_subplot(2, 2, 2, polar=True)  # 添加一个子图,横1纵3,第2个,极坐标系
ax3 = fig.add_subplot(2, 2, 3, polar=True)  # 添加一个子图,横1纵3,第3个,极坐标系
ax4 = fig.add_subplot(2, 2, 4, polar=True)  # 添加一个子图,横1纵3,第3个,极坐标系
# 绘制
ax1.plot(x1, np.sin(x1))
ax1.plot(x1, np.cos(x1))
ax2.plot(x2, np.ones_like(x2))  # np.ones_like()函数返回1,类型和输入值类型相同
ax2.plot(x2, x2 / 6, linestyle='--', lw=1.5)  # lw为线宽
ax3.plot(x2, np.sin(x2), color='b', alpha=0.7, linestyle='-.')
ax3.plot(x2, np.cos(x2), color='g', linestyle=':')
ax4.plot(x2, np.cos(4 * x2))
ax4.plot(x2, np.cos(5 * x2), linestyle='--')
# 设置子图
ax4.set_rgrids(np.arange(0.1, 2, 0.4), angle=45)  # 设置网格
# ax4.set_yticks(np.arange(0.1, 2, 0.4))  # 与上面效果相同
# 保存图像
plt.savefig('G:/demo2.png', dpi=400, bbox_inches='tight')
# 显示画布
plt.show()

在这里插入图片描述

三、柱形图,直方图,散点图,气泡图
# encoding=utf-8
"""
@Time : 2020/1/10 17:57 
@Author : LiuYanZhe
@File : demo3.py 
@Software: PyCharm
@Description: 柱形图,直方图,散点图,气泡图
"""
import numpy as np
import matplotlib.pyplot as plt

# 绘制柱状图
ax1 = plt.subplot(1, 1, 1)  # 创建一个画板,同时创建一个子图
x_index = np.arange(5)  # 用来做柱的索引
x_data = ('A', 'B', 'C', 'D', 'E')  # 元组,与列表类似,但不可更改
y1_data = (20, 35, 30, 35, 27)
y2_data = (25, 32, 34, 20, 25)
bar_width = 0.35  # 每个柱的宽度
ax1.bar(x_index, y1_data, width=bar_width, alpha=0.6, label='bar2')
ax1.bar(x_index + bar_width, y2_data, width=bar_width, alpha=0.6, label='bar2')
plt.legend()  # 显示图例
plt.xticks(x_index + bar_width / 2, x_data)  # 调整x轴刻度标签
plt.savefig('G:/demo3.png', dpi=400, bbox_inches='tight')
# 绘制直方图
fig, (ax2, ax3) = plt.subplots(nrows=2)  # 创建一个窗口,同时创建两个子图
sigma = 1  # 标准差
avg = 0  # 均值
x = avg + sigma * np.random.randn(10000)  # 正态分布随机数
ax2.hist(x, bins=40, density=False, histtype='bar', )  # bins柱子个数,'auto'自动设定,默认为10;normed是否归一化;histtype直方图
ax3.hist(x, bins='auto', density=True, histtype='bar', facecolor='yellowgreen', alpha=0.8, cumulative=True,
         rwidth=0.8)  # cumulative是否计算累加分布,rwidth柱子宽度
plt.savefig('G:/demo4.png', dpi=400, bbox_inches='tight')
# 绘制气泡图-散点图
fig2 = plt.figure()  # 新建画板
ax4 = fig2.add_subplot(1, 2, 1)  # 新建子图
ax5 = fig2.add_subplot(1, 2, 2)  # 新建子图
x4 = np.random.random(100)  # 产生随机数据
y4 = np.random.random(100)
# 气泡图
ax4.scatter(x4, y4, s=x * 1000, c='g', marker='o', alpha=0.6, lw=1)  # s:图像大小,c:颜色,marker:图片,lw:图片宽度
# 散点图
ax5.scatter(x4, y4, c='g', marker='o', alpha=0.6, lw=1)  # s:图像大小,c:颜色,marker:图片,lw:图片宽度
plt.savefig('G:/demo5.png', dpi=400, bbox_inches='tight')
# 显示画板
plt.show()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、饼图,多边形
# encoding=utf-8
"""
@Time : 2020/1/10 19:25 
@Author : LiuYanZhe
@File : demo4.py 
@Software: PyCharm
@Description: 饼图,多边形
"""
import numpy as np
import matplotlib.pyplot as plt

'''饼图'''
# 数据
n = 10
Z = np.random.rand(n)
lable = ['data1', 'data2', 'data3', 'data4', 'data5', 'data6', 'data7', 'data8', 'data9', 'data10']

# 创建画板
fig = plt.figure(figsize=(7.5, 4))
fig.subplots_adjust(top=0.95, bottom=0.05, left=0.05, right=0.95)
# 第一个子图
ax1 = fig.add_subplot(1, 2, 1)
ax1.pie(Z)  # 饼图
plt.axis('equal')
# 第二个子图
ax2 = fig.add_subplot(1, 2, 2)
ax2.pie(Z, explode=np.ones(n) * 0.01, labels=lable, colors=['%f' % (i / float(n)) for i in range(n)],
        wedgeprops={'linewidth': 1, 'edgecolor': 'white'})

plt.axis('equal')
plt.xticks([])
plt.yticks([])
# 存储图像
plt.savefig('G:/demo4.1.png', dpi=200, bbox_inches='tight')

'''多边形'''
# 新建画板
fig2 = plt.figure()
# 添加子图
ax3 = fig2.add_subplot(1, 1, 1)
# 画多边形
rect = plt.Rectangle((0.1, 0.6), 0.2, 0.3, color='r')  # 矩形 参数:(左下点坐标),长,高
circ1 = plt.Circle((0.7, 0.2), 0.15, color='b', alpha=0.6)  # 椭圆  参数:(椭圆心坐标),半径
circ2 = plt.Circle((0.3, 0.4), 0.1, color='g', alpha=0.6)  # 圆
pgon = plt.Polygon([[0.9, 0.9], [0.7, 0.6], [0.6, 0.8], [0.4, 0.7], [0.5, 0.9]], color='y', alpha=0.7)  # 多边形,参数:每个顶点的坐标
ax3.add_patch(rect)
ax3.add_patch(circ1)
ax3.add_patch(circ2)
ax3.add_patch(pgon)
fig2.canvas.draw()
# 存储图像
plt.savefig('G:/demo4.2.png', dpi=200, bbox_inches='tight')
# 显示画板
plt.show()
'''
pie()参数:
x       :(每一块)的比例,如果sum(x) > 1会使用sum(x)归一化;
labels  :(每一块)饼图外侧显示的说明文字;
explode :(每一块)离开中心距离;
startangle :起始绘制角度,默认图是从x轴正方向逆时针画起,如设定=90则从y轴正方向画起;
shadow  :在饼图下面画一个阴影。默认值:False,即不画阴影;
labeldistance :label标记的绘制位置,相对于半径的比例,默认值为1.1, 如<1则绘制在饼图内侧;
autopct :控制饼图内百分比设置,可以使用format字符串或者format function
        '%1.1f'指小数点前后位数(没有用空格补齐);
pctdistance :类似于labeldistance,指定autopct的位置刻度,默认值为0.6;
radius  :控制饼图半径,默认值为1;
counterclock :指定指针方向;布尔值,可选参数,默认为:True,即逆时针。将值改为False即可改为顺时针。
wedgeprops :字典类型,可选参数,默认值:None。参数字典传递给wedge对象用来画一个饼图。例如:wedgeprops={'linewidth':3}设置wedge线宽为3。
textprops :设置标签(labels)和比例文字的格式;字典类型,可选参数,默认值为:None。传递给text对象的字典参数。
center :浮点类型的列表,可选参数,默认值:(0,0)。图标中心位置。
frame :布尔类型,可选参数,默认值:False。如果是true,绘制带有表的轴框架。
rotatelabels :布尔类型,可选参数,默认为:False。如果为True,旋转每个label到指定的角度。

其中:
colors=['%f' % (i / float(n)) for i in range(n)]
等同于
colors=['0.000000', '0.100000', '0.200000', '0.300000', '0.400000', '0.500000', '0.600000', '0.700000', '0.800000', '0.900000']
'''

在这里插入图片描述
在这里插入图片描述

五、3D图
# encoding=utf-8
"""
@Time : 2020/1/11 15:18 
@Author : LiuYanZhe
@File : demo5.py 
@Software: PyCharm
@Description: 3D图
"""
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# 数据
X = np.arange(-4, 4, 0.25)
Y = np.arange(-4, 4, 0.25)
# 生成网格数据
X, Y = np.meshgrid(X, Y)
# 计算每个点对的长度
R = np.sqrt(X ** 2 + Y ** 2)
Z = np.sin(R)
'''sin()'''
# 创建画板
fig = plt.figure()
# 创建子图
ax = Axes3D(fig)
# 画3d图
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=plt.cm.hot)  # rstride:行之间的跨度;cstride:列之间的跨度;camp:颜色映射表
# 设置Z轴维度(区间范围)
ax.set_zlim(-2, 2)
# 保存图像
plt.savefig('G:/demo5.1.png', dpi=400, bbox_inches='tight')
'''cos()'''
# 创建画板
fig2 = plt.figure()
# 创建3d子图
ax2 = Axes3D(fig2)
# 画图
ax2.plot_surface(X, Y, np.cos(R), rstride=1, cstride=1, cmap=plt.cm.coolwarm)  # 画3d图
ax2.contourf(X, Y, Z, zdir='z', offset=-2)  # 曲面到底部的投影,zdir:投影到哪个面(x/y/z);offset:表示投影到z=-2
# 设置Z轴维度(区间范围)
ax2.set_zlim(-2, 2)
# 保存图像
plt.savefig('G:/demo5.2.png', dpi=400, bbox_inches='tight')
# 显示图像
plt.show()

在这里插入图片描述
在这里插入图片描述

六、盒图
# encoding=utf-8
"""
@Time : 2020/3/26 11:06 
@Author : LiuYanZhe
@File : Task3.26.py 
@Software: PyCharm
@Description: 盒图
"""
import numpy as np
import matplotlib.pyplot as plt

data = np.array(
    [13, 15, 16, 16, 19, 20, 20, 21, 22, 22, 25, 25, 25, 25, 30, 33, 33, 35, 35, 35, 35, 36, 40, 45, 46, 52, 70])
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
ax.boxplot(data)
plt.show()

在这里插入图片描述

七、其他问题
  1. 解决中文显示问题(目前只知道黑体可行)
plt.rcParams['font.sans-serif'] = ['SimHei']
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值