文章目录
前言
matplotlib是一个相当底层的工具。你可以从其基本组件中组装一个图表:数据显示(即绘图类型:线、条、框、散点图、轮廓等)、图例、标题、刻度标记和其他注释。上一节我们是使用NumPy创建的数据进行绘图,这一节我们将讲述使用pandas和seaborn进行绘图
一、使用pandas和seaborn绘图
在pandas中,我们可能有多个数据列,并且带有行和列的标签。pandas自身有很多内建方法可以简化从DataFrame和Series对象生成可视化的过程。另一个库是seaborn,它是由Michael Waskom创建的统计图形库。seaborn简化了很多常用可视化类型的生成。
导入seaborn会修改默认的matplotlib配色方案和绘图样式,这会提高图表的可读性和美观性。
1.1 折线图
Series和DataFrame都有一个plot属性,用于绘制基本的图形。默认情况下,plot()绘制的是折线图:
s = pd.Series(np.random.randn(10).cumsum(),index=np.arange(0,100,10))
s.plot()
plt.show()
Series对象的索引传入matplotlib作为绘图的x轴,你可以通过传入use_index=Flase来禁用这个功能。x轴的刻度和范围可以通过xticks和xlim选项进行调整,相应地y轴使用yticks和ylim进行调整。下表是plot全部选项的列表。
参数描述label图例标签ax绘图所用的matplotlib子图对象;如果没有传值,则使用当前活动的matplotlibstyle传给matplotlib的样式字符串,比如’ko–’alpha图片不透明度(从0到1)kind可以是’area’、’bar’、’barh’、’density’、’hist’、’kde’、’line’、’pie’logy在y轴上使用对数缩放use_index使用对象索引刻度标签rot刻度标签的旋转(0到360)xticks用于x轴刻度的值yticks用于y轴刻度的值xlimx轴范围ylimy轴范围grid展示轴网格(默认是打开的)
大部分pandas的绘图方法,接收可选的ax参数,该参数可以是一个matplotlib子图对象。这使你可以更为灵活地在网络布局中放置子图。
DataFrame的plot方法在同一个子图中将每一列绘制为不同的折线,并且自动生成图例:
df = pd.DataFrame(np.random.randn(10,4).cumsum(0),
columns=['A','B','C','D'],
index=np.arange(0,100,10))
df.plot()
plt.show()
DataFarme拥有多个选项,允许灵活地处理列。关于更多选项可以了解下表:
参数描述subplots将DataFrame的每一列绘制在独立的子图中sharex如果subplots=True,则共享相同的x轴、刻度和范围sharey如果subplots=True,则共享相同的y轴figsize用于生成图片尺寸的元组title标题字符串legend添加子图图例(默认是True)sort_columns按字母顺序绘制各列,默认情况下使用已有的列顺序
1.2 柱状图
使用 plot.bar() 和 plot.barh() 可以分别绘制垂直和水平的柱状图。在绘制柱状图时,Series或DataFrame的索引将会被用作x轴刻度(bar)或y轴(barh):
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
fig,axes = plt.subplots(2,1)
data = pd.Series(np.random.rand(16),index=list('abcdefghijklmnop'))
data.plot.bar(ax=axes[0],color='k',alpha=0.7)
data.plot.barh(ax=axes[1],color='k',alpha=0.7)
plt.show()
选项color=’k’和alpha=0.7将柱子的颜色设置为黑色,并将图像的填充色设置为部分透明。
在DataFrame中,柱状图将每一行中的值分组到并排的柱子中的一组:
fig,axes = plt.subplots(2,1)
data = pd.DataFrame(np.random.rand(6,4),
index=['one','two','three','four','five','six'],
columns=pd.Index(['A','B','C','D'],name='Genus'))
print(data)
data.plot.bar()
plt.show()
size 1 2 3 4 5 6
day
Fri 1 16 1 1 0 0
Sat 2 53 18 13 1 0
Sun 0 39 15 18 3 1
Thur 1 48 4 5 1 3
size 2 3 4 5
day
Fri 0.888889 0.055556 0.055556 0.000000
Sat 0.623529 0.211765 0.152941 0.011765
Sun 0.520000 0.200000 0.240000 0.040000
Thur 0.827586 0.068966 0.086207 0.017241
你可以看到本数据集中的派对数量在周末会增加。
对于在绘图前需要聚合或汇总的数据,使用seaborn包会使工作更为简单。现在让我们看下使用seaborn进行按星期日期计算小费百分比:
tips = pd.read_csv('D:\浏览器下载\pydata-book-2nd-edition\pydata-book-2nd-edition\examples/tips.csv')
tips['tip_pct'] = tips['tip']/(tips['total_bill']-tips['tip'])
print(tips.head())
sns.barplot(x='tip_pct',y='day',data=tips,orient='h')
plt.show()
cpi m1 tbilrate unemp
198 -0.007904 0.045361 -0.396881 0.105361
199 -0.021979 0.066753 -2.277267 0.139762
200 0.002340 0.010286 0.606136 0.160343
201 0.008419 0.037461 -0.200671 0.127339
202 0.008894 0.012202 -0.405465 0.042560
我们使用了seaborn的 regplot方法,该方法可以绘制散点图,并拟合出一条线性回归线:
在探索性数据分析中,能够查看一组变量中的所有散点图是有帮助的,这被称为成对图或散点图矩阵。从头开始绘制这样一个图是有点工作量的,所以seaborn有一个方便的 pairplot函数,它支持在对角线上放置每个变量的直方图或密度估计图:
sns.pairplot(trans_data,diag_kind='kde',plot_kws={'alpha':0.2})
你可能会注意到ploy_ksw参数,这个参数使我们能够将配置选项传递给非对角元素上的各个绘图调用。
1.5 分面网格和分类数据
如果数据集有额外的分组维度,我们可以使用分面网格是利用多种分组变量对数据进行可视化的方式。seaborn拥有一个有效的内建函数 factorplot(注意seaborn的版本,在seaborn0.12中没有这个方法),它可以简化多种分面绘图:
sns.factorplot(x='day',y='tip_pct',hue='time',col='smoker',kind='bar',data=tips[tips.tip_pct<1])
其中hue为分类参数,col为分表参数,kind为图表选择。
除了根据’time’在一面内将不同的柱分组为不同的颜色,我们还可以通过每个时间值添加一行来扩展网络:
row和col参数的功能相同
sns.factorplot(x='day',y='tip_pct',row='time',col='smoker',kind='bar',data=tips[tips.tip_pct<1])
factorplot支持其他可能有用的图类型,具体取决于你要显示的内容。例如,箱形图(显示中位值、四分位数和异常值):
sns.factorplot(y='day',x='tip_pct',kind='box',data=tips[tips.tip_pct<0.5])
总结
以上就是今天要讲的内容,本文仅仅简单介绍了如何绘制折线图、柱状图、直方图和密度图、散点图或点图、分面网格和分类数据。目的是让你使用pandas、matplotlib和seaborn入门一些基础的数据可视化知识,如果直观地传达数据分析结果在你的工作中非常重要。
Original: https://blog.csdn.net/lezerodead/article/details/127807106
Author: PhoenixPeng-gxu
Title: matplotlib绘图与可视化2
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/769852/
转载文章受原作者版权保护。转载请注明原作者出处!