Matplotlib是一个广泛使用的Python库,用于创建静态、动画和交互式数据可视化。它建立在NumPy之上,能够轻松处理大型数据集,以创建各种类型的图表,如折线图、柱状图、散点图等。这些可视化通过图表清晰地展示数据,帮助我们更好地理解数据。在本文中,我们将了解如何在Matplotlib中创建不同类型的图表并对其进行自定义。
安装用于数据可视化的Matplotlib
要安装 Matplotlib,我们使用 pip 命令。
pip install matplotlib
如果我们在 Jupyter Notebook 中工作,可以通过运行以下命令在笔记本单元格内直接安装 Matplotlib:
!pip install matplotlib
使用Matplotlib的Pyplot进行数据可视化
Matplotlib提供了一个名为pyplot的模块,该模块提供了类似于MATLAB,用于创建绘图和图表。它通过提供一系列处理常见绘图任务的函数,简化了生成各种类型可视化的过程。
1. 折线图
折线图是基本图表类型之一,可以使用plot()函数创建。它用于在不同坐标轴上表示两个数据X和Y之间的关系。
matplotlib.pyplot.plot(x, y, color=None, linestyle='-', marker=None, linewidth=None, markersize=None)
import matplotlib.pyplot as plt
x = [10, 20, 30, 40]
y = [20, 25, 35, 55]
plt.plot(x, y)
plt.title("Line Chart")
plt.ylabel('Y-Axis')
plt.xlabel('X-Axis')
plt.show()
编辑
2. 条形图
条形图是一种图表,它用矩形条来表示数据类别,矩形条的长度和高度与它们所代表的值成比例。条形图可以水平绘制,也可以垂直绘制。它描述了不同类别之间的比较,可以使用bar()方法创建。
matplotlib.pyplot.bar(x, height, width=0.8, bottom=None, color=None, edgecolor=None, linewidth=None)
import matplotlib.pyplot as plt
import pandas as pd
data = pd.read_csv('/content/tip.csv')
x = data['day']
y = data['total_bill']
plt.bar(x, y)
plt.title("Bar chart")
plt.ylabel('Total Bill')
plt.xlabel('Day')
plt.show()
编辑
3. 直方图
直方图用于以分组的形式展示数据。它是一种柱状图,其中X轴表示区间范围,而Y轴表示频率信息。hist()函数用于查找并创建x的直方图。
matplotlib.pyplot.hist(x, bins=None, range=None, density=False, color=None, edgecolor=None, alpha=None)
import matplotlib.pyplot as plt
import pandas as pd
data = pd.read_csv('/content/tip.csv')
x = data['total_bill']
plt.hist(x)
plt.title("Histogram")
plt.ylabel('Frequency')
plt.xlabel('Total Bill')
plt.show()
编辑
4. 散点图
散点图用于观察变量之间的关系。matplotlib库中的scatter()方法用于绘制散点图。
matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, linewidths=None, edgecolors=None, alpha=None)
import matplotlib.pyplot as plt
import pandas as pd
data = pd.read_csv('/content/tip.csv')
x = data['day']
y = data['total_bill']
plt.scatter(x, y)
plt.title("Scatter Plot")
plt.ylabel('Total Bill')
plt.xlabel('Day')
plt.show()
编辑
5. 饼图
饼图是一种圆形图表,仅用于展示一组数据。饼图扇形区域的面积代表数据各部分的百分比。饼图的扇形被称为楔形。它可以使用pie()方法创建。
matplotlib.pyplot.pie(data, explode=None, labels=None, colors=None, autopct=None, shadow=False)
import matplotlib.pyplot as plt
import pandas as pd
data = pd.read_csv('/content/tip.csv')
cars = ['AUDI', 'BMW', 'FORD',
'TESLA', 'JAGUAR',]
data = [23, 10, 35, 15, 12]
plt.pie(data, labels=cars)
plt.title(" Pie Chart")
plt.show()
编辑
6. 箱线图
箱线图也称为须状图,它是一种基于五个数值汇总(最小值、第一四分位数(Q1)、中位数(Q2)、第三四分位数(Q3)和最大值)来展示数据分布的标准方式。它还可以显示异常值。
matplotlib.pyplot.boxplot(x, notch=False, vert=True, patch_artist=False, showmeans=False, showcaps=True, showbox=True)
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(10)
data = [np.random.normal(0, std, 100) for std in range(1, 4)]
plt.boxplot(data, vert=True, patch_artist=True,
boxprops=dict(facecolor='skyblue'),
medianprops=dict(color='red'))
plt.xlabel('Data Set')
plt.ylabel('Values')
plt.title('Box Plot')
plt.show()
编辑
该盒子表示四分位距(IQR),盒子内部的线条表示中位数,延伸至从第一四分位数和第三四分位数起1.5倍四分位距范围内的最小值和最大值。任何超出此范围的点都被视为异常值,并以单个点的形式绘制。
7. 热力图
热力图以矩阵形式呈现数据,其中每个单独的值都用颜色表示。它们有助于在二维平面上可视化多个特征的量级,并识别模式、相关性和聚集情况。
matplotlib.pyplot.imshow(X, cmap=None, interpolation=None, aspect=None)
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(0)
data = np.random.rand(10, 10)
plt.imshow(data, cmap='viridis', interpolation='nearest')
plt.colorbar()
plt.xlabel('X-axis Label')
plt.ylabel('Y-axis Label')
plt.title('Heatmap')
plt.show()
编辑
侧边的颜色条提供了一个用于解读颜色的刻度,颜色越深表示数值越低,颜色越浅表示数值越高。这种图表用于数据分析、生物信息学和金融等领域,以可视化矩阵中数据的相关性和分布情况。
如何自定义Matplotlib可视化效果?
Matplotlib 提供了多种方式来定制和美化我们的图表。我们可以更改颜色、添加标签、调整样式等等。通过将这些定制技巧应用于基本图表,我们可以使我们的可视化效果更清晰、信息更丰富。
1. 定制折线图
我们可以使用以下属性自定义折线图:
- 颜色:更改线条颜色
- 线宽:调整线条宽度
- 标记:更改绘制点的样式
- 标记大小:更改标记的大小
- 线条样式:定义线条样式,如实线、虚线等
import matplotlib.pyplot as plt
x = [10, 20, 30, 40]
y = [20, 25, 35, 55]
plt.plot(x, y, color='green', linewidth=3, marker='o',
markersize=15, linestyle='--')
plt.title("Customizing Line Chart")
plt.ylabel('Y-Axis')
plt.xlabel('X-Axis')
plt.show()
编辑
2. 定制柱状图
通过以下定制方式,可以使柱状图更具信息性和视觉吸引力:
- 颜色:柱子的填充颜色
- 边缘颜色:柱子边缘的颜色
- 线宽:边缘的粗细
- 宽度:每个柱子的宽度
import matplotlib.pyplot as plt
import pandas as pd
data = pd.read_csv('/content/tip.csv')
x = data['day']
y = data['total_bill']
plt.bar(x, y, color='green', edgecolor='blue',
linewidth=2)
plt.title("Customizing Bar Chart")
plt.ylabel('Total Bill')
plt.xlabel('Day')
plt.show()
编辑
条形图之间的线条对应于每个X轴类别在Y轴上的值。
3. 自定义直方图绘制
为了使直方图绘制更有效,我们可以进行各种自定义设置:
- 箱数(Bins):将数据划分成的组(箱)数
- 颜色(Color):条形图填充颜色
- 边缘颜色(Edgecolor):条形图边缘颜色
- 线条样式(Linestyle):边缘的样式,如实线、虚线等
- 透明度(Alpha):透明度级别(0 = 透明,1 = 不透明)
import matplotlib.pyplot as plt
import pandas as pd
data = pd.read_csv('/content/tip.csv')
x = data['total_bill']
plt.hist(x, bins=25, color='green', edgecolor='blue',
linestyle='--', alpha=0.5)
plt.title(" Customizing Histogram Plot")
plt.ylabel('Frequency')
plt.xlabel('Total Bill')
plt.show()
编辑
4. 定制散点图
散点图可以通过以下方式进行增强:
- S:标记大小(单个值或数组)
- C:标记的颜色或颜色序列
- Marker:标记样式,如圆形、菱形等
- Linewidths:标记边框的宽度
- Edgecolor:标记边框的颜色
- Alpha:混合值,介于0(透明)和1(不透明)之间
import matplotlib.pyplot as plt
import pandas as pd
data = pd.read_csv('/content/tip.csv')
x = data['day']
y = data['total_bill']
plt.scatter(x, y, c=data['size'], s=data['total_bill'],
marker='D', alpha=0.5)
plt.title("Customizing Scatter Plott")
plt.ylabel('Total Bill')
plt.xlabel('Day')
plt.show()
编辑
5. 定制饼图
为了使我们的饼图更有效且具有视觉吸引力,我们考虑进行以下定制:
- 分离:移动图表中的扇形块
- 自动百分比标注:用数值标记扇形块
- 颜色:扇形块的颜色
- 阴影:用于创建阴影效果
import matplotlib.pyplot as plt
import pandas as pd
data = pd.read_csv('/content/tip.csv')
cars = ['AUDI', 'BMW', 'FORD',
'TESLA', 'JAGUAR',]
data = [23, 13, 35, 15, 12]
explode = [0.1, 0.5, 0, 0, 0]
colors = ( "orange", "cyan", "yellow",
"grey", "green",)
plt.pie(data, labels=cars, explode=explode, autopct='%1.2f%%',
colors=colors, shadow=True)
plt.show()
编辑
Matplotlib的核心组件:Figure)和Axes
在继续之前,让我们先了解一下与Matplotlib一起使用时非常重要的两个类。
1. 图形(Figure)类
图形类就像是整个画布或窗口,所有绘图都在其中绘制。可以将其视为一个整体页面或框架,其中可以包含一个或多个绘图。我们可以使用 figure() 函数创建一个图形。它控制整个绘图区域的大小、背景颜色和其他属性。
matplotlib.figure.Figure(figsize=None, dpi=None, facecolor=None, edgecolor=None, linewidth=0.0, ...)
import matplotlib.pyplot as plt
from matplotlib.figure import Figure
x = [10, 20, 30, 40]
y = [20, 25, 35, 55]
fig = plt.figure(figsize =(7, 5), facecolor='g',
edgecolor='b', linewidth=7)
ax = fig.add_axes([1, 1, 1, 1])
ax.plot(x, y)
plt.title("Linear graph", fontsize=25, color="yellow")
plt.ylabel('Y-Axis')
plt.xlabel('X-Axis')
plt.ylim(0, 80)
plt.xticks(x, labels=["one", "two", "three", "four"])
plt.legend(["GFG"])
plt.show()
编辑
2. 坐标轴类
坐标轴类代表实际的绘图区域,数据将在此区域绘制。在图形中创建绘图或子图时,它是最基本且最灵活的。单个图形可以包含多个坐标轴,但每个坐标轴对象仅属于一个图形。我们可以使用axes()函数创建一个坐标轴对象。
axes([left, bottom, width, height])
与pyplot类似,Axes类提供了用于自定义绘图的方法,其中包括:
- ax.set_title():为绘图添加标题 ax.set_xlabel()、
- ax.set_ylabel():为X轴和Y轴添加标签
- ax.set_xlim()、ax.set_ylim():设置坐标轴的范围
- ax.set_xticklabels()、ax.set_yticklabels():自定义刻度标签
- ax.legend():添加一个图例来描述绘图元素
import matplotlib.pyplot as plt
from matplotlib.figure import Figure
x = [10, 20, 30, 40]
y = [20, 25, 35, 55]
fig = plt.figure(figsize = (5, 4))
ax = fig.add_axes([1, 1, 1, 1])
ax1 = ax.plot(x, y)
ax2 = ax.plot(y, x)
ax.set_title("Linear Graph")
ax.set_xlabel("X-Axis")
ax.set_ylabel("Y-Axis")
ax.legend(labels = ('line 1', 'line 2'))
plt.show()
编辑
子图可视化的高级技巧
我们已经学习了如何向图表添加基本元素以展示更多信息。一种方法是像上面示例中那样,反复调用 plot 函数,并传入不同的数值集。现在,让我们看看如何使用一些Matplotlib函数在一个图形中绘制多个图表,以及如何创建子图。
使用 add_axes()、add_axes() 方法
我们在Matplotlib中手动向图形添加坐标轴。它接受一个包含四个值 [left, bottom, width, height]的列表,用于指定坐标轴的位置和大小。
import matplotlib.pyplot as plt
from matplotlib.figure import Figure
x = [10, 20, 30, 40]
y = [20, 25, 35, 55]
fig = plt.figure(figsize =(5, 4))
ax1 = fig.add_axes([0.1, 0.1, 0.8, 0.8])
ax2 = fig.add_axes([1, 0.1, 0.8, 0.8])
ax1.plot(x, y)
ax2.plot(y, x)
plt.show()
编辑
使用 subplot() 方法
将一个绘图添加到当前图形中指定的网格位置。它接受三个参数:行数、列数和绘图索引。
import matplotlib.pyplot as plt
x = [10, 20, 30, 40]
y = [20, 25, 35, 55]
plt.figure()
plt.subplot(121)
plt.plot(x, y)
plt.subplot(122)
plt.plot(y, x)
编辑
使用subplot2grid()
subplot2grid() 会在网格内的指定位置创建轴对象,并且有助于将轴对象跨越多行或多列。
import matplotlib.pyplot as plt
x = [10, 20, 30, 40]
y = [20, 25, 35, 55]
axes1 = plt.subplot2grid (
(7, 1), (0, 0), rowspan = 2, colspan = 1)
axes2 = plt.subplot2grid (
(7, 1), (2, 0), rowspan = 2, colspan = 1)
axes1.plot(x, y)
axes2.plot(y, x)
编辑
使用savefig()保存图表
当我们使用Matplotlib创建图表时,有时我们希望将它们保存为图像文件,以便日后在报告、PPT中使用,或者与他人分享。Matplotlib提供了savefig()方法,用于将当前图表保存到计算机上的文件中。我们只需更改文件扩展名,就可以将图表保存为不同的格式,如.png、.jpg、.pdf、.svg等。
import matplotlib.pyplot as plt
year = ['2010', '2002', '2004', '2006', '2008']
production = [25, 15, 35, 30, 10]
plt.bar(year, production)
plt.savefig("output.jpg")
plt.savefig("output1", facecolor='y', bbox_inches="tight",
pad_inches=0.3, transparent=True)
编辑