第二节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.36123910   -0.97300920   -0.39978330   -0.37572340    0.30089150   -1.18107960   -1.15415870   -1.20358980   -0.69719190   -0.255197dtype: 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.191194  0.124733  0.149630 -0.847222
10  0.315815 -0.098679 -0.745160 -1.272139
20 -0.221957 -0.235838 -0.177400 -0.785572
30  0.668440 -0.531222 -0.097362 -0.064981
40  0.984189 -1.905647 -0.124803  1.642922
50  1.850171 -2.611311 -0.531080  3.320458
60  2.005584 -2.622598  0.514610  5.187108
70  1.649588 -1.959046  0.859002  5.606145
80  2.092307 -1.198536  1.574532  5.193929
90  0.608200 -0.323660  1.634932  3.946735
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.458095
b    0.652800
c    0.735251
d    0.597668
e    0.331629
f    0.306810
g    0.804735
h    0.687446
i    0.803865
j    0.363527
k    0.528832
l    0.521994
m    0.127526
n    0.525101
o    0.208584
p    0.518751
dtype: float64

In [7]: data = pd.Series(np.random.rand(16), index=list('abcdefghijklmnop'))data
Out[7]:
a    0.153508
b    0.172415
c    0.620039
d    0.859878
e    0.230167
f    0.082225
g    0.211878
h    0.933883
i    0.735628
j    0.222665
k    0.848021
l    0.784030
m    0.617523
n    0.226133
o    0.070989
p    0.113303
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)

下面用本书附带的示例数据来作图,示例数据下载地址:
https://github.com/wesm/pydata-book/tree/2nd-edition/examples

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相关推荐

  1. [转载] python可视化分析(matplotlib、seaborn、ggplot2)

    参考链接: Python Matplotlib数据可视化2 python可视化分析总结(matplotlib.seaborn.ggplot) 一.matplotlib库1.基本绘图命令3.图形参数设置 ...

  2. python可视化分析(matplotlib、seaborn、ggplot2)

    python可视化分析总结(matplotlib.seaborn.ggplot) 一.matplotlib库 1.基本绘图命令 3.图形参数设置 4.特殊统计图的绘制 4.1 数学函数图 4.2 气泡 ...

  3. python三维数据转换成二维_5大Python可视化库到底选哪个好?一篇文章搞定从选库到教学...

    最近和鲸社区的大佬们,竟不约而同地写起了可视化库的教程,开始了掰头 ※完整教程列表在文末附录 虽然对于我们这种吃瓜群众来说是件好事,但 大概大佬的快乐往往就是那么的朴实无华且枯燥吧.害,管他呢,赶紧拿 ...

  4. python 可视化_python可视化基础

    常用的python可视化工具包是matplotlib,seaborn是在matplotlib基础上做的进一步封装.入坑python可视化,对有些人来说如同望山跑死马,心气上早输了一节.其实学习一门新知 ...

  5. python拿什么做可视化界面好_5大Python可视化库到底选哪个好?一篇文章搞定从选库到教学...

    最近和鲸社区的大佬们,不约而同地写起了可视化库的教程 虽然对于我们这种吃瓜群众来说是件好事,但 大概大佬的快乐往往就是那么的朴实无华且枯燥吧.害,管他呢,赶紧拿出来给大家瞅瞅. 今天提及的5个Pyth ...

  6. python可视化数据分析-python做可视化数据分析,究竟怎么样?

    Python做可视化数据分析也是可以的,只是对比起来专业的可视化工具有些得不应手,做出来的图可能不太美观.Python用来处理数据,用来分析绝对可以.我觉得想要可视化可以使用专门的可视化工具. 不过, ...

  7. Python可视化:Seaborn(二)

    本文由 保一雄@科赛网 数据分析师 原创. Seaborn是一个很棒的可视化库,尤其是当数据维度很大时,它可以让我们用最少的代码去绘制一些描述性统计的图,便于找寻各维度变量之间的特征. 继上篇Pyth ...

  8. 数据可视化干货:使用pandas和seaborn制作炫酷图表(附代码)

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 吾日三省吾身:为人谋而不忠乎?与朋 ...

  9. 送书 | 数据可视化干货:使用pandas和seaborn制作炫酷图表(附代码)

    导读:我们介绍过用matplotlib制作图表的一些tips,感兴趣的同学可以戳→纯干货:手把手教你用Python做数据可视化(附代码).matplotlib是一个相当底层的工具.你可以从其基本组件中 ...

  10. python可视化模块pandas,python数据可视化软件

    Python中数据可视化经典库有哪些? Python有很多经典的数据可视化库,比较经典的数据可视化库有下面几个.matplotlib是Python编程语言及其数值数学扩展包 NumPy 的可视化操作界 ...

最新文章

  1. mysql 包括冒号_hibernate中SQL包含冒号
  2. MATLAB-矩阵相关计算(1)
  3. nRF52832 中断相关
  4. MySQL里面json_MySQL中的JSON
  5. 简单的python画图代码_python opencv如何实现简易画图板 python opencv实现简易画图板代码...
  6. 技术人必看:15张图对比高效与瞎忙的区别!
  7. 674. zui长连续递增序列(JavaScript)
  8. python面试题及答案 2019-这些2019年常考的Python面试题你都能答上来吗?
  9. hdu 1506:Largest Rectangle in a Histogram 【单调栈】
  10. SQL练习题,50道
  11. 什么是前端总线,后端总线,内部总线、系统总线,外部总线,地址总线,数据总线,控制总线
  12. html背景图片纵向拉伸,html网页背景图片拉伸 关于html背景图片往下拉伸问题
  13. Jetson TX2之ALSA学习
  14. 抖音怎么发起挑战 发起挑战怎么玩
  15. 基于bind搭建智能dns
  16. my soft_macsoft
  17. springboot王道考研课程资料购物网站
  18. (3)网页视频获取下载案例3
  19. 菜狗的reverse学习——攻防世界xxxorrr
  20. PyQt5 基本教程

热门文章

  1. 创奇文书档案管理软件 V8.1
  2. 从低位开始取出长整型变量s中奇数位上的数,依次构成一个新数放在t中
  3. C语言中的文件操作(二)
  4. 数据结构课程设计——电话号码查询系统(C语言)
  5. Android自学笔记:Tab控件源码剖析
  6. 2021年焊工(初级)试题及解析及焊工(初级)实操考试视频
  7. PS3主机今日发售 附官方问答
  8. 国内主流虚拟化厂商之间比较
  9. 丝般顺滑!全新垃圾回收器 ZGC 初体验 | 龙蜥技术
  10. 解决.NET Runtime Optimization Service(mscorsvw.exe)进程占用CPU过高的问题