1.1绘制直线,折线图(单坐标)
import random
from matplotlib import pyplot as plt
"""如果列表a表示10点到12点的每一分钟的气温,如何绘制折线图观察每分钟的气温变化"""
fig = plt.figure(figsize=(20, 8), dpi=80) # 宽20高8
x = [i for i in range(0, 120)]
y = [random.randint(20, 35) for i in range(120)]
# 在10点时
x_label = [f"10h{i}m" for i in range(1, 60)]
# 在11点时
x_label += [f"11h{i}m" for i in range(1, 60)]
import matplotlib
font = {'family': 'MicroSoft YaHei',
'weight': 'bold',
'size': 12}
matplotlib.rc("font", **font)
# 设置描述信息
plt.xlabel("时间")
plt.ylabel("温度 单位(摄氏度)")
plt.title("10点到12点每分钟内的气温变换情况",fontsize=20)
plt.yticks([i for i in range(20, 36)], [f"{i}度" for i in range(20, 36)]) # 后面的参数设置坐标轴显示的样式
plt.xticks(x[::6], x_label[::6], rotation=0) # 要保证前后的一一对应,rotation旋转度数
plt.plot(x, y, label="自己", color="red")
# 绘制网格
plt.grid(alpha=0.4) # alpha设置透明度
# 添加图例
plt.legend(loc=0) # loc设置位置
plt.savefig("./sig_size.png") # 保存图片,可以保存为svg格式的矢量图
plt.show()
绘制直线所用函数
-
1.创建画布 -- plt.figure()
-
plt.figure(figsize=(), dpi=) figsize:指定图的长宽 dpi:图像的清晰度 返回fig对象
-
2.绘制图像 -- plt.plot(x, y)
-
3.显示图像 -- plt.show()
-
4.plt.xticks(x, **kwargs) x:要显示的刻度值
-
5.plt.yticks(y, **kwargs) y:要显示的刻度值
-
在绘图时传入 label 参数,并最后调用颜色字符 [color=‘r’] 风格字符 [linestyle='-'] r 红色 - 实线 g 绿色 - - 虚线 b 蓝色 -. 点划线 w 白色 : 点虚线 c 青色 ' ' 留空、空格 m 洋红 y 黄色 k 黑色 plt.legend()
显示图例说明,对于 legend 还是传入参数,控制图例说明显示的位置 -
Location String Location Code 'best' 0 'upper right' 1 'upper left' 2 'lower left' 3 'lower right' 4 'right' 5 'center left' 6 'center right' 7 'lower center' 8 'upper center' 9 'center' 10 -
# 绘制网格 plt.grid(alpha=0.4) # alpha设置透明度
1.2绘制直线,折线图(多坐标)面向对象
matplotlib.pyplot.subplots(nrows=1, ncols=1, **fig_kw) 创建一个带有多个axes(坐标系/绘图区)
nrows ,ncols 设置有几行几列坐标系
返回值:
fig : 图对象
axes : 返回相应数量的坐标系
设置标题和坐标轴刻度方法与上述不同:
set_xticks
set_yticks
set_xlabel
set_ylabel
数据自拟
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(20, 8), dpi=100)
axes[0].plot(x, y1, label="0")
axes[1].plot(x, y2, color="r", linestyle="--", label="1")
# 添加x,y轴刻度
x_ticks_label = ["11点{}分".format(i) for i in x]
y_ticks = range(40)
# 刻度显示
axes[0].set_xticks(x[::5])
axes[0].set_yticks(y_ticks[::5])
axes[0].set_xticklabels(x_ticks_label[::5])
axes[1].set_xticks(x[::5])
axes[1].set_yticks(y_ticks[::5])
axes[1].set_xticklabels(x_ticks_label[::5])#字符串
# 2.2 添加网格显示
# plt.grid(alpha=0.5)
axes[0].grid(alpha=0.5)
axes[1].grid(alpha=0.5)
# 2.3 添加描述信息
#axes[0].set(ylabel='温度', xlabel='时间', title='中午11点--12点某城市温度变化图')
axes[0].set_xlabel("时间")
axes[0].set_ylabel("温度")
axes[0].set_title("中午11点--12点某城市温度变化图", fontsize=20)
axes[1].set_xlabel("时间")
axes[1].set_ylabel("温度")
axes[1].set_title("中午11点--12点某城市温度变化图", fontsize=20)
# # 2.4 图像保存
plt.savefig("./test.png")
# # 2.5 添加图例
# plt.legend(loc=0)
axes[0].legend(loc=0)
axes[1].legend(loc=0)
# 3.图像显示
plt.show()
2. 散点图:
- plt.scatter(x, y)
import numpy as np
import random
from matplotlib import pyplot as plt
x = np.arange(10)
y = np.random.randn(10)
plt.scatter(x, y, color='r')
plt.show()
3. 柱状图
plt.bar(x, width, align='center', **kwargs)
x : 需要传递的数据
width : 柱状图的宽度
align : 每个柱状图的位置对齐方式
{‘center’, ‘edge’}, optional, default: ‘center’
**kwargs :
color:选择柱状图的颜色
np.random.seed(1)
x = np.arange(5)
y = np.random.randn(5)
fig, axes = plt.subplots(ncols=2)
vert_bars = axes[0].bar(x, y, color='r', align='center')
horiz_bars = axes[1].barh(x, y, color='b', align='center')
#在水平或者垂直方向上画线
axes[0].axhline(0, color='gray', linewidth=2)
axes[1].axvline(0, color='gray', linewidth=2)
plt.show()
参考链接: