使用Python创建条形图的方法

在过去的一年中,我经常需要绘制直方图和条形图,足以使我想要并能够写出它。 此外,我本人也非常缺乏此类信息。 本文概述了在Python中创建这种图形的3种方法。

首先,我本人很长一段时间都不知道我的经验:条形图和直方图是两件事。 主要区别在于直方图显示了频率分布-我们为Ox轴指定了一组值,并且频率始终绘制在Oy上。 在条形图中(在英语文献中将其称为barplot是适当的),我们同时指定了横坐标轴和纵坐标轴。

为了演示,我将使用scikit来学习Iris库数据集。 让我们从导入开始:

import pandas as pd import numpy as np import matplotlib import matplotlib.pyplot as plt from sklearn import datasets iris = datasets.load_iris() 

我们将虹膜数据集转换为数据框-因此将来使用它会更加方便。

 data = pd.DataFrame(data= np.c_[iris['data'], iris['target']], columns= iris['feature_names'] + ['target']) 

在我们感兴趣的参数中,数据包含有关萼片和花瓣的长度以及萼片和花瓣的宽度的信息。

使用Matplotlib
直方图
让我们建立一个规则的直方图,显示花瓣和萼片的长度的频率分布:

 fig, axs = plt.subplots(1, 2) n_bins = len(data) axs[0].hist(data['sepal length (cm)'], bins=n_bins) axs[0].set_title('sepal length') axs[1].hist(data['petal length (cm)'], bins=n_bins) axs[1].set_title('petal length') 

图片

建立条形图

我们使用matplotlib方法比较叶子和萼片的宽度。 在单个图表上执行此操作似乎最方便:

 x = np.arange(len(data[:50])) width = 0.35 

例如,为了简化图片,请拍摄数据帧的前50行。

 fig, ax = plt.subplots(figsize=(40,5)) rects1 = ax.bar(x - width/2, data['sepal width (cm)'][:50], width, label='sepal width') rects2 = ax.bar(x + width/2, data['petal width (cm)'][:50], width, label='petal width') ax.set_ylabel('cm') ax.set_xticks(x) ax.legend() 

图片

使用seaborn方法

在我看来,使用seaborn方法执行构建直方图的许多任务更容易,更高效(此外,我认为seaborn也凭借其图形功能而获胜)

我将给出一个用单行代码在seaborn中解决的任务的示例。 当您需要建立发行版时,尤其是seaborn就是赢家。 假设我们需要建立一个萼片长度分布。 解决此问题的方法如下:

 sns_plot = sns.distplot(data['sepal width (cm)']) fig = sns_plot.get_figure() 

图片

如果只需要一个分发计划,则可以这样:

 snsplot = sns.kdeplot(data['sepal width (cm)'], shade=True) fig = snsplot.get_figure() 

图片

此处阅读更多有关seaborn的建筑分布的信息。

熊猫条形图

这里的一切都很简单。 实际上,这就是matplotlib.pyplot.hist()的外壳,但是通过pd.hist()调用函数有时比不那么敏捷的matplotlib-a构造更方便。 您可以在pandas库文档中阅读更多内容。

它是这样的:

 h = data['petal width (cm)'].hist() fig = h.get_figure() 

图片

感谢您阅读到底! 我将很高兴评论和评论!

Source: https://habr.com/ru/post/zh-CN470535/


All Articles