赞
踩
- import matplotlib.pyplot as plt
- import numpy as np
- x1 = np.linspace(1, 10, 5)
- y1 = np.sin(x1)
plt.plot(x1, y1, linewidth=3)
- plt.title("plot figure")
- plt.xlabel("value of x")
- plt.ylabel("value of y")
plt.show()
绘制图形如下:
plot()函数的原型为plt.plot(x, y, format_string, **kwargs),参数分别为:
x:x轴数据(列表或函数,可选)
y:y轴数据(列表或函数,必选)
format_string:控制线条的格式字符串(定义线条的基本属性,如颜色、点型和线型,可选)
**kwargs:一系列可选关键字参数(如label指定线条标签,linewidth指定线条宽度,color指定线条颜色等)
- plt.plot(x1, y1, color='red', marker='o', linestyle='dashed', linewidth=1, markersize=4, label="figure")
- plt.title("first graph", fontsize=20) # 图表标题
- plt.xlabel("value of X", fontsize=12) # x轴标签
- plt.ylabel("value of Y", fontsize=12) # y轴标签
- plt.tick_params(axis='both', labelsize=10) # 刻度样式
- plt.grid(ls=":", c="b") # 网格线
- plt.text(4, 0.1, "y=sin(x)", weight="bold", color="b") # 注释文本
- plt.legend(loc="lower left") # 图例
- plt.show()
绘制图形如下:
bar()函数的原型为matplotlib.pyplot.bar(x, height, width=0.8, bottom=0, align='center', data=None, **kwargs),参数分别为:
x:标量序列,标示在x轴上的定性数据类别,即每个柱状的x轴坐标
height:标量或标量序列,和x对应,确定每种定性数据类别的数量,即柱状的y轴高度
width:标量或数组形式序列,可选,决定单个柱状图的宽度,默认值为0.8
bottom:标量或数组等类似序列,设置y边界坐标轴起点,默认值为0
align:可选的两个值为{‘center’, ‘edge’},其默认值为center,使基准在x位置居中。
**kwargs:传递一系列的关键字参数,如color指定柱状图颜色(单一颜色为全部使用此颜色,而颜色列表会逐一染色),edgecolor指定柱状边缘的颜色;linewidth指定柱状的宽度,tick_label设置柱状图的刻度标签,默认为无标签,根据x的设置来显示,hatch设置条形的绘制风格,每种hatch字符代表填充的形状(/代表斜杆,*代表五角星,.代表点,o代表圆形......)
- x2 = [1, 2, 3, 4, 5, 6]
- y2 = [7, 5, 3, 9, 4, 6]
-
- mpl.rcParams["font.sans-serif"] = "SimHei" # 字体样式
- mpl.rcParams["axes.unicode_minus"] = False # 字符显示
- mpl.rcParams["font.size"] = 12 # 字体大小
- plt.bar(x2, y2, width=0.4, align="center", tick_label=["toy", "cup", "battery", "textbook", "computer", "phone"], color=['c', 'b', 'r'], hatch='/')
- plt.xlabel("箱子类型")
- plt.ylabel("箱子重量(kg)")
- plt.title("货运箱重量统计", color="b")
- plt.show()
绘制图形如下:
hist()函数的原型为plt.hist(x, bins=None, range=None, density=False, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None, log=False, color=None, label=None, stacked=False, normed=None, **kwargs),参数分别为:
x: 必需参数,用于绘制直方图的数据
bins: 可选参数,指定直方图的柱子数量或柱子的边界值。默认值为10
range: 可选参数,指定直方图的取值范围。默认值为数据的最小值和最大值
density: 可选参数,指定是否将直方图的高度归一化为概率密度。默认值为False
histtype: 可选参数,指定直方图的类型。可以是’bar’(默认值),‘barstacked’,‘step’,'stepfilled’等
color: 可选参数,指定直方图的颜色
label: 可选参数,指定直方图的标签,用于图例显示
align: 可选参数,指定柱子的对齐方式。可以是’left’,‘mid’(默认值),‘right’
orientation: 可选参数,指定直方图的方向。可以是’vertical’(默认值),‘horizontal’
rwidth: 可选参数,指定柱子的宽度,取值范围为[0, 1]。默认值为None,表示自适应宽度
**kwargs:传递其他关键字参数,用于进一步自定义直方图的样式和属性
- x3 = [np.random.randint(0, 100, 40), np.random.randint(0, 100, 40)]
- y3 = list(range(0, 101, 10))
-
- mpl.rcParams["font.sans-serif"] = "SimHei"
- mpl.rcParams["axes.unicode_minus"] = False
- mpl.rcParams["font.size"] = 12
-
- plt.hist(x3, bins=y3, color=['c', 'b'], histtype="bar", rwidth=1, alpha=0.6, edgecolor="black", label=['一班', '二班'])
- plt.xlabel("测试成绩")
- plt.ylabel("学生人数")
- plt.title("学生英语考试分数统计", color="r")
- plt.legend()
- plt.show()
绘制图形如下:
scatter()函数的原型为matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, *, edgecolors=None, plotnonfinite=False, data=None, **kwargs),参数分别为:
x,y:输入点列的数组,长度都是size
s:点的直径数组,默认直径20,长度最大size
c:点的颜色,默认蓝色 'b',也可以是个 RGB 或 RGBA 二维行数组
marker:点的样式,默认小圆圈 'o'。
cmap:默认None,标量或者是一个colormap的名字,只有c是一个浮点数数组时才使用。如果没有申明就是 image.cmap
norm:默认None,数据亮度在0-1之间,只有c是一个浮点数的数组的时才使用
vmin,vmax:亮度设置,在norm参数存在时会忽略
alpha:透明度设置,0-1之间,默认None,即不透明
linewidths:标记点的长度
edgecolors:颜色或颜色序列,默认为 'face',可选值有 'face', 'none', None
plotnonfinite:布尔值,设置是否使用非限定的c(inf, -inf 或 nan) 绘制点
**kwargs:其他参数。
以随机漫步过程为例:
- from random import choice # 补充
-
- class RandomWalk:
- def __init__(self, point_num=50000):
- self.point_num = point_num
- self.xval = [0]
- self.yval = [0]
-
- def fill_walk(self):
- while len(self.xval) < self.point_num:
- # 计算x和y的漫步方向和步数
- x_direction = choice([1, -1])
- step_num = choice([0, 1, 2, 3, 4])
- xstep = x_direction * step_num
- y_direction = choice([1, -1])
- step_num = choice([0, 1, 2, 3, 4])
- ystep = y_direction * step_num
- # 如果原地踏步,则跳过此次循环
- if xstep == 0 and ystep == 0:
- continue
- # 计算下个点的坐标
- x_next = self.xval[-1] + xstep
- y_next = self.yval[-1] + ystep
- # 将该点坐标加入xval和yval两个列表
- self.xval.append(x_next)
- self.yval.append(y_next)
-
-
- rw = RandomWalk()
- rw.fill_walk()
-
-
- fig, ax = plt.subplots()
- point_numbers = list(range(rw.point_num))
- # 按point_numbers列表指定的点序绘制渐变色散点
- ax.scatter(rw.xval, rw.yval, c=point_numbers, edgecolors='none', s=2)
- # 绘制起点和终点
- ax.scatter(0, 0, c='green', edgecolors='none', s=2)
- ax.scatter(rw.xval[-1], rw.yval[-1], c='red', edgecolors='none', s=2)
- # 隐藏坐标轴
- ax.axes.get_xaxis().set_visible(False)
- ax.axes.get_yaxis().set_visible(False)
- plt.show()
绘制图形如下:
- import matplotlib.pyplot as plt
- import matplotlib as mpl
- import numpy as np
- n = 128
- x4 = np.linspace(-4, 4, n)
- y4 = np.linspace(-4, 4, n)
- def f(x, y):
- z = (1 - y ** 6 + x ** 6) * np.exp(-x ** 2 - y ** 2)
- return z
-
-
- # 生成mesh网格状数据,用f()函数计算网格面上每点对应高度值,结合网格上每点二维坐标绘制等高线
- x5, y5 = np.meshgrid(x4, y4)
- z = f(x5, y5)
-
- # 填充等高线
- plt.contourf(x5, y5, z)
此时的绘制情况如下:
为显示热力图,需修改plt.contourf():
csf = plt.contourf(x5, y5, z, cmap=mpl.cm.hot)
修改后的绘制情况如下:
- # 绘制等高线
- cs = plt.contour(x4, y4, z, 10, colors='black')
- # 添加等高线文字标签
- plt.clabel(cs, inline=True, fontsize=12)
- # 添加图例
- plt.colorbar(csf)
plt.show()
绘制图形如下:
- # 设置投影方式
- map1 = Basemap(projection='cyl')
- # 背景上蓝色
- map1.drawmapboundary(fill_color='aqua')
- # 陆地上土黄色,江河湖泊上蓝色
- map1.fillcontinents(color='coral', lake_color='aqua')
- # 绘制图像
- map1.drawcoastlines()
- plt.show()
绘制图形如下:
- # 设置投影方式
- map2 = Basemap(projection="ortho", lat_0=30, lon_0=120)
- # 背景上蓝色
- map2.drawmapboundary(fill_color="aqua")
- # 陆地上土黄色,江河湖泊上蓝色
- map2.fillcontinents(color="coral", lake_color="aqua")
- # 绘制图像
- map2.drawcoastlines()
- plt.show()
绘制图形如下:
大致分为添加图例和标题,调整刻度格式、标签设置、内容和格式设置,添加网格线,绘制参考线,添加图表注释,向统计图形添加表格,颜色参数使用和颜色映射表使用,细节处可自行查询函数说明,示例代码如下:
- # 设置字体
- mpl.rcParams["font.sans-serif"] = "SimHei"
- mpl.rcParams["axes.unicode_minus"] = False
-
- # 数据准备
- x6 = np.linspace(0.2, 3.0, 100)
- y6 = np.sin(x6)
- y6_ = np.random.randn(100)
-
- # 绘图
- plt.scatter(x6, y6_, c="green", label="散点图", edgecolors="none")
- plt.plot(x6, y6, ls="--", c="red", lw=3, label="曲线图")
- # 设置刻度范围
- plt.xlim(0.0, 4.0)
- plt.ylim(-4.0, 4.0)
- # 设置坐标轴标签
- plt.xlabel("X轴")
- plt.ylabel("Y轴", rotation=360)
- # 设置网格
- plt.grid(True, ls=":", color="grey")
- # 设置参考线
- plt.axhline(y=0.0, c="r", ls="--", lw=2)
- # 设置注释
- plt.annotate("y=sin(x)", xy=(np.pi / 2, 1.0), xytext=(1.8, 2), color="r", fontsize=15, arrowprops=dict(arrowstyle="->", connectionstyle="arc3", color="r"))
- plt.annotate("y,x轴", xy=(0.75, -4), xytext=(0.35, -2.7), color="b", fontsize=15, arrowprops=dict(arrowstyle="->", connectionstyle="arc3", color="b"))
- plt.annotate("", xy=(0, -3.5), xytext=(0.3, -2.7), color="b", arrowprops=dict(arrowstyle="->", connectionstyle="arc3", color="b"))
- plt.annotate("", xy=(3.5, 0.0), xytext=(3.4, -1.0), color="b", arrowprops=dict(arrowstyle="->", connectionstyle="arc3", color="b"))
- plt.text(3.0, -1.3, "图表参考线", color="b", fontsize=15)
- # 设置标题
- plt.title("图标元素设置示例", color="m", fontsize=20)
- # 设置图例
- plt.legend(loc="upper right", fontsize=12)
- # 显示图形
- plt.show()
绘制图形如下:
- import matplotlib.pyplot as plt
- import matplotlib as mpl
- from random import randint
-
- mpl.rcParams["font.sans-serif"] = "Microsoft YaHei"
- mpl.rcParams["axes.unicode_minus"] = False
-
-
- # 骰子类
- class Die:
- def __init__(self, num=6):
- self.num = num
-
- def roll_die(self):
- return randint(1, self.num)
-
-
- die1 = Die()
- die2 = Die()
- results = []
- count_nums = []
- x7 = list(range(1, 13))
-
- # 掷2000次,结果存入result列表
- for roll_num in range(2000):
- result = die1.roll_die() + die2.roll_die()
- results.append(result)
- # 统计每一面被掷到的次数
- for value in range(1, die1.num + die2.num + 1):
- count_num = results.count(value)
- count_nums.append(count_num)
-
- # 绘制图表
- plt.bar(x7, count_nums, width=0.7, edgecolor="black", alpha=0.6, label="频数")
- plt.xlabel("骰子点数和")
- plt.ylabel("各点数之和出现的频数")
- plt.title("两个骰子掷2000次", color="r")
- plt.xticks(range(1, 13))
- plt.grid(axis='y', ls=":", color="grey", alpha=0.5)
- plt.legend()
- plt.show()
绘制图形如下:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。