1、 柱状图
柱状图(Bar Chart)是一种常用的数据可视化工具,用于展示分类数据的分布情况。
语法:
ax.bar(x, height, width=0.8, bottom=None, align='center', **kwargs)
参数:
-
x: 柱状图的 X 轴位置。
-
height: 柱状图的高度。
-
width: 柱状图的宽度,默认为 0.8。
-
bottom: 柱状图的底部位置,默认为 0。
-
align: 柱状图的对齐方式,可以是 'center'(居中对齐)或 'edge'(边缘对齐)。
-
**kwargs: 其他可选参数,用于定制柱状图的外观,如 color、edgecolor、linewidth 等。
案例1:
x = [1, 2, 3, 4, 5, 6]
y = [100, 50, 200, 350, 240, 190]
fig, axs = plt.subplots()
# bar():柱状图
# 参数:
# :x轴的数据,格式是列表# height:y轴的数据,格式是列表
# width:柱子的宽度,范围在0-1之间
# align:柱子的对齐方式,center、edge
axs.bar(x, y, width=0.6, align='edge')
plt.show()
案例2:堆叠柱状图
x = [1, 2, 3, 4, 5, 6]
y1 = [30, 40, 25, 60, 18, 45]
y2 = [10, 15, 9, 21, 23, 10]
fig, axs = plt.subplots()
# bottom:柱状图底部的位置,默认为0
axs.bar(x, y1, color='r')
axs.bar(x, y2, bottom=y1, color='y')
plt.show()
说明:
bottom=values1:绘制第二个数据集的柱状图,堆叠在第一个数据集上
案例3:分组柱状图
# 数据
categories = ['A', 'B', 'C', 'D']
values1 = [20, 35, 30, 25]
values2 = [15, 25, 20, 10]
# 创建图形和子图
fig, ax = plt.subplots()
# 计算柱状图的位置
x = np.arange(len(categories))
width = 0.35
# 绘制第一个数据集的柱状图
ax.bar(x - width/2, values1, width, color='skyblue', label='Values 1')
# 绘制第二个数据集的柱状图
ax.bar(x + width/2, values2, width, color='lightgreen', label='Values 2')
# 设置 X 轴标签
ax.set_xticks(x)
ax.set_xticklabels(categories)
# 设置标题和标签
ax.set_title('Grouped Bar Chart')
ax.set_xlabel('Categories')
ax.set_ylabel('Values')
# 添加图例
ax.legend()
# 显示图形
plt.show()
2、 直方图
直方图(Histogram)是一种常用的数据可视化工具,用于展示数值数据的分布情况。
语法:
ax.hist(x, bins=None, range=None, density=False, weights=None, cumulative=False, **kwargs)
参数:
-
x: 数据数组。
-
bins: 直方图的柱数,可以是整数或序列。
-
range: 直方图的范围,格式为 (min, max)。
-
density: 是否将直方图归一化,默认为 False。
-
weights: 每个数据点的权重。
-
cumulative: 是否绘制累积直方图,默认为 False。
-
**kwargs: 其他可选参数,用于定制直方图的外观,如 color、edgecolor、linewidth 等。
案例:
data = np.random.randn(1000)
fig, axs = plt.subplots()
axs.hist(data, bins=30)
plt.show()
3、 饼图
饼图(Pie Chart)是一种常用的数据可视化工具,用于展示分类数据的占比情况。
语法:
ax.pie(x, explode=None, labels=None, colors=None, autopct=None, shadow=False, startangle=0, **kwargs)
参数:
-
x: 数据数组,表示每个扇区的占比。
-
explode: 一个数组,表示每个扇区偏离圆心的距离,默认为 None。
-
labels: 每个扇区的标签,默认为 None。
-
colors: 每个扇区的颜色,默认为 None。
-
autopct: 控制显示每个扇区的占比,可以是格式化字符串或函数,默认为 None。
-
shadow: 是否显示阴影,默认为 False。
-
startangle: 饼图的起始角度,默认为 0。
-
**kwargs: 其他可选参数,用于定制饼图的外观。
案例:
def np_pie():
x = [20, 30, 25, 40]
label = ['a', 'b', 'c', 'd']
fig, axs = plt.subplots()
axs.pie(x, labels=label, startangle=90, autopct='%1.1f%%')
plt.show()
4、 折线图
使用 plot 函数
案例:
from matplotlib import pyplot as plt
# 创建数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
# 创建图形和子图
fig, ax = plt.subplots()
# 绘制多条折线图
ax.plot(x, y1, label='sin(x)', color='blue')
ax.plot(x, y2, label='cos(x)', color='red')
# 设置标题和标签
ax.set_title('Multiple Line Charts')
ax.set_xlabel('X-axis')
ax.set_ylabel('Y-axis')
# 添加图例
ax.legend()
# 显示图形
plt.show()
5、 散点图
散点图(Scatter Plot)是一种常用的数据可视化工具,用于展示两个变量之间的关系。
语法:
ax.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, edgecolors=None, **kwargs)
参数:
-
x: X 轴数据。
-
y: Y 轴数据。
-
s: 点的大小,可以是标量或数组。
-
c: 点的颜色,可以是标量、数组或颜色列表。
-
marker: 点的形状,默认为 'o'(圆圈)。
-
cmap: 颜色映射,用于将颜色映射到数据。
-
norm: 归一化对象,用于将数据映射到颜色映射。
-
vmin, vmax: 颜色映射的最小值和最大值。
-
alpha: 点的透明度,取值范围为 0 到 1。
-
linewidths: 点的边框宽度。
-
edgecolors: 点的边框颜色。
-
**kwargs: 其他可选参数,用于定制散点图的外观。
案例:
def np_scatter():
x = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
data = [
[120, 132, 101, 134, 90, 230, 210],
[220, 182, 191, 234, 290, 330, 310],
]
y0 = data[0]
y1 = data[1]
flg, axs = plt.subplots()
axs.scatter(x, y0, color='red')
axs.scatter(x, y1, color='b')
plt.show()
marker常用的参数值:
-
'o': 圆圈
-
's': 正方形
-
'D': 菱形
-
'^': 上三角形
-
'v': 下三角形
-
'>': 右三角形
-
'<': 左三角形
-
'p': 五边形
-
'*': 星形
-
'+': 加号
-
'x': 叉号
-
'.': 点
-
',': 像素
-
'1': 三叉戟下
-
'2': 三叉戟上
-
'3': 三叉戟左
-
'4': 三叉戟右
-
'h': 六边形1
-
'H': 六边形2
-
'd': 小菱形
-
'|': 竖线
-
'_': 横线
6、 图片读取
plt.imread 是 Matplotlib 库中的一个函数,用于读取图像文件并将其转换为 NumPy 数组。这个函数非常方便,可以轻松地将图像加载到 Python 中进行处理或显示。
参数
-
fname
: 图像文件的路径(字符串)。 -
format
: 图像格式(可选)。如果未指定,imread
会根据文件扩展名自动推断格式。
返回值
-
返回一个 NumPy 数组,表示图像的像素数据。数组的形状取决于图像的格式:
-
对于灰度图像,返回一个二维数组
(height, width)
。 -
对于彩色图像,返回一个三维数组
(height, width, channels)
,其中channels
通常是 3(RGB)或 4(RGBA)。
-
案例:
def np_imread():
filepath = os.path.dirname(__file__)
print(filepath)
filepath = os.path.join(filepath, 'leaf.png')
print(filepath)
filepath = os.path.relpath(filepath)
print(filepath)
data = plt.imread(filepath)
print(data.shape)
print(data)
# data = data+0.1
# print(data)
# 将数组显示为图片
plt.imshow(data)
plt.show()
data1 = np.transpose(data, (2, 0, 1))
for i in data1:
plt.imshow(i)
plt.show()
# 保存图片
plt.imsave('leaf1.png', i)