大家好,欢迎来到IT知识分享网。
在数据科学和数据分析领域,数据的可视化是理解和传达信息的关键环节。而Matplotlib作为Python中最常用的可视化库之一,可以帮助你轻松创建精美的图表。无论是折线图、柱状图还是其他类型的图表,Matplotlib都能用简洁的代码实现,让数据的展示变得直观且富有表现力。
接下来我们通过11个Python Matplotlib实用图表的示例和详细的代码讲解,你将学会如何用Matplotlib生成各种图表,为你的数据分析增添视觉亮点。不论你是数据科学新手还是有经验的从业者,这些实用图表都将成为你工作中的得力助手。
1.简单折线图(Line Plot)
- 图形和坐标轴:在Matplotlib中,图形(figure)就像一个盒子,容纳了图表的所有部分。坐标轴(axes)则像是图形内的一个小盒子,周围有线条和说明图表含义的文字。
- 变量命名:图形对象通常命名为fig,坐标轴对象通常命名为ax。
- 绘制数据:使用ax.plot方法在坐标轴上绘制数据。
- Pylab接口:提供类似于MATLAB的接口,自动创建图形和坐标轴。
- 多条折线:多次调用plot函数可以在同一图形上绘制多条折线。
import numpy as np import matplotlib.pyplot as plt plt.style.use('seaborn-v0_8-whitegrid') fig = plt.figure() ax = plt.axes() x = np.linspace(0, 10, 1000) plt.plot(x, np.sin(x)) plt.plot(x, np.cos(x)); plt.show()
2.简单的散点图(Scatter Plot)
- 什么是散点图:散点图有一些不按顺序排列的点。折线图的点是连接在一起的。
- 如何制作:你可以使用plt.plot或ax.plot来制作散点图。
- 点的样式:你可以使用特定的代码改变点的外观。文档中有说明使用哪些代码。
- plt.scatter的酷炫功能:你可以让每个点都与众不同。它们可以有不同的大小和颜色。你可以使用数据集来实现这一点。
- 透明点:你可以通过alpha设置让点变得透明。当点重叠时,这个功能特别有用。
import numpy as np import matplotlib.pyplot as plt plt.style.use('seaborn-v0_8-whitegrid') rng = np.random.RandomState(0) x = rng.randn(100) y = rng.randn(100) colors = rng.rand(100) sizes = 1000 * rng.rand(100) plt.scatter(x, y, c=colors, s=sizes, alpha=0.3, cmap='viridis') plt.colorbar(); plt.show()
3.错误可视化(Error Visualization)
- 为什么重要:在科学中,准确处理误差与测量本身同样重要。
- 举个例子:为了估算哈勃常数,你必须考虑误差。这有助于你判断不同测量结果是否一致。
- 不确定性:当你报告一个测量值时,还要说明你的不确定程度(例如71±2.5 (km/s)/Mpc)。这让你更好地比较数据。
- 显示误差:在图表中加入误差信息能提供更完整和正确的信息。
- fmt设置:它控制图表中线条和点的外观,类似于plt.plot的代码。
- errorbar函数:它让你改变误差条的外观,例如使它们变浅以便更容易看到。
- 个性化设置:使用更多的errorbar设置可以实现水平误差条、单边误差条等。根据你的需求自定义图表。
import numpy as np import matplotlib.pyplot as plt plt.style.use('seaborn-v0_8-whitegrid') x = np.linspace(0, 10, 50) dy = 0.8 y = np.sin(x) + dy * np.random.randn(50) plt.errorbar(x, y, yerr=dy, fmt='o', color='black', ecolor='lightgray', elinewidth=3, capsize=0); plt.show()
4.密度和等高线图(Density and Contour Plots)
- 显示三维数据:在二维图表中展示三维数据,比如等高线图或热图。
- 函数:使用plt.contour绘制等高线图,使用plt.contourf绘制填充等高线图,使用plt.imshow绘制图片。
- 准备数据:使用np.meshgrid将一维数组转换为二维网格。
- 绘制等高线图:plt.contour需要x、y和z数据用于网格和高度点。
- 线条样式:在黑白等高线图中,虚线表示负值,实线表示正值。
- 颜色图:使用cmap设置等高线的颜色,比如用RdGy显示集群数据。
- 颜色键:使用plt.colorbar生成颜色键,显示颜色所对应的数值范围。
- 填充等高线图:使用plt.contourf填充等高线图,使图表间隙更少,视觉效果更好。
import numpy as np import matplotlib.pyplot as plt plt.style.use('seaborn-v0_8-whitegrid') def f(x, y): return np.sin(x) 10 + np.cos(10 + y * x) * np.cos(x) x = np.linspace(0, 5, 50) y = np.linspace(0, 5, 40) X, Y = np.meshgrid(x, y) Z = f(X, Y) plt.contourf(X, Y, Z, 20, cmap='RdGy') plt.colorbar(); plt.show()
5.直方图、分箱和密度(Histograms, Binning, and Density)
- 基本直方图:使用Matplotlib的hist()函数快速绘制基本直方图。
- 参数调整:hist()提供了多种参数来调整直方图的计算和显示。
- 设置更改:不再使用normed参数。使用density参数来标准化数据。
- 个性化:使用histtype=’stepfilled’和alpha参数来绘制透明条形图。这有助于比较不同数据。
- 查阅文档:查看plt.hist文档,了解更多调整方式。
- 仅获取数据:如果只需要直方图数据而不需要绘图,可以使用np.histogram()。
import numpy as np import matplotlib.pyplot as plt plt.style.use('seaborn-v0_8-whitegrid') x1 = np.random.normal(0, 0.8, 1000) x2 = np.random.normal(-2, 1, 1000) x3 = np.random.normal(3, 2, 1000) kwargs = dict(histtype='stepfilled', alpha=0.3, density=True, bins=40) plt.hist(x1, kwargs) plt.hist(x2, kwargs) plt.hist(x3, kwargs); plt.show()
6.自定义图例(Custom Legends)
- 重要性:图例为可视化增加了意义,澄清了图表的不同元素。
- 创建图例:使用plt.legend()为图表部分添加名称和图例。
- 自定义:选择图例的位置。去掉边框。使用多行显示。使边角圆滑或添加阴影。改变透明度和文字间距。
- 选择显示内容:指定哪些部分和名称显示在图例中。通过设置plot返回的内容来实现。
- 多条线条:plt.plot可以返回多条线条。选择要传递给plt.legend()的线条,以创建你需要的图例。
- 命名部分:在图表部分直接添加名称,然后将它们放入图例中,这样可以更容易看清每个部分的含义。
import numpy as np import matplotlib.pyplot as plt plt.style.use('seaborn-v0_8-whitegrid') x = np.linspace(0, 10, 1000) y = np.sin(x[:, np.newaxis] + np.pi * np.arange(0, 2, 0.5)) plt.plot(x, y[:, 0], label='first') plt.plot(x, y[:, 1], label='second') plt.plot(x, y[:, 2:]) plt.legend(framealpha=1, frameon=True); plt.show()
7.自定义颜色条(Custom Colorbars)
- 图例与颜色条:图例标记离散标签,而颜色条表示连续的值与颜色之间的关系。
- 创建颜色条:使用plt.colorbar()创建颜色条。
- 颜色图:使用cmap参数指定颜色图。
- 颜色图资源:所有可用的颜色图都在plt.cm模块中,可以使用IPython的Tab自动补全列出颜色图。
- 颜色图类型:
- 连续颜色图:单一连续的颜色系列,如binary或viridis。
- 分叉颜色图:两个对比色系列,如RdBu或PuOr。
- 定性颜色图:不连续的颜色组合,如rainbow或jet。
import numpy as np import matplotlib.pyplot as plt plt.style.use('classic') x = np.linspace(0, 10, 1000) I = np.sin(x) * np.cos(x[:, np.newaxis]) plt.imshow(I, aspect='auto', cmap='viridis') plt.colorbar() plt.show()
8.多子图(Multiple Subplots)
- 概念:Matplotlib允许在单个图中显示多个子图,以便并排展示数据。
- 创建子图:使用plt.axes()创建子图,可以通过列表参数[left, bottom, width, height]指定位置和大小。
- 默认行为:plt.axes()默认创建填满整个图形区域的坐标轴对象。
- 对齐:使用plt.subplot()在网格中创建子图,可以指定行数、列数和子图索引的参数。
- 多行/列:使用plt.GridSpec()创建跨多行或多列的子图,定义网格布局。
- GridSpec用法:plt.GridSpec()定义网格布局,并可传递给plt.subplot()用于创建子图。
- GridSpec特点:它不直接创建图表,而是定义子图的网格布局。
import numpy as np import matplotlib.pyplot as plt plt.style.use('seaborn-v0_8-whitegrid') mean = [0, 0] cov = [[1, 1], [1, 2]] x, y = np.random.multivariate_normal(mean, cov, 3000).T fig = plt.figure(figsize=(6, 6)) grid = plt.GridSpec(4, 4, hspace=0.2, wspace=0.2) main_ax = fig.add_subplot(grid[:-1, 1:]) y_hist = fig.add_subplot(grid[:-1, 0], xticklabels=[], sharey=main_ax) x_hist = fig.add_subplot(grid[-1, 1:], yticklabels=[], sharex=main_ax) main_ax.plot(x, y, 'ok', markersize=3, alpha=0.2) x_hist.hist(x, 40, histtype='stepfilled', orientation='vertical', color='gray') x_hist.invert_yaxis() y_hist.hist(y, 40, histtype='stepfilled', orientation='horizontal', color='gray') y_hist.invert_xaxis() plt.show()
9.文本和注释(Text and Annotations)
- 目的:可视化旨在向读者传达数据背后的故事。
- 表达方式:有些图表本身就能讲述故事,而有些则需要文字辅助。
- 注释:在图表中添加文本注释可以吸引读者注意力并帮助理解。
- 文本放置:使用plt.text或ax.text在图表的特定位置(x,y)添加文本。
- 指导:通过文本注释引导读者关注关键的图表特征,以增强信息传递效果。
import numpy as np import matplotlib.pyplot as plt import pandas as pd import matplotlib.dates as mdates plt.style.use('seaborn-v0_8-whitegrid') # Create sample dataset dates = pd.date_range(start='1969-01-01', end='1988-12-31', freq='D') data = np.random.randint(3000, 5000, size=len(dates)) births = pd.DataFrame(data, columns=['births'], index=dates) fig, ax = plt.subplots(figsize=(12, 4)) births_by_date = births.pivot_table('births', [births.index.month, births.index.day]) births_by_date.index = [pd.Timestamp(year=2012, month=month, day=day) for month, day in births_by_date.index] births_by_date.plot(ax=ax) # Annotate specific positions on the line plot style = dict(size=10, color='gray') ax.text(pd.Timestamp('2012-1-1'), 3950, "New Year's Day", style) ax.text(pd.Timestamp('2012-7-4'), 4250, "Independence Day", ha='center', style) ax.text(pd.Timestamp('2012-9-4'), 4850, "Labor Day", ha='center', style) ax.text(pd.Timestamp('2012-10-31'), 4600, "Halloween", ha='right', style) ax.text(pd.Timestamp('2012-11-25'), 4450, "Thanksgiving", ha='center', style) ax.text(pd.Timestamp('2012-12-25'), 3850, "Christmas", ha='right', style) # Set title and y-axis label ax.set(title='USA births by day of year (1969-1988)', ylabel='average daily births') # Center month labels on the x-axis ax.xaxis.set_major_locator(mdates.MonthLocator()) ax.xaxis.set_minor_locator(mdates.MonthLocator(bymonthday=15)) ax.xaxis.set_major_formatter(plt.NullFormatter()) ax.xaxis.set_minor_formatter(mdates.DateFormatter('%b')) plt.show()
10.自定义刻度(Custom Ticks)
- 修改刻度:Matplotlib默认的刻度对大多数图表来说都很好用。但对于某些图表,你可能需要进行修改。
- 组成部分:Matplotlib中的所有图表部分都是事物。图形(Figure)包含坐标轴(Axes)。坐标轴包含图表的各种内容。
- 坐标轴内容:坐标轴有xaxis和yaxis。它们包括线条、刻度、名称等。
import numpy as np import matplotlib.pyplot as plt plt.style.use('seaborn-v0_8-whitegrid') fig, ax = plt.subplots() x = np.linspace(0, 3 * np.pi, 1000) ax.plot(x, np.sin(x), lw=3, label='Sine') ax.plot(x, np.cos(x), lw=3, label='Cosine') ax.grid(True) ax.legend(frameon=False) ax.axis('equal') ax.set_xlim(0, 3 * np.pi); plt.show()
11.创建Matplotlib中的3D图表(Creating 3D Plots in Matplotlib)
- 从2D到3D:Matplotlib最初仅支持2D图表;3D绘图工具是在版本1.0中引入的。
- 3D工具包:通过加载mplot3d工具包,Matplotlib支持3D绘图。
- 3D图表类型:激活3D坐标轴后,可以绘制各种3D图表,如线图和散点图。
- 3D绘图函数:使用ax.plot3D和ax.scatter3D分别绘制3D线图和散点图。
- 透明度和深度:散点图具有不同的透明度来表示深度。
- 交互视图:交互视图提供更好的3D视觉体验。
- 3D凸起图:mplot3d工具包具有制作3D凸起图的工具。它们类似于2D的ax.contour图。
- 3D表面图:表面图使用颜色填充形状以展示3D表面,看起来比线框图更好。
- 网格数据图片:从网格数据生成的3D图片包括线框图和表面图。它们将数据展示在3D形状上,使其更加清晰和具有说服力。
- 修改刻度样式:正常的刻度样式对大多数情况都适用。但对于某些图表,如正弦和余弦图表,你可能需要修改它们。
- 自定义示例:修改刻度的位置和外观有助于展示图表的含义。你可以根据数据调整刻度,使之更加合适。
import numpy as np import matplotlib.pyplot as plt fig = plt.figure() ax = plt.axes(projection='3d') def f(x, y): return np.sin(np.sqrt(x 2 + y 2)) x = np.linspace(-6, 6, 30) y = np.linspace(-6, 6, 30) X, Y = np.meshgrid(x, y) Z = f(X, Y) ax.set_xlabel('x') ax.set_ylabel('y') ax.set_zlabel('z') # Flatten the X, Y, Z arrays for plot_trisurf ax.plot_trisurf(X.flatten(), Y.flatten(), Z.flatten(), cmap='viridis', edgecolor='none') plt.show()
上面通过11个实用示例,详细讲解如何用Matplotlib生成各种图表,包括折线图、散点图、错误可视化、密度图、直方图、自定义图例和颜色条、文本注释、自定义刻度以及3D图表。这些示例将帮助你提升数据展示的直观性和表现力,不论你是新手还是有经验的数据科学从业者,都能从中受益。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/168368.html