Lynda: Pandas Essential Training chap05 plot...


主要介绍pandas中两个数据类型DataFrame和Series,所进行的绘图操作。

# 包和数据的导入
import matplotlib
import matplotlib.pyplot as plt
import pandas as pd
%matplotlib inline
oly = pd.read_csv("E:\\2018年秋\\Ex_Files_Pandas_EssT\\ExerciseFiles\\data\\olympics.csv", engine = "python",skiprows = 4,encoding = "utf_16")

Series

折线图

折线图可以反映出随序列的变化趋势,经常用于时序数据比如股票价格。
Series.plot.line()
Series.plot(kind = ‘line’)
Series.plot()
都可以实现折线图的操作,第二种方法和第三种方法其实是相同的,因为参数kind的默认值为’line’。

s = oly[oly.NOC=="CHN"].groupby('Edition').size()
# 生成序列,序列值表示 中国队在历届奥林匹克运动会上取得的奖牌数量
s.plot.line()
s.plot(kind = 'line')
s.plot()
# 调用这三种均可以生成折线图

条形图

条形图反映分类变量的情况。
Series.plot.bar()
Series.plot(kind = ‘bar’)

oly[(oly.Edition == 2008) & (oly.NOC == "CHN")].Gender.value_counts().plot(kind = "bar");
oly[(oly.Edition == 2008) & (oly.NOC == "CHN")].Gender.value_counts().plot.bar()
# 中国队2008年 男运动员和女运动员的奖牌数的条形图

饼状图

饼状图反映占比情况。
Series.plot.pie()
Series.plot(kind = ‘pie’)

oly[oly.Edition==2008].groupby('NOC').size().sort_values()[:5].plot.(kind = 'pie')
oly[oly.Edition==2008].groupby('NOC').size().sort_values()[:5].plot.pie()
# 2008年运动会,奖牌总数前5名,所获得的奖牌分布。

柱状图

柱状图展示频率分布情况。
Series.plot.hist()
Series.plot(kind = ‘hist’)
多重参数
Series.hist(by=None, ax=None, grid=True, xlabelsize=None, xrot=None, ylabelsize=None, yrot=None, figsize=None, bins=10, **kwds)
主要参数是
bins:表示分组的数目,
histtype = ‘step’ 表示没有颜色填充
density = False 默认表示绘制频率分布直方图

oly[(oly.NOC =="USA")].groupby(['NOC','Edition']).size().plot.hist()
oly[(oly.NOC =="USA")].groupby(['NOC','Edition']).size().plot(kind = 'hist')
# 美国历届运动会奖牌(不是一个很好的例子)

柱状图(histogram)与条形图(bar chart)的区别:

  • histogram 用来呈现变量的分布,bar chart用来比较分类变量的统计
  • histogram 将数据按照一定的区间分组,而 bar chart将数据分类 bins 可以用来设置分组数
  • histogram 直接就是数据列 比如 一个班级的学生身高
  • bar chart 是数据加标签 一班、二班、三班每个人的平均身高
  • 在图形上,histogram是连在一起的 bar chart是分开的。

箱线图

箱线图主要用于异常值(离群点)分析。
Series.plot.box()
Series.plot(kind = ‘box’)
箱线图的意思解读:箱子上下边缘为序列数据的上下四分位数,
最下面的横线为 min = Q1 - 1.5IQR;最上面的横线是 max = Q3 + 1.5IQR IQR表示中间四分位数极差

oly[(oly.NOC =="USA")].groupby(['NOC','Edition']).size().plot.box()
oly[(oly.NOC =="USA")].groupby(['NOC','Edition']).size().plot(kind = 'box')

DataFrame

主要参考:pandas doc 中的 visualization 部分
DataFrame的操作基本的语法是DataFrame.plot.

折线图

DataFrame.plot(kind = ‘line’)
直接绘制多条折线,对应不同的变量。多个变量分享同一个X轴,X轴按照index排序。
DataFrame.plot(x = ‘columnName’, y = ‘columnName’) 可以指定X轴和Y轴的对应变量。

除了折线图之外,其他图的绘制最好是通过 DataFrame.plot.kindName()来进行,这样可以方便查看参数。

条形图

DataFrame.plot.bar(stacked = FALSE)
类似折线图,这里也对列变量进行分类,用不同的颜色进行区分。条形图还具有stacked这个参数,这个参数默认为False,但是如果置为True,那么可以对不同的列变量堆叠放置。
另外把bar改成barh则横向放置条形的结果。

柱状图

调用有两种形式:DataFrame.plot.hist()/DataFrame.plot(kind = ‘hist’) 以及 DataFrame.hist()
前者调用的结果是把不同的变量区分颜色放在一张表上,而后者是把不同的变量分开绘制在不同的subplot上。
DataFrame.plot.hist()中的主要参数有: stacked, bins, orientation, cumulative=True
stacked类似于条状图的stacked是否对不同变量进行堆叠,
bins则是调整X轴的分段个数
orientation=‘horizontal’ 修改为横向方式
cumulative=True 将计算累积的频率。
Series.hist()中具有参数 by = otherSeries/‘columnName’ 可以按照不同的Series的值给序列分成不同的组来绘制分别的柱状图。

箱线图

DataFrame.plot.box()或者DataFrame.boxplot()
两者直接调用没有区别都是对不同的变量绘制不同的箱线图。share Y轴。
在功能上DataFrame.boxplot()有by这个参数,可以绘制不同列在不同的subplot上并且按照by=‘columnName’ 这个变量分组,绘制多组箱线图。对于groupby的类型,也可以调用boxplot()。

Area

DataFrame.plot.area()
将不同变量标记为不同颜色,画出堆叠的面积图。
stacked = True 这个是默认值,如果置为False,那么颜色变为半透明。

散点图

DataFrame.plot.scatter(x= ‘columnNameX’, y=‘columnNameY’)
绘制scatter应当制定X和Y。
两个值得注意的参数是 c 颜色以及 s 点大小。这些可以指定为序列。

饼状图

DataFrame.plot.pie()
需要传入一个列变量名,这样会生成一个饼状图。否则应该传入subplot = True。这样针对不同的变量会绘制不同的饼状图。

猜你喜欢

转载自blog.csdn.net/Minervar/article/details/84254591