Python五种方式实现可视化,包括炫酷的动态图(matplotlib、seaborn、plotly、bokeh、pyecharts)——matplotlib传记
nfkjdx 2024-06-13 15:35:02 阅读 56
一、matplotlib简介
1、介绍
matplotlib是一个功能强大的Python绘图库,用于创建各种类型的图形和可视化数据。它提供了广泛的绘图功能和灵活的配置选项,可以满足不同需求下的数据可视化需求。
2、主要特点
matplotlib的主要特点包括:简单易用:matplotlib的API设计简单直观,使用起来非常方便。它的语法和Matlab绘图库相似,对于熟悉Matlab的用户来说更容易上手。多种图形类型:matplotlib支持多种类型的图形,包括折线图、散点图、柱状图、饼图、直方图、箱线图、热力图等。用户可以根据数据类型和需求选择合适的图形类型。高度可定制:matplotlib提供了丰富的配置选项,用户可以自定义图形的样式、颜色、标签、标题、轴标签等。通过配置选项,可以灵活地调整图形的外观和布局,以满足个性化的需求。支持多种输出格式:matplotlib可以将图形输出为多种格式,包括图片文件(如PNG、JPEG)、PDF、SVG等。用户可以根据需要选择合适的输出格式,方便地将图形用于报告、文档或网页中。丰富的扩展库:matplotlib生态系统非常丰富,有许多扩展库可以与之配合使用,如Seaborn、Pandas等。这些扩展库提供了更高级的绘图功能和更方便的数据处理工具,进一步提升了matplotlib的使用体验和效果。总之,matplotlib是一个功能强大且灵活的Python绘图库,适用于各种数据可视化需求。无论是初学者还是专业人士,都可以通过matplotlib轻松地创建出精美的图形,并更好地理解和分析数据。
3、matplotlib库可以实现多种类型的图形,包括但不限于以下几种:
折线图(Line Plot):用于显示连续数据的趋势和变化。散点图(Scatter Plot):用于显示两个变量之间的关系和分布。柱状图(Bar Plot):用于比较不同类别或组之间的数值。条形图(Barh Plot):用于水平展示柱状图。饼图(Pie Chart):用于显示数据的相对比例和占比。直方图(Histogram):用于显示数据的分布情况。箱线图(Box Plot):用于显示数据的分散情况和异常值。热力图(Heatmap):用于显示数据的矩阵关系。3D图形(3D Plots):包括3D散点图、3D曲面图等。等高线图(Contour Plot):用于显示二维数据的等高线。极坐标图(Polar Plot):用于显示数据在极坐标系下的分布。简单地理图(Simple Maps):用于显示地理数据的简单地图。除了上述常见的图形类型,matplotlib库还提供了许多其他类型的图形,同时也支持自定义图形的样式、颜色、标签等。通过使用matplotlib库,可以根据具体的需求和数据类型选择合适的图形类型,并灵活地进行定制和配置,以实现所需的数据可视化效果。
4、基本属性设置
matplotlib库提供了丰富的属性设置,用于自定义图形的样式和外观。以下是常用的属性设置:颜色设置:color:设置图形的颜色,可以使用预定义的颜色名称(如'red'、'blue'等),也可以使用RGB值或十六进制颜色码。edgecolor:设置图形边缘的颜色。facecolor:设置图形内部的填充颜色。线型设置:linestyle:设置线条的样式,如实线、虚线等。linewidth:设置线条的宽度。标记设置:marker:设置标记的样式,如圆圈、方形等。markersize:设置标记的大小。文本设置:fontsize:设置文本的字体大小。fontweight:设置文本的字体粗细。fontfamily:设置文本的字体族。图例设置:legend:设置图例的位置和样式。label:设置图例的标签。坐标轴设置:xlabel:设置x轴的标签。ylabel:设置y轴的标签。xticks:设置x轴刻度的位置和标签。yticks:设置y轴刻度的位置和标签。图形大小和边距设置:figsize:设置图形的大小。dpi:设置图形的分辨率。tight_layout:自动调整子图的布局,使其适应图形大小。以上只是一些常用的属性设置,matplotlib还提供了更多的属性和方法,用于进一步自定义图形的样式和外观。可以通过查阅matplotlib的官方文档来获取更详细的信息。
(1)颜色设置:
在matplotlib中,可以使用RGB值或十六进制颜色码来设置图形的颜色。以下是一些常用的颜色的RGB值和十六进制颜色码:预定义颜色名称:'red':红色'blue':蓝色'green':绿色'yellow':黄色'orange':橙色'purple':紫色'brown':棕色'gray':灰色'black':黑色'white':白色RGB值:(1, 0, 0):红色(0, 0, 1):蓝色(0, 1, 0):绿色(1, 1, 0):黄色(1, 0.5, 0):橙色(0.5, 0, 0.5):紫色(0.6, 0.4, 0.2):棕色(0.5, 0.5, 0.5):灰色(0, 0, 0):黑色(1, 1, 1):白色十六进制颜色码:'#FF0000':红色'#0000FF':蓝色'#00FF00':绿色'#FFFF00':黄色'#FFA500':橙色'#800080':紫色'#996633':棕色'#808080':灰色'#000000':黑色'#FFFFFF':白色可以根据需要选择合适的颜色来设置图形的外观。
(2)线型设置:
linestyle属性用于设置线条的样式,可以通过以下属性值来设置线条的样式:实线样式:'-':实线'solid':实线虚线样式:'--':破折线'dashed':破折线点线样式:':':点线'dotted':点线点划线样式:'-.':点划线'dashdot':点划线除了上述属性值外,还可以使用自定义的线型设置,例如使用一个由线段长度和间隔长度组成的元组来表示虚线的样式,如(10, 5)表示线段长度为10,间隔长度为5的虚线。示例代码:import matplotlib.pyplot as pltx = [1, 2, 3, 4, 5]y = [1, 4, 9, 16, 25]plt.plot(x, y, linestyle='-', color='blue') # 使用实线样式plt.plot(x, y, linestyle='--', color='red') # 使用虚线样式plt.plot(x, y, linestyle=':', color='green') # 使用点线样式plt.plot(x, y, linestyle='-.', color='purple') # 使用点划线样式plt.plot(x, y, linestyle=(10, 5), color='orange') # 使用自定义虚线样式plt.show()
(3)标记设置:
marker属性用于设置数据点的标记样式,可以通过以下属性值来设置标记的样式:点样式:'.':小圆点'o':实心圆点'v':下三角形'^':上三角形'<':左三角形'>':右三角形'1':下指针'2':上指针'3':左指针'4':右指针's':正方形'p':五边形'*':星形'h':六边形1'H':六边形2'+':加号'x':叉号'D':菱形'd':瘦菱形'|':垂直线'_':水平线自定义标记样式:使用元组 (marker, size) 来自定义标记样式,其中 marker 表示标记的形状,size 表示标记的大小。示例代码:import matplotlib.pyplot as pltx = [1, 2, 3, 4, 5]y = [1, 4, 9, 16, 25]plt.plot(x, y, marker='.', linestyle='-', color='blue') # 使用小圆点作为标记plt.plot(x, y, marker='o', linestyle='-', color='red') # 使用实心圆点作为标记plt.plot(x, y, marker='v', linestyle='-', color='green') # 使用下三角形作为标记plt.plot(x, y, marker='^', linestyle='-', color='purple') # 使用上三角形作为标记plt.plot(x, y, marker='s', linestyle='-', color='orange') # 使用正方形作为标记plt.plot(x, y, marker=('D', 8), linestyle='-', color='black') # 使用自定义标记样式plt.show()运行上述代码将会绘制出不同样式的标记点。
(4)文本设置:
文本设置属性用于设置文本的样式和属性,可以通过以下属性来设置文本的样式:fontfamily:设置文本的字体族(如 'serif'、'sans-serif'、'cursive'、'fantasy'、'monospace'等)。fontsize:设置文本的字体大小(如 'large'、'x-large'、'smaller'、'larger'等)。fontweight:设置文本的字体粗细(如 'normal'、'bold'、'light'、'heavy'等)。fontstyle:设置文本的字体风格(如 'normal'、'italic'、'oblique'等)。color:设置文本的颜色(如 'red'、'blue'、'green'等)。backgroundcolor:设置文本的背景颜色(如 'yellow'、'lightblue'、'pink'等)。horizontalalignment:设置文本的水平对齐方式(如 'left'、'center'、'right'等)。verticalalignment:设置文本的垂直对齐方式(如 'top'、'center'、'bottom'等)。rotation:设置文本的旋转角度。bbox:设置文本的边框样式和属性(如边框颜色、边框粗细等)。示例代码:import matplotlib.pyplot as pltx = [1, 2, 3, 4, 5]y = [1, 4, 9, 16, 25]plt.plot(x, y)plt.text(2, 10, 'Sample Text', fontfamily='serif', fontsize='x-large', fontweight='bold', fontstyle='italic', color='red', backgroundcolor='yellow', horizontalalignment='center', verticalalignment='center', rotation=45, bbox=dict(facecolor='lightblue', edgecolor='blue', linewidth=2))plt.show()运行上述代码将会绘制出一条曲线和一个带有样式设置的文本。
(5)图例设置:
图例设置属性用于设置图例的样式和属性,可以通过以下属性来设置图例的样式:loc:设置图例的位置(如 'upper right'、'lower left'、'center'等)。bbox_to_anchor:设置图例的位置,以坐标轴为参考点进行设置。title:设置图例的标题。fontsize:设置图例的字体大小。frameon:设置图例是否显示边框。framealpha:设置图例边框的透明度。ncol:设置图例的列数。markerscale:设置图例标记的缩放比例。title_fontsize:设置图例标题的字体大小。shadow:设置图例是否显示阴影。示例代码:import matplotlib.pyplot as pltx = [1, 2, 3, 4, 5]y1 = [1, 4, 9, 16, 25]y2 = [1, 2, 3, 4, 5]plt.plot(x, y1, label='Line 1')plt.plot(x, y2, label='Line 2')plt.legend(loc='upper right', title='Legend', fontsize='large', frameon=True, framealpha=0.8, ncol=2, markerscale=1.5, title_fontsize='x-large', shadow=True)plt.show()运行上述代码将会绘制出两条曲线和一个带有样式设置的图例。
(6)坐标轴设置:
坐标轴设置属性用于设置坐标轴的样式和属性,可以通过以下属性来设置坐标轴的样式:xlabel:设置 x 轴的标签。ylabel:设置 y 轴的标签。xlim:设置 x 轴的显示范围。ylim:设置 y 轴的显示范围。xticks:设置 x 轴的刻度值。yticks:设置 y 轴的刻度值。xscale:设置 x 轴的刻度缩放(如 'linear'、'log'、'symlog'等)。yscale:设置 y 轴的刻度缩放(如 'linear'、'log'、'symlog'等)。grid:设置是否显示坐标轴网格线。gridcolor:设置坐标轴网格线的颜色。gridlinestyle:设置坐标轴网格线的样式。gridlinewidth:设置坐标轴网格线的宽度。tick_params:设置刻度线的样式和属性(如刻度线的长度、宽度、颜色等)。示例代码:import matplotlib.pyplot as pltx = [1, 2, 3, 4, 5]y = [1, 4, 9, 16, 25]plt.plot(x, y)plt.xlabel('X-axis', fontsize='large')plt.ylabel('Y-axis', fontsize='large')plt.xlim(0, 6)plt.ylim(0, 30)plt.xticks([1, 2, 3, 4, 5], ['A', 'B', 'C', 'D', 'E'], rotation=45)plt.yticks([0, 10, 20, 30], ['0', '10', '20', '30'])plt.xscale('linear')plt.yscale('linear')plt.grid(True, color='gray', linestyle='--', linewidth=0.5)plt.tick_params(axis='both', which='both', length=5, width=1, color='black')plt.show()运行上述代码将会绘制出一条曲线,并设置了坐标轴的样式和属性。
二、matplotlib实战
1、折线图的实现
简介:
折线图(Line plot)是一种用于展示数据随着时间、顺序或其他连续变量的变化趋势的图表。它通过连接数据点的线段来显示数据的变化情况,可以帮助我们观察和分析数据的趋势、周期性和关联性。折线图的主要特点和作用如下:变化趋势观察:折线图可以显示数据随时间或其他连续变量的变化趋势,帮助我们观察和分析数据的增长、下降、波动等情况。周期性分析:对于具有周期性的数据,折线图可以清晰地展示数据的周期性变化,如季节性变化、周期性波动等。关联性分析:当有多组相关数据时,可以通过绘制多条折线来比较它们之间的关联性和趋势,从而观察它们的相似性或差异性。异常值检测:折线图可以帮助我们发现数据中的异常值,即与其他数据点相比较为异常的数值。数据预测和预测模型评估:通过观察折线图的趋势,我们可以对未来的数据进行预测,并评估预测模型的准确性和可靠性。数据可视化:折线图是一种直观、简洁的方式来展示数据的变化趋势,可以用于报告、演示和与他人分享数据。折线图通常在时间序列分析、趋势分析、市场分析、科学实验等领域广泛应用。通过观察和分析折线图,我们可以更好地理解数据的变化情况,进而做出更准确的决策和预测。
(1)简单折线图(基本每行代码都有注解,大家可以参考,实现方式多种多样)
import matplotlib.pyplot as pltimport numpy as np# x,y轴的数据生成x = np.linspace(0, 10, 100)y = np.sin(x)# 创建图形和坐标轴(plt.figure(figsize=(12, 4)),设置了图形的大小为宽度为12英寸,高度为4英寸)fig, ax = plt.subplots(figsize=(12, 4))# 绘制曲线,设置y轴标签和曲线颜色ax.plot(x, y, label='sin(x)',color='red')# 添加标题和标签ax.set_title('Sine Wave')ax.set_xlabel('x')ax.set_ylabel('sin(x)')# 添加图例ax.legend()# 保存图形plt.savefig('line_plot.png')# 显示图形plt.show()
结果如下所示:
(2)多条折线图
import matplotlib.pyplot as pltplt.rcParams["font.sans-serif"]=["SimHei"] #设置字体plt.rcParams["axes.unicode_minus"]=False #该语句解决图像中的“-”负号的乱码问题fig, ax = plt.subplots(figsize=(12, 4),dpi=80)x = ['第一季度','第二季度','第三季度','第四季度']y1 = [288,197,456,210]y2 = [110,256,376,121]y3 = [260,356,277,300]plt.plot(x, y1, label = 'Line1',marker='o')plt.plot(x, y2, label = 'Line2', marker='*')plt.plot(x, y3, label = 'Line3',marker='^')plt.show()
结果如下:
(3)循环实现多条折线图
import matplotlib.pyplot as plt# 定义数据x = [1, 2, 3, 4, 5]y_list = [[1, 4, 9, 16, 25], [1, 2, 3, 4, 5], [5, 4, 3, 2, 1]]y_marker = ['*','o','^']# 创建画布plt.figure(figsize=(8, 4), dpi=100)# 循环绘制每一条折线图for i in range(len(y_list)): plt.plot(x, y_list[i],marker=y_marker[i])# 显示图形plt.show()
结果如下:
(4)实现不连续的折线图
import matplotlib.pyplot as pltx = [1, 2, 3, 4, 5]y = [1, 4, 9, 16, 25]plt.plot(x, y, linestyle='--')plt.show()
结果如下:
(5)区域填充的折线图
import matplotlib.pyplot as pltx = [1, 2, 3, 4, 5]y = [1, 4, 9, 16, 25]plt.plot(x, y)plt.fill_between(x, y, color='gray', alpha=0.5)plt.show()
结果如下:
#绘制折线图import matplotlib.pyplot as pltplt.rcParams["font.sans-serif"]=["SimHei"] #设置字体plt.rcParams["axes.unicode_minus"]=False #正常显示负号year = [2017, 2018, 2019, 2020]people = [20, 40, 60, 70]#生成图表plt.plot(year, people)plt.xlabel('年份')plt.ylabel('人口')plt.title('人口增长')#设置纵坐标刻度plt.yticks([0, 20, 40, 60, 80])#设置填充选项:参数分别对应横坐标,纵坐标,纵坐标填充起始值,填充颜色plt.fill_between(year, people, 20, color = 'green')#显示图表plt.show()
结果如下:
到这里折线图的介绍基本结束,大家可以根据不同属性进行不同折线图的实现。
2、柱状图的实现
简介:
柱状图(Bar chart)是一种用于展示不同类别或组之间数量或频率比较的图表。它通过绘制垂直或水平的矩形柱来表示数据,柱的高度表示数据的大小,可以帮助我们直观地比较不同类别或组之间的差异。柱状图的主要特点和作用如下:数据比较:柱状图可以清晰地显示不同类别或组之间的数量或频率差异,帮助我们比较和分析数据的大小、趋势和关系。类别分布观察:通过柱状图,我们可以观察和分析不同类别或组的数据分布情况,了解每个类别或组的相对大小和比例。异常值检测:柱状图可以帮助我们发现数据中的异常值,即与其他类别或组相比较为异常的数值。排序和排序比较:通过对柱状图进行排序,我们可以更好地理解数据的排序情况,并比较不同类别或组之间的排序差异。数据可视化:柱状图是一种直观、简洁的方式来展示数据的比较和分布情况,可以用于报告、演示和与他人分享数据。柱状图常用于市场调研、销售分析、统计报告、民意调查等领域。通过观察和分析柱状图,我们可以更好地理解数据的差异和趋势,有助于做出更准确的决策和预测。
(1)简单柱状图
import matplotlib.pyplot as pltx = ['A', 'B', 'C', 'D']y = [10, 15, 7, 12]plt.bar(x, y)plt.xlabel('X轴')plt.ylabel('Y轴')plt.title('基本柱状图')plt.show()
import matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei']plt.rcParams['axes.unicode_minus'] = False# 0.准备数据# 电影名字movie_name = ['雷神3:诸神黄昏','正义联盟','东方快车谋杀案','寻梦环游记','全球风暴','降魔传','追捕','七十七天','密战','狂兽','其它']# 横坐标x = range(len(movie_name))# 票房数据y = [73853,57767,22354,15969,14839,8725,8716,8318,7916,6764,52222]# 1.创建画布plt.figure(figsize=(20, 8), dpi=100)# 2.绘制柱状图plt.bar(x, y, width=0.5, color=['b','r','g','y','c','m','y','k','c','g','b'])# 2.1b修改x轴的刻度显示plt.xticks(x, movie_name)# 2.2 添加网格显示plt.grid(linestyle="--", alpha=0.5)# 2.3 添加标题plt.title("电影票房收入对比")# 3.显示图像plt.show()
(2)多个柱状图
import numpy as npimport matplotlib.pyplot as pltx = ['A', 'B', 'C', 'D']y1 = [10, 15, 7, 12]y2 = [8, 11, 9, 14]width = 0.35x_indexes = np.arange(len(x))plt.bar(x_indexes - width/2, y1, width=width, label='柱状图1')plt.bar(x_indexes + width/2, y2, width=width, label='柱状图2')plt.xlabel('X轴')plt.ylabel('Y轴')plt.title('多个柱状图')plt.xticks(x_indexes, x)plt.legend()plt.show()
(3)堆叠柱状图:
import numpy as npimport matplotlib.pyplot as pltx = ['A', 'B', 'C', 'D']y1 = [10, 15, 7, 12]y2 = [8, 11, 9, 14]x_indexes = np.arange(len(x))plt.bar(x_indexes, y1, label='柱状图1')plt.bar(x_indexes, y2, bottom=y1, label='柱状图2')plt.xlabel('X轴')plt.ylabel('Y轴')plt.title('堆叠柱状图')plt.xticks(x_indexes, x)plt.legend()plt.show()
(4)水平柱状图:
import matplotlib.pyplot as plty = ['A', 'B', 'C', 'D']x = [10, 15, 7, 12]plt.barh(y, x)plt.xlabel('X轴')plt.ylabel('Y轴')plt.title('水平柱状图')plt.show()
(5)带误差线的柱状图:
import matplotlib.pyplot as pltimport numpy as np# 柱形图误差线# 1. 生成数据np.random.seed(20230811)x = np.arange(10)y = np.random.randint(20, 100, 10)yerr = np.random.randint(3, 10, 10)# 2. 创建画布fig = plt.figure(figsize=(6, 4), dpi=100)ax = fig.add_subplot(111)# 3. 绘制柱形图ax.bar(x, y, width=0.5, color='C0', yerr=yerr, capsize=5)# 4. 设置样式ax.grid(axis='y', linestyle='--')ax.set_axisbelow(True)ax.spines[['right', 'top']].set_color('C7')plt.show()
3、饼状图的实现
简介:
饼图(Pie chart)是一种用于展示不同类别或组之间数量或比例关系的图表。它通过绘制一个圆形,将圆形划分为不同扇形区域,每个扇形区域的角度大小表示该类别或组的比例或百分比。饼图的主要特点和作用如下:比例展示:饼图可以直观地展示不同类别或组之间的比例关系,通过扇形区域的大小来表示每个类别或组的占比。百分比分布观察:通过饼图,我们可以观察和分析不同类别或组的百分比分布情况,了解每个类别或组的相对大小和比例。类别占比比较:饼图可以帮助我们比较不同类别或组之间的占比差异,从而更好地理解数据的分布情况。强调重点:通过调整饼图中某个扇形区域的大小,可以突出某个类别或组的重要性或特殊性。数据可视化:饼图是一种直观、简洁的方式来展示数据的比例和分布情况,可以用于报告、演示和与他人分享数据。饼图常用于市场份额分析、调查结果展示、资源分配比例等领域。通过观察和分析饼图,我们可以更好地理解数据的比例关系,有助于做出更准确的决策和预测。需要注意的是,饼图适用于展示相对比例或百分比的数据,不适合展示大量类别或组之间的细节差异。
(1)基础实心饼状图
import matplotlib.pyplot as pltplt.figure(figsize=(6,3), dpi=100)labels = ['A', 'B', 'C', 'D']sizes = [15, 30, 45, 10]plt.pie(sizes, labels=labels, shadow=True)plt.axis('equal')plt.legend()plt.show()
(2)加强版实心饼状图
import matplotlib.pyplot as plt# 设置字体以便支持中文plt.rcParams['font.sans-serif'] = ['SimHei']plt.rcParams['axes.unicode_minus'] = False# 设置图片大小和分辨率plt.figure(figsize=(6,3), dpi=100)labels = ['A', 'B', 'C', 'D']sizes = [15, 30, 45, 10]#突出显示某一块explode = (0, 0.1, 0, 0)#设置颜色colors = ['red', 'green', 'blue', 'yellow']# autopct='%1.1f%%', shadow=True:显示占比和图形阴影plt.pie(sizes, labels=labels,explode=explode , colors=colors,autopct='%1.1f%%', shadow=True)#axis 是一个用于控制图形坐标轴显示和范围的重要属性:plt.axis('equal')plt.title('占比图')plt.legend()plt.show()
(3)加强版环状饼状图
import matplotlib as mplimport matplotlib.pyplot as plt# 配置字体,显示中文mpl.rcParams['font.sans-serif'] = ['SimHei'] # 配置坐标轴刻度值模式,显示负号mpl.rcParams['axes.unicode_minus'] = False# 定义数据elements = ['面粉', '砂糖', '牛奶', '草莓酱', '坚果']weight1 = [40, 15, 20, 10, 15]cs = ['red', 'orange', 'yellow', 'green', 'cyan']# 对数据进行排序x = list(zip(elements, weight1, cs))x.sort(key=lambda e: e[1], reverse=True)[elements, weight1, cs] = list(zip(*x))outer_cs = csinner_cs = cs# 初始化图表区fig = plt.figure(figsize=(12, 8),facecolor='cornsilk')# 绘制外层圆环wedges1, texts1, autotexts1 = plt.pie(x=weight1, autopct='%3.1f%%', radius=1, pctdistance=0.85, startangle=90, counterclock=False, colors=outer_cs, # 锲形块边界属性字典 wedgeprops={ 'edgecolor': 'white', 'linewidth': 1, 'linestyle': '-' }, # 锲形块标签文本和数据标注文本的字体属性 textprops=dict(color='k', # 字体颜色 fontsize=14, family='Arial' ) )# 绘制中心空白区域plt.pie(x=[1], radius=0.6, colors=[fig.get_facecolor()] )# 设置图例plt.legend(handles=wedges1, loc='best', labels=elements, title='配料表', facecolor = fig.get_facecolor(), # 图例框的填充颜色 edgecolor='darkgray', fontsize=12 )plt.title(label='果酱面包的配料表占比', color='blue', size=15, weight='bold' );
(4)加强版环中环状饼状图
# 配置字体,显示中文mpl.rcParams['font.sans-serif'] = ['SimHei'] # 配置坐标轴刻度值模式,显示负号mpl.rcParams['axes.unicode_minus'] = False# 定义数据elements = ['面粉', '砂糖', '牛奶', '草莓酱', '坚果']weight1 = [40, 15, 20, 10, 15]weight2 = [30, 25, 15, 20, 10]cs = ['red', 'orange', 'yellow', 'green', 'cyan']# 对数据进行排序x = list(zip(elements, weight1, weight2, cs))x.sort(key=lambda e: e[1], reverse=True)[elements, weight1, weight2, cs] = list(zip(*x))# 初始化图表区fig = plt.figure(figsize=(12, 8), facecolor='cornsilk' )# 绘制外层圆环wedges1, texts1, autotexts1 = plt.pie(x=weight1, autopct='%3.1f%%', radius=1, pctdistance=0.85, startangle=90, counterclock=False, colors=cs, # 锲形块边界属性字典 wedgeprops={ 'edgecolor': 'white', 'linewidth': 1, 'linestyle': '-' }, # 锲形块标签文本和数据标注文本的字体属性 textprops=dict(color='k', # 字体颜色 fontsize=14, family='Arial' ))# 绘制内层圆环wedges2, texts2, autotexts2 = plt.pie(x=weight2, autopct='%3.1f%%', radius=0.7, pctdistance=0.75, startangle=90, counterclock=False, colors=inner_cs, # 锲形块边界属性字典 wedgeprops={ 'edgecolor': 'white', 'linewidth': 1, 'linestyle': '-' }, # 锲形块标签文本和数据标注文本的字体属性 textprops=dict(color='k', # 字体颜色 fontsize=14, family='Arial' ))# 绘制中心空白区域plt.pie(x=[1], radius=0.4, colors=[fig.get_facecolor()] )# 设置图例plt.legend(handles=wedges1, loc='best', labels=elements, title='配料表', facecolor = fig.get_facecolor(), # 图例框的填充颜色 edgecolor='darkgray', fontsize=12 )plt.title(label='不同果酱面包的配料表比较', color='blue', size=15, weight='bold' );
(5)综合饼状图
from matplotlib import font_manager as fmfrom matplotlib import cmimport pandas as pdshapes = ['Cross', 'Cone', 'Egg', 'Teardrop', 'Chevron', 'Diamond', 'Cylinder', 'Rectangle', 'Flash', 'Cigar', 'Changing', 'Formation', 'Oval', 'Disk', 'Sphere', 'Fireball', 'Triangle', 'Circle', 'Light']values = [ 287, 383, 842, 866, 1187, 1405, 1495, 1620, 1717, 2313, 2378, 3070, 4332, 5841, 6482, 7785, 9358, 9818, 20254]s = pd.Series(values, index=shapes)labels = s.indexsizes = s.valuesexplode = (0.1,0,0,0,0,0,0,0,0,0,0,0,0,0.2,0,0,0,0.1,0) # "explode" , show the selected slicefig, axes = plt.subplots(figsize=(8,5),ncols=2,dpi=100) # 设置绘图区域大小ax1, ax2 = axes.ravel()colors = cm.rainbow(np.arange(len(sizes))/len(sizes)) # colormaps: Paired, autumn, rainbow, gray,spring,Darkspatches, texts, autotexts = ax1.pie(sizes, labels=labels, autopct='%1.0f%%',explode=explode, shadow=False, startangle=170, colors=colors, labeldistance=1.2,pctdistance=1.03, radius=0.4)# labeldistance: 控制labels显示的位置# pctdistance: 控制百分比显示的位置# radius: 控制切片突出的距离ax1.axis('equal') # 重新设置字体大小proptease = fm.FontProperties()proptease.set_size('xx-small')# font size include: ‘xx-small’,x-small’,'small’,'medium’,‘large’,‘x-large’,‘xx-large’ or number, e.g. '12'plt.setp(autotexts, fontproperties=proptease)plt.setp(texts, fontproperties=proptease)ax1.set_title('Shapes', loc='center')# ax2 只显示图例(legend)ax2.axis('off')ax2.legend(patches, labels, loc='center left')plt.tight_layout()# plt.savefig("pie_shape_ufo.png", bbox_inches='tight')plt.savefig('Demo_project_final.jpg')plt.show()
4、箱型图的实现
简介:https://www.yingsoo.com/news/devops/44361.html
箱型图(Boxplot)是一种用于可视化数据分布和离群值的统计图表。它展示了数据的中位数、四分位数、上下边界和离群值,可以帮助我们了解数据的集中趋势、离散程度和异常值情况。箱型图的主要组成部分如下:箱体(Box):由数据的四分位数(上四分位数和下四分位数)组成,箱体的长度表示数据的离散程度。中位数线(Median):表示数据的中位数,即将数据从小到大排列后的中间值。上边界(Upper Whisker)和下边界(Lower Whisker):表示数据的上四分位数和下四分位数之外的边界值。离群值(Outliers):超过上边界和下边界的数据点,被认为是异常值。箱型图的作用包括:数据分布观察:箱型图可以帮助我们了解数据的分布情况,包括数据的中位数、四分位数、离散程度等。离群值检测:箱型图可以帮助我们识别数据中的离群值,即与其他数据点相比较为异常的数值。数据比较:通过绘制不同组数据的箱型图,可以直观地比较它们的中位数、四分位数和离散程度,从而了解它们之间的差异。数据可视化:箱型图是一种简洁而有效的方式来展示数据的统计特征,可以用于报告和演示。通过观察箱型图,我们可以获得关于数据集的重要信息,从而更好地理解和分析数据。
(1)简单箱型图
import matplotlib.pyplot as pltimport numpy as npdata1 = np.random.randn(100)data2 = np.random.randn(100)data3 = np.random.randn(100)data = [data1, data2, data3]labels = ['Group 1', 'Group 2', 'Group 3']colors = [1, 0, 0.5]plt.boxplot(data, labels=labels, vert=True, patch_artist=True, boxprops=dict(facecolor=colors))plt.show()
(2)小提琴版箱型图
import matplotlib.pyplot as pltimport numpy as npimport matplotlib"""font:设置中文unicode_minus:显示负号"""matplotlib.rcParams['font.family'] = ['Heiti TC']matplotlib.rcParams['axes.unicode_minus']=False # 正常显示负号"""设置随机数生成器的种子,使每次生成的随机数相同方便后续的复现"""np.random.seed(19900108)"""生成随机数datanumpy.random.normal()函数来创建一组基于正态分布的随机数据,该函数有三个参数,分别是正态分布的平均值、标准差以及期望值的数量"""data = np.random.normal(70, 40, 1000)fig,axes=plt.subplots(1,2,figsize=(16,9))#绘制箱型图axes[0].boxplot(data)axes[0].set_title("箱型图")#绘制小提琴图axes[1].violinplot(data,showmeans=True, showmedians=True)axes[1].set_title("小提琴图")plt.show()
(3)不同形状箱型图
import matplotlib.pyplot as pltimport numpy as np# 生成随机数据np.random.seed(0)data = np.random.randn(100)# 绘制带有缺口的箱线图plt.boxplot(data, notch=True)# 添加标签和标题plt.xlabel('Data')plt.ylabel('Values')plt.title('Box Plot with Notch')# 显示图表plt.show()
import matplotlib.pyplot as pltimport numpy as np# 生成随机数据np.random.seed(0)data = np.random.randn(100)outliers = [2.5, -3.8, 3.2] # 自定义异常值# 绘制箱线图并自定义异常值样式plt.boxplot(data, flierprops={ 'marker': 'x', 'markerfacecolor': 'red', 'markersize': 8, 'linestyle': 'none'}, notch=True, showfliers=True)# 添加自定义异常值plt.scatter(np.full(len(outliers), 1), outliers, marker='x', color='red')# 添加标签和标题plt.xlabel('Data')plt.ylabel('Values')plt.title('Box Plot with Custom Outliers')# 显示图表plt.show()
import matplotlib.pyplot as pltimport numpy as np# 生成随机数据np.random.seed(0)data = np.random.randn(100)# 绘制箱线图并自定义箱子样式plt.boxplot(data, boxprops={ 'color': 'green', 'linewidth': 2, 'linestyle': '--'}, notch=True, showfliers=True)# 添加标签和标题plt.xlabel('Data')plt.ylabel('Values')plt.title('Box Plot with Custom Box Style')# 显示图表plt.show()
5、热力图的实现
简介:
热力图(Heatmap)是一种二维图表,通过使用颜色编码来表示数据的矩阵或表格中的值。热力图通常使用渐变色来展示数据的相对大小,较小的值使用较浅的颜色,较大的值使用较深的颜色。热力图可以直观地显示数据的分布和模式,帮助我们发现数据中的关联性和规律。热力图的作用主要有以下几个方面:可视化数据分布:热力图可以将数据的分布以直观的方式展示出来。通过观察颜色的变化,我们可以快速了解数据的整体分布情况,包括数据的集中程度、离散程度和梯度变化。发现关联性和规律:热力图可以帮助我们发现数据中的关联性和规律。通过对比不同数据点之间的颜色差异,我们可以判断数据之间的相关性和趋势。例如,在生物学研究中,热力图可以用于显示基因表达水平的相关性。强调重要信息:热力图可以突出显示数据中的重要信息。通过调整颜色映射和颜色条的设置,我们可以将感兴趣的数据区域或特定数值范围的数据突出显示,从而更加准确地传达数据的含义。可视化矩阵数据:热力图特别适用于可视化矩阵或表格数据。通过将矩阵数据映射到热力图的颜色空间,我们可以更好地理解数据的结构和模式。总之,热力图是一种直观、有效的数据可视化工具,可以帮助我们理解数据的分布、发现关联性和规律,并突出显示重要信息。它在各个领域的数据分析、探索和展示中都有广泛的应用。
(1)简单热力图
import matplotlib.pyplot as pltimport numpy as npplt.figure(figsize=(10,6), dpi=100)vegetables = ["cucumber", "tomato", "lettuce", "asparagus", "potato", "wheat", "barley"]farmers = ["Farmer Joe", "Upland Bros.", "Smith Gardening", "Agrifun", "Organiculture", "BioGoods Ltd.", "Cornylee Corp."]harvest = np.array([[0.8, 2.4, 2.5, 3.9, 0.0, 4.0, 0.0], [2.4, 0.0, 4.0, 1.0, 2.7, 0.0, 0.0], [1.1, 2.4, 0.8, 4.3, 1.9, 4.4, 0.0], [0.6, 0.0, 0.3, 0.0, 3.1, 0.0, 0.0], [0.7, 1.7, 0.6, 2.6, 2.2, 6.2, 0.0], [1.3, 1.2, 0.0, 0.0, 0.0, 3.2, 5.1], [0.1, 2.0, 0.0, 1.4, 0.0, 1.9, 6.3]])plt.xticks(np.arange(len(farmers)), labels=farmers, rotation=45, rotation_mode="anchor", ha="right")plt.yticks(np.arange(len(vegetables)), labels=vegetables) plt.title("Harvest of local farmers (in tons/year)")for i in range(len(vegetables)): for j in range(len(farmers)): text = plt.text(j, i, harvest[i, j], ha="center", va="center", color="w")plt.imshow(harvest)plt.colorbar()plt.tight_layout()plt.show()
(2)热力图
from matplotlib import pyplot as pltimport numpy as npdef draw(): # 定义热图的横纵坐标 xLabel = ['0.1', '0.3', '0.5', '0.7', '0.9', '1'] yLabel = ['0.001', '0.01', '0.1', '1'] # 准备数据阶段 data = np.array([[0.9095, 0.9187, 0.9205, 0.9264, 0.9261, 0.9127], [0.9130, 0.9106, 0.9240, 0.9322, 0.9285, 0.9138], [0.8857, 0.8851, 0.8880, 0.8936, 0.8867, 0.9147], [0.9181, 0.9217, 0.9308, 0.9355, 0.9377, 0.9104]]) # 作图阶段 fig, ax = plt.subplots(figsize=(10,6), dpi=100) # 定义横纵坐标的刻度 ax.set_yticks(range(len(yLabel))) ax.set_yticklabels(yLabel) ax.set_xticks(range(len(xLabel))) ax.set_xticklabels(xLabel) # 作图并选择热图的颜色填充风格,这里选择yLGn im = ax.imshow(data, cmap="YlGn") # 增加右侧的颜色刻度条 plt.colorbar(im) # 填充数字 for i in range(len(yLabel)): for j in range(len(xLabel)): #print('data[{},{}]:{}'.format(i, j, data[i, j])) ax.text(j, i, data[i, j], ha="center", va="center", color="black") # 增加标题 plt.title("AUC values", fontdict={ 'size': 16}) plt.xlabel(r'$\beta$', fontdict={ 'size': 16}) plt.ylabel(r'$\gamma$', rotation=0, fontdict={ 'size': 16}) # show fig.tight_layout() plt.show()d = draw()
6、直方图的实现
简介:
直方图(Histogram)是一种用于展示数据分布的统计图表。它将数据划分为若干个等宽的区间(也称为“箱子”或“柱子”),并统计每个区间内数据的频数或频率。直方图通过绘制矩形条来表示每个区间内数据的数量或频率,矩形条的高度表示数据的频数或频率。直方图的作用主要有以下几个方面:描述数据分布:直方图可以直观地展示数据的分布情况。通过观察直方图的形状、峰度和偏态,我们可以了解数据的中心趋势、离散程度和数据的偏向性。检测数据异常和离群值:直方图可以帮助我们检测数据中的异常值和离群值。异常值是指与其他观测值明显不同的极端数值。在直方图中,异常值通常表现为与其他柱子明显不同高度的柱子。比较不同组的数据:通过将多个直方图放在一起,我们可以直观地比较不同组的数据分布情况。这对于探索不同类别或组之间的差异非常有用。确定数据分布的特征:直方图可以帮助我们确定数据的分布特征,例如是否符合正态分布、是否存在多峰分布等。这对于选择适当的统计方法和模型具有重要意义。数据预处理:直方图可以帮助我们进行数据预处理,例如确定数据的分箱方式、选择合适的数据转换方法等。总之,直方图是一种简单而常用的数据可视化工具,可以帮助我们了解数据的分布特征、检测异常值和离群值,并进行数据比较和预处理。它在数据分析、探索和展示中被广泛应用。
(1)基础直方图
import matplotlib.pyplot as pltimport numpy as np# 准备数据data = np.random.randn(1000)# 绘制直方图plt.hist(data)# 添加标签和标题plt.xlabel('Value')plt.ylabel('Frequency')plt.title('Histogram')# 显示图表plt.show()
(2)一图多形
import matplotlib.pyplot as pltimport numpy as np# 生成随机数据np.random.seed(0)data1 = np.random.normal(0, 1, 1000)data2 = np.random.normal(2, 1, 800)data3 = np.random.normal(-2, 1, 1200)# 绘制直方图plt.hist(data1, bins=30, alpha=0.5, label='Data 1')plt.hist(data2, bins=30, alpha=0.5, label='Data 2')plt.hist(data3, bins=30, alpha=0.5, label='Data 3')# 添加标签和标题plt.xlabel('Value')plt.ylabel('Frequency')plt.title('Histogram Comparison')# 添加图例plt.legend()# 显示图表plt.show()
(3)升级1
import matplotlib.pyplot as pltimport numpy as np# 生成随机数据np.random.seed(0)data = np.random.randn(1000)# 绘制直方图plt.hist(data, bins=30, color='skyblue', edgecolor='black')# 添加标签和标题plt.xlabel('Value')plt.ylabel('Frequency')plt.title('Histogram')# 显示图表plt.show()
(4)升级2
import numpy as npimport matplotlib.pyplot as pltn_bins = 10x = np.random.randn(1000, 3)fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(11,8)) #subplots创建多个子图ax0=axes[0,0]ax1=axes[0,1]ax2=axes[1,0]ax3=axes[1,1]colors = ['red', 'tan', 'lime']ax0.hist(x, n_bins, density=True, histtype='bar', color=colors, label=colors)ax0.legend(prop={ 'size': 8})ax0.set_title('bars with legend')ax1.hist(x, n_bins, density=True, histtype='bar', stacked=True)ax1.set_title('stacked bar')ax2.hist(x, n_bins, histtype='step', stacked=True)ax2.set_title('stack step (unfilled)')x_multi = [np.random.randn(n) for n in [10000, 5000, 2000]]ax3.hist(x_multi, n_bins, histtype='bar')ax3.set_title('different sample sizes')fig.tight_layout() #自动调整子图参数plt.show()
7、3D线框图的实现
简介:
3D线框图(3D Wireframe Plot)是一种用于可视化三维数据的图表。它通过绘制三维空间中的线段来表示数据的分布和形状。3D线框图通常由一系列连接的线段组成,这些线段连接了数据点或数据的边界。3D线框图的作用主要有以下几个方面:展示数据的形状和结构:3D线框图可以直观地展示数据的形状和结构。通过观察线段的分布和连接方式,我们可以了解数据在三维空间中的分布和形态。比较不同组的数据:通过将多个3D线框图放在一起,我们可以比较不同组数据的形状和结构。这对于探索不同类别或组之间的差异非常有用。可视化复杂关系:3D线框图可以用于可视化复杂的关系和模式。通过绘制多个线段和连接点,我们可以展示数据中的复杂关系,例如多个变量之间的相互作用。辅助数据分析和决策:3D线框图可以帮助我们进行数据分析和决策。通过观察线段的长度、角度和形状,我们可以得到关于数据的直观感受,并从中提取有用的信息。艺术和设计应用:3D线框图在艺术和设计领域也有广泛的应用。它可以用于创造具有立体感和空间感的图像和模型,为艺术作品和设计方案增添视觉效果。总之,3D线框图是一种用于可视化三维数据的图表,可以展示数据的形状和结构,比较不同组的数据,可视化复杂关系,并辅助数据分析和决策。它在数据分析、科学研究、艺术和设计等领域都有广泛的应用。
(1)3D线框图
import matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3Dimport numpy as np# 生成数据x = np.linspace(-5, 5, 50) # x轴坐标y = np.linspace(-5, 5, 50) # y轴坐标X, Y = np.meshgrid(x, y)Z = np.sin(np.sqrt(X**2 + Y**2)) # z轴坐标,这里使用sin函数生成一个曲面# 创建一个三维坐标系fig = plt.figure(figsize=(10,6), dpi=100)ax = fig.add_subplot(111, projection='3d')# 绘制线框图ax.plot_wireframe(X, Y, Z)# 设置坐标轴标签ax.set_xlabel('X')ax.set_ylabel('Y')ax.set_zlabel('Z')# 显示图形plt.show()
(2)3D散点图
import matplotlib.pyplot as pltimport numpy as np# 数据准备x = np.random.rand(100) # x轴数据y = np.random.rand(100) # y轴数据z = np.random.rand(100) # z轴数据colors = np.random.rand(100) # 颜色数据# 创建3D图形对象fig = plt.figure(figsize=(10,6), dpi=100)ax = fig.add_subplot(111, projection='3d')# 绘制3D散点图ax.scatter(x, y, z, c=colors, cmap='viridis', marker='o')# 设置坐标轴标签ax.set_xlabel('X')ax.set_ylabel('Y')ax.set_zlabel('Z')# 显示图形plt.show()
(3)3D条形图
import matplotlib.pyplot as pltimport numpy as np# 数据准备x = np.arange(3) # x轴位置y = np.arange(3) # y轴位置x_mesh, y_mesh = np.meshgrid(x, y) # 创建网格z = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 条形的高度# 创建3D图形对象fig = plt.figure(figsize=(10,6), dpi=100)ax = fig.add_subplot(111, projection='3d')# 绘制3D条形图ax.bar3d(x_mesh.flatten(), y_mesh.flatten(), np.zeros_like(z).flatten(), 0.5, 0.5, z.flatten())# 设置坐标轴标签ax.set_xlabel('X')ax.set_ylabel('Y')ax.set_zlabel('Z')# 显示图形plt.show()
(4)3D曲面图
import matplotlib.pyplot as pltimport numpy as np # 数据准备x = np.linspace(-5, 5, 100) # x轴数据范围y = np.linspace(-5, 5, 100) # y轴数据范围x_mesh, y_mesh = np.meshgrid(x, y) # 创建网格z = np.sin(np.sqrt(x_mesh**2 + y_mesh**2)) # 曲面高度# 创建3D图形对象fig = plt.figure(figsize=(10,6), dpi=100)ax = fig.add_subplot(111, projection='3d')# 绘制3D曲面图ax.plot_surface(x_mesh, y_mesh, z, cmap='viridis')# 设置坐标轴标签ax.set_xlabel('X')ax.set_ylabel('Y')ax.set_zlabel('Z')# 显示图形plt.show()
(5)3D等高线图
import matplotlib.pyplot as pltimport numpy as np# 数据准备x = np.linspace(-5, 5, 100) # x轴数据范围y = np.linspace(-5, 5, 100) # y轴数据范围x_mesh, y_mesh = np.meshgrid(x, y) # 创建网格z = np.sin(np.sqrt(x_mesh**2 + y_mesh**2)) # 曲面高度# 创建3D图形对象fig = plt.figure(figsize=(10,6), dpi=100)ax = fig.add_subplot(111, projection='3d')# 绘制3D等高线图ax.contour3D(x_mesh, y_mesh, z, 50, cmap='viridis')# 设置坐标轴标签ax.set_xlabel('X')ax.set_ylabel('Y')ax.set_zlabel('Z')# 显示图形plt.show()
以上就是matplotlib的一些简单用法,大家可以参考一下,因为实现方法和实现的图形类型多种多样,这里列举远远不够,简单供大家参考!
上一篇: 作用域
下一篇: 【CSAPP】BombLab
本文标签
包括炫酷的动态图(matplotlib、seaborn、plotly、bokeh、pyecharts)——matplotlib传记 Python五种方式实现可视化
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。