python可视化:Plotting with pandas and seaborn

python可视化:Plotting with pandas and seaborn第二节 Plottingwith 是一个基础的工具

第二节Plotting with pandas and seaborn
matplotlib是一个基础的工具。可以用它的基本组件进行绘图:数据显示(线、条、框、散点等)、图例、标题、刻度标签等注释。

pandas中,有时我们的数据由多列组成,包含行名和列名。使用pandas内置函数可以简化DataFrame和Series对象的可视化。

另一个库是seaborn,这是Michael Waskom创建的一个统计图形库。Seaborn简化了许多常见的可视化类型的创建。

(一)线图
Series和DataFrame对象都有plot属性,可以进行一些基本的图形绘制,在默认参数下,plot()是画线图,下面是一个Series对象的线型图:

import numpy as np import pandas as pd s = pd.Series(np.random.randn(10).cumsum(), index=np.arange(0, 100, 10)) print(s)
In [1]: import pandas as pd In [2]: s = pd.Series(np.random.randn(10).cumsum(), index=np.arange(0, 100, 10)) In [3]: s Out[3]:         0     0.         10   -0.         20   -0.         30   -0.         40    0.         50   -1.         60   -1.         70   -1.         80   -0.         90   -0.         dtype: float64 In [4]: s.plot()

对于DataFrame对象的plot画图来说,每一列有不同的线来表示,并且自动生成图例说明:

import numpy as np import pandas as pd df = pd.DataFrame(np.random.randn(10, 4).cumsum(0), columns=['A', 'B', 'C', 'D'], index=np.arange(0, 100, 10)) print(df) print(df.plot.line())
In [5]: df = pd.DataFrame(np.random.randn(10, 4).cumsum(0),             columns=['A', 'B', 'C', 'D'],             index=np.arange(0, 100, 10))          df Out[5]:            A         B         C         D 0  -0.  0.  0. -0. 10  0. -0.098679 -0. -1. 20 -0. -0. -0. -0. 30  0. -0. -0.097362 -0.064981 40  0. -1. -0.  1. 50  1. -2. -0.  3. 60  2.005584 -2.  0.  5. 70  1. -1.  0.  5. 80  2.092307 -1.  1.  5. 90  0. -0.  1.  3. In [6]: df.plot()

df.plot()函数和df.plot.line()函数的功能是一样的。

(二)bar图
plot.bar()plot.barh() 分别可绘制竖着的、横着的bar图。
先来看一下Series对象的绘图:

import numpy as np import pandas as pd s = pd.Series(np.random.randn(10).cumsum(), index=np.arange(0, 100, 10)) print(s)

a    0.
b    0.
c    0.
d    0.
e    0.
f    0.
g    0.
h    0.
i    0.
j    0.
k    0.
l    0.
m    0.
n    0.
o    0.
p    0.
dtype: float64

In [7]: data = pd.Series(np.random.rand(16), index=list('abcdefghijklmnop'))         data Out[7]: a    0. b    0. c    0. d    0. e    0. f    0.082225 g    0. h    0. i    0. j    0. k    0. l    0. m    0. n    0. o    0.070989 p    0. dtype: float64 In [8]: fig, axes = plt.subplots(2, 1)         data.plot.bar(ax=axes[0], color='k', alpha=0.7)         data.plot.barh(ax=axes[1], color='k', alpha=0.7)

color='k'alpha=0.7分别设置颜色和透明度。

再看一下Dataframe对象的绘图,bar图的分组是根据每一行的值放在一起的。

In [10]: df = pd.DataFrame(np.random.rand(6, 4),     ...: index=['one', 'two', 'three', 'four', 'five', 'six'],     ...: columns=pd.Index(['A', 'B', 'C', 'D'], name='Genus')) In [11]: df

In [12]: df.plot.bar()

下面是把上面的图变换一下展示的方法:

In [13]: df.plot.barh(stacked=True, alpha=0.5)

In [14]: tips = pd.read_csv('example/examples/tips.csv')          tips

把其中的两列day和size两列里相互对应的数量提取出来:

In [15]: party_counts = pd.crosstab(tips['day'], tips['size'])          party_counts

#提取上面的第2列到第5列 party_counts = party_counts.loc[:, 2:5] party_counts

 

#将上面的子集每一行进行标准化,标准化后的每一行加起来是1 # Normalize to sum to 1 party_pcts = party_counts.div(party_counts.sum(1), axis=0) party_pcts 

 party_pcts.plot.bar()

上面是利用pandas进行绘图,下面看一下利用seaborn绘图,同样是用上面的示例数据:

import seaborn as sns tips = pd.read_csv('example/examples/tips.csv') tips['tip_pct'] = tips['tip'] / (tips['total_bill'] - tips['tip'])  #给dataframe加一列经过计算后的tip_pct列 tips.head()

fig = plt.figure() sns.barplot(x='tip_pct', y='day', data=tips, orient='h')

在seaborn里的绘图功能中,data的参数可以是pandas的Dataframe。其他参数可以是列名。上图中,黑色线代表95%的置信区间。

(三)Histograms and Density Plots直方图和密度图
直方图是一种条形图,离散的显示数值频率。数据点被分割成离散的,均匀间隔的bin,绘制每个数据的数量。使用上面的示例数据,我们可以绘制出小费占总账单百分比的直方图:

fig = plt.figure() tips['tip_pct'].plot.hist(bins=50)

另一个相关的图形是密度图,它是通过计算评估数据的连续概率分布。使用plot.kde来绘制:

fig = plt.figure() tips['tip_pct'].plot.density()

使用Seaborn的distplot函数,可以同时绘制直方图和密度图:

fig = plt.figure() #创建新图 comp1 = np.random.normal(0, 1, size=200) #创建两个随机数组 comp2 = np.random.normal(10, 2, size=200) values = pd.Series(np.concatenate([comp1, comp2])) #数组拼接 sns.distplot(values, bins=100, color='k') #绘图

(四)散点图
散点图对于查看二维数组之间的关系还是很有用的。我们用本书的另一个示例数据microdata来做为例子。数据下载地址:https://github.com/wesm/pydata-book

macro = pd.read_csv('example/examples/macrodata.csv') macro

data = macro[['cpi', 'm1', 'tbilrate', 'unemp']]#取其中的4列 trans_data = np.log(data).diff().dropna() #取每一列里相邻两个素之间的差值,然后再取log trans_data

在使用regplot进行绘图,可以绘制散点图以及拟合回归线

fig = plt.figure() sns.regplot('m1', 'unemp', data=trans_data)  plt.title('Changes in log %s versus log %s' % ('m1', 'unemp'))

seaborn还有一个方便的配对图函数pairplot,它支持沿对角线放置每个变量的直方图或密度图:

sns.pairplot(trans_data, diag_kind='kde', plot_kws={'alpha': 0.2})

 

(五)网格图和分类数据
如果我们的数据有额外的分组维度,该如何展示呢?可以使用seaborn的内置函数factorplot来画图。比如还是上面的tips示例数据,我们要把是否是smoker分成两个维度来展示:

#需要注意的是,在python3.7里,factorplot函数被替换成了catplot sns.catplot(x='day', y='tip_pct', hue='time', col='smoker',     kind='bar', data=tips[tips.tip_pct < 1])

根据上面的time的值,我们可以把上面的两幅图拆分成4幅图:

sns.factorplot(x='day', y='tip_pct', row='time',     col='smoker',     kind='bar', data=tips[tips.tip_pct < 1])

另外,seaborn也可以画箱图:

sns.factorplot(x='tip_pct', y='day', kind='box',     data=tips[tips.tip_pct < 0.5])

以上是关于seaborn画图的简要介绍,如果想了解更多可以去seaborn的官网,网站做的也是很清爽的。https://seaborn.pydata.org/

今天的文章 python可视化:Plotting with pandas and seaborn分享到此就结束了,感谢您的阅读。
编程小号
上一篇 2025-01-06 12:27
下一篇 2025-01-06 12:21

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/103428.html