【?plt.pie绘制直方图】:从入门到精通,只需一篇文章!【Matplotlib可视化】!
利用Matplotlib进行数据可视化示例
?文章目录?
? 一、引言? 二、plt.hist()函数基础? 三、plt.hist()进阶技巧1. 自定义直方图外观2. 多组数据在同一张直方图上展示 ? 四、参考文档|相关链接? 五、结尾
? 一、引言
数据可视化是数据分析和机器学习领域不可或缺的一部分。其中,直方图作为一种简单而直观的数据展示方式,常被用于展示数据的分布情况。在Python的Matplotlib库中,plt.hist()
函数是实现直方图绘制的强大工具。本文将从入门到精通,带领大家全面了解plt.hist()
函数的使用方法和技巧。
? 二、plt.hist()函数基础
plt.hist()
函数的基本语法如下:
plt.histhist(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, data=None)
参数解释:
x
:需要绘制直方图的数据,可以是一维数组或列表。bins
:指定直方图的柱子数量或边界,默认为10。也可以是一个数组,指定每个柱子的边界。color
:指定柱子的颜色。alpha
:指定柱子的透明度,取值范围为0~1。edgecolor
:指定柱子的边框颜色。linewidth
:指定柱子的边框线宽。 ? 示例代码:
import matplotlib.pyplot as pltimport numpy as np# 生成随机数据data = np.random.randn(1000)# 绘制直方图plt.hist(data, bins=20, color='skyblue', alpha=0.7, edgecolor='black', linewidth=1)# 设置标题和轴标签plt.title('Histogram of Random Data')plt.xlabel('Value')plt.ylabel('Frequency')# 显示图形plt.show()
以上代码将生成一个包含20个柱子的直方图,展示随机数据的分布情况。柱子的颜色为淡蓝色,透明度为0.7,边框颜色为黑色,边框线宽为1。
? 效果展示
Fig.1 使用plt.hist()函数绘制直方图? 三、plt.hist()进阶技巧
1. 自定义直方图外观
当使用plt.hist()
绘制直方图时,你可能想要进一步自定义其外观,以使其更加符合你的需求或更好地融入你的报告中。以下是一些自定义直方图外观的示例代码,并附有详细注释:
# 导入matplotlib的pyplot模块,用于绘图 import matplotlib.pyplot as plt# 导入numpy库,用于数值计算 import numpy as np# 定义一个名为CustomHistogram的类,用于创建定制化的直方图class CustomHistogram: # 初始化方法,在创建类实例时调用 def __init__(self, data, bins=30, color='skyblue', alpha=0.7, edgecolor='black', linewidth=1, title='', xlabel='', ylabel='', xlim=None, ylim=None, grid=False, save_to_file=None): # 设置数据 self.data = data # 设置直方图的柱子数量,默认为30 self.bins = bins # 设置柱子的颜色,默认为天蓝色 self.color = color # 设置柱子的透明度,默认为0.7 self.alpha = alpha # 设置柱子边缘颜色,默认为黑色 self.edgecolor = edgecolor # 设置柱子边缘线宽,默认为1 self.linewidth = linewidth # 设置图表标题 self.title = title # 设置x轴标签 self.xlabel = xlabel # 设置y轴标签 self.ylabel = ylabel # 设置x轴显示范围,默认为None,即不限制 self.xlim = xlim # 设置y轴显示范围,默认为None,即不限制 self.ylim = ylim # 设置是否显示网格线,默认为False self.grid = grid # 设置保存图表的文件路径,默认为None,即不保存 self.save_to_file = save_to_file # 设置图例标签列表,默认为空 self.legend_labels = [] # 设置字体属性,包括字体族、大小、粗细 self.font_properties = {'family': 'Arial', 'size': 12, 'weight': 'normal'} # 绘制直方图的方法 def plot(self): # 绘制直方图 plt.hist(self.data, bins=self.bins, color=self.color, alpha=self.alpha, edgecolor=self.edgecolor, linewidth=self.linewidth) # 设置图表标题,并设置字体大小和粗细 plt.title(self.title, fontsize=self.font_properties['size'], fontweight='bold') # 设置x轴标签,并设置字体大小 plt.xlabel(self.xlabel, fontsize=self.font_properties['size']) # 设置y轴标签,并设置字体大小 plt.ylabel(self.ylabel, fontsize=self.font_properties['size']) # 设置x轴和y轴刻度标签的字体大小 plt.tick_params(axis='both', which='major', labelsize=self.font_properties['size']) # 如果设置了x轴显示范围,则限制x轴显示范围 if self.xlim is not None: plt.xlim(self.xlim) # 如果设置了y轴显示范围,则限制y轴显示范围 if self.ylim is not None: plt.ylim(self.ylim) # 调用customize_axes方法定制坐标轴样式 self.customize_axes() # 如果设置了显示网格线,则添加网格线 if self.grid: self.add_grid() # 如果设置了图例标签,则添加图例 if self.legend_labels: self.add_legend(self.legend_labels) # 如果设置了保存文件路径,则保存图表到文件 if self.save_to_file: self.save_chart(self.save_to_file) # 显示图表 plt.show() # 定制坐标轴样式的方法 def customize_axes(self): # 隐藏顶部的边框 plt.gca().spines['top'].set_visible(False) # 隐藏右侧的边框 plt.gca().spines['right'].set_visible(False) # 设置x轴刻度位置在底部 plt.gca().xaxis.set_ticks_position('bottom') # 设置y轴刻度位置在左侧 plt.gca().yaxis.set_ticks_position('left') # 添加网格线的方法 def add_grid(self): # 添加y轴网格线,并设置透明度 plt.grid(axis='y', alpha=0.75, linestyle='--') # 添加图例的方法 def add_legend(self, labels): # 添加图例,传入图例标签列表 plt.legend(labels) # 保存图表到文件的方法 def save_chart(self, file_path): # 保存图表到指定文件路径 plt.savefig(file_path) # 示例用法if __name__ == "__main__": # 生成一些随机数据 data = np.random.randn(1000) # 创建一个CustomHistogram实例 histogram = CustomHistogram(data, bins=50, color='lightblue', alpha=0.6, edgecolor='black', linewidth=1.2, title='Customized Histogram', xlabel='Value', ylabel='Frequency', xlim=(-4, 4), ylim=(0, 60), grid=True, save_to_file='custom_histogram.png') # 绘制直方图 histogram.plot()
以上代码定义了一个名为CustomHistogram
的类,用于创建并绘制定制化的直方图。类初始化时接收一系列参数,包括数据、直方图的柱子数量、颜色、透明度、边缘颜色、线宽、图表标题、轴标签、轴显示范围、是否显示网格线、保存文件路径等。类中有几个方法,分别用于绘制直方图、定制坐标轴样式、添加网格线、添加图例和保存图表到文件。
在示例用法部分,代码生成了一些随机数据,然后创建了一个CustomHistogram
的实例,并传入了一些定制参数。最后,调用plot
方法绘制并显示了直方图,并且将其保存为名为custom_histogram.png
的文件。
? 效果展示
Fig.2 使用plt.hist()函数自定义直方图的外观2. 多组数据在同一张直方图上展示
如果有多组数据需要展示,我们可以将它们绘制在同一张直方图上。通过传递多个数据序列给plt.hist()
函数,并设置不同的柱子颜色,可以清晰地展示多组数据的分布情况,示例代码如下:
# 导入matplotlib.pyplot模块,用于绘图import matplotlib.pyplot as plt# 导入numpy模块,用于处理数组和数学运算import numpy as np# 使用numpy生成两组随机数据# data1是从标准正态分布中抽取的1000个随机数,并加上1作为偏移量data1 = np.random.randn(1000) + 1# data2是从标准正态分布中抽取的1000个随机数,并减去1作为偏移量data2 = np.random.randn(1000) - 1# 使用plt.hist函数绘制直方图# 参数说明:# - [data1, data2]:要绘制的数据,这里有两组数据# - bins=30:将数据分为30个直方柱# - color=['#add8e6', '#ffa500']:设置直方柱的颜色,分别为浅天蓝色和橙色# - alpha=0.7:设置直方柱的透明度# - label=['Data Group 1', 'Data Group 2']:为每个数据组设置标签# - edgecolor='black':设置直方柱的边缘颜色为黑色# - linewidth=1:设置直方柱的边缘线宽plt.hist([data1, data2], bins=30, color=['#add8e6', '#ffa500'], alpha=0.7, label=['Data Group 1', 'Data Group 2'], edgecolor='black', linewidth=1)# 添加网格线到图表上,仅对y轴添加网格线,并设置透明度为0.75plt.grid(axis='y', alpha=0.75)# 设置x轴的标签,标签内容为'Value',字体大小为12,颜色为暗红色plt.xlabel('Value', fontsize=12, color='darkred')# 设置y轴的标签,标签内容为'Frequency',字体大小为12,颜色为暗红色plt.ylabel('Frequency', fontsize=12, color='darkred')# 设置图表的标题,标题内容为'Histogram Comparison of Two Data Groups',字体大小为14,颜色为暗红色plt.title('Histogram Comparison of Two Data Groups', fontsize=14, color='darkred')# 计算两组数据的均值和中位数mean1, median1 = np.mean(data1), np.median(data1)mean2, median2 = np.mean(data2), np.median(data2)# 在图表上添加文本,显示第一组数据的统计信息# 参数说明:# - 0.75, 0.95:文本在图上的位置# - f'Data Group 1:\nMean: {mean1:.2f}\nMedian: {median1:.2f}':要显示的文本内容,包括均值和中位数# - transform=plt.gca().transAxes:设置文本的位置参考坐标系为图的相对坐标系# - fontsize=10:设置文本字体大小# - verticalalignment='top':设置文本垂直对齐方式为顶部对齐# - bbox:设置文本的边框样式和颜色plt.text(0.75, 0.95, f'Data Group 1:\nMean: {mean1:.2f}\nMedian: {median1:.2f}', transform=plt.gca().transAxes, fontsize=10, verticalalignment='top', bbox=dict(boxstyle='round', facecolor='lightblue', alpha=0.5))# 在图表上添加文本,显示第二组数据的统计信息# 参数与上面类似,只是位置和文本内容有所不同plt.text(0.75, 0.70, f'Data Group 2:\nMean: {mean2:.2f}\nMedian: {median2:.2f}', transform=plt.gca().transAxes, fontsize=10, verticalalignment='top', bbox=dict(boxstyle='round', facecolor='lightyellow', alpha=0.5))# 调整图例的位置到图表的左上角plt.legend(loc='upper left')# 显示图表plt.show()# 将图表保存为名为'histogram_comparison.png'的图片文件,并设置分辨率为300dpiplt.savefig('histogram_comparison.png', dpi=300)
? 效果展示
Fig.3 使用plt.hist()将多组数据在同一张直方图上展示? 四、参考文档|相关链接
专栏:Matplotlib之旅:零基础精通数据可视化(希望可以帮助你快速上手Matplotlib)Matplotlib初探:认识数据可视化与Matplotlib数据分析利器对决:Matplotlib中的MATLAB风格与面向对象风格,你选谁?【plt.colorbar添加颜色条】:从入门到精通,只需一篇文章!【Matplotlib】【plt.bar绘制条形图or柱状图】:从入门到精通,只需一篇文章!【Matplotlib可视化】【plt.pie绘制饼图】:从入门到精通,只需一篇文章!【Matplotlib可视化】【plt.imshow显示图像】:从入门到精通,只需一篇文章!【Matplotlib】? 五、结尾
亲爱的读者,感谢您每一次停留和阅读,这是对我们最大的支持和鼓励!?在茫茫网海中,您的关注让我们深感荣幸。您的独到见解和建议,如明灯照亮我们前行的道路。?若在阅读中有所收获,一个赞或收藏,对我们意义重大。
我们承诺,会不断自我挑战,为您呈现更精彩的内容。?有任何疑问或建议,欢迎在评论区畅所欲言,我们时刻倾听。?让我们携手在知识的海洋中航行,共同成长,共创辉煌!??感谢您的厚爱与支持,期待与您共同书写精彩篇章!
您的点赞?、收藏?、评论?和关注?,是我们前行的最大动力!