准备工作
导入要使用的库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sb #sns也可以
%matplotlib inline
柱状图(条形图)
sb.countplot(data = 此处写数据df,
x(或者是y) = 列的名字,
color = 一个三项元组(由来可由下面来得到), order = 排序后的列表(可通过pd.series.value_counts()方法得到排序结果),
hue = x如果设置的是大分类,hue就是设置的小分类,
palette=颜色格式,
以及其他参数最好自己尝试然后记录一下…………);
#难得的有个分号在后面,并非必须,有分号就是只显示图,干净利落一点
(1)sb.color_palette
#会用来返回当前图表中所使用到的颜色,比如第一个柱子的颜色,是由一个三项的元组组成(为什么三项,画图工具调色里也有,红绿蓝配比)
Series.value_counts(normalize=False, sort=True, ascending=False, bins=None, dropna=True)
#可以通过pd Series方法来返回包含唯一值计数的对象。结果对象将按降序排列,以便第一个元素是最常出现的元素。 默认排除NA值。具体参数含义可以参考文档
(2)matplotlib xticks yticks
#在matplotlib中ticks表示的是刻度,而刻度有两层意思,一个是刻标(locs),一个是刻度标签(tick labels)。在作图时,x轴y轴都是连续的,所以刻标可以随意指定,就是在连续变量上找寻位置,而刻度标签则可以对应替换
xticks()返回了两个对象,一个是刻标(locs),另一个是刻度标签
locs, labels = xticks()
plt.xticks(有两个重要的可选,一个是刻度列表,一个是每一个刻度显示的标签,剩下都是关键字参数,比如rotation = 旋转多少度)
plt.yticks(跟xticks类似的)
# 显示x轴的刻标
xticks( arange(6) )
# 显示x轴的刻标以及对应的标签
xticks( arange(5), ('Tom', 'Dick', 'Harry', 'Sally', 'Sue') )
(3)pandas.melt(frame, id_vars=None, value_vars=None, var_name=None, value_name='value', col_level=None)
#melt该功能描述很复杂啊,主要是选定几列作为基准行(id_vars),将另外选定的几行作为行内的属性
#举个例子
>>> import pandas as pd
>>> df = pd.DataFrame({'A': {0: 'a', 1: 'b', 2: 'c'},
... 'B': {0: 1, 1: 3, 2: 5},
... 'C': {0: 2, 1: 4, 2: 6}})
>>> df
A B C
0 a 1 2
1 b 3 4
2 c 5 6
>>> pd.melt(df, id_vars=['A'], value_vars=['B', 'C'])
A variable value
0 a B 1
1 b B 3
2 c B 5
3 a C 2
4 b C 4
5 c C 6
(4)matplotlib.pyplot.text(x, y, s, fontdict=None, withdash=False, **kwargs)
#将文本s添加到位于数据坐标中的位置x,y处的轴
#x,y是指位置,s就是要显示的text内容,剩下参数就自行研究了
#
countplot
color_palette
value_counts
matplotlib xticks yticks
pandas.melt
matplotlib.pyplot.text
matplotlib.pyplot.bar
饼图
matplotlib.pyplot.pie(x, explode=None, labels=None, colors=None,
autopct=None, pctdistance=0.6,
shadow=False, labeldistance=1.1,
startangle=None, radius=None,
counterclock=True, wedgeprops=None,
textprops=None, center=(0, 0), frame=False,
rotatelabels=False, hold=None, data=None)
制作一个数组x的饼图。 每个部分的分数面积由x / sum(x)给出。 如果sum(x)<1,那么x的值直接给出分数区域,并且数组不会被归一化。 结果派将有一个大小为1 - sum(x)的空部分。
各个部分是逆时针绘制的,默认从x轴开始。
必选参数x是Series数据,labels可自定义,startangle决定了起始的角度默认是x轴,counterclock是说逆时针还是顺时针。
其他具体参数含义需参考api文档。
直方图
matplotlib.pyplot.hist(x, bins=None, range=None, density=None,
weights=None, cumulative=False, bottom=None, histtype='bar',
align='mid', orientation='vertical', rwidth=None, log=False,
color=None, label=None, stacked=False, normed=None, hold=None,
data=None, **kwargs)
主要作用是计算并绘制x的直方图。如果输入包含多个数据,
则返回值是一个元组(n,bin,patches)或([ n0,n1,...],bin,[ patches0,patches1,...])。
x :唯一一个必选参数,表示输入的数据,np的array或者pd的series,dataframe都可以
bin : 整数或序列(列表或者array等等都可以),是可选的
整数的话,就是整数个柱子
序列的话,就是给出的序列作为柱子的边缘,
比如[1,2,3,4],那么第一个柱子 (包括1,但不包括2),依次类推,共有3个,分别是,[1, 2)[2, 3)[3, 4],序列呢,就是可以设置的不那么平均了。
rwidth: 柱体间隔,间隔空隙暗示值是离散的
range:元组或None
决定了bin的上限和下限。较低和较高的异常值将被忽略。(x.min(), x.max())
另外,如果设置了bins为一个序列的话,那么range会无效注意下。
density:布尔型
如果设置为True,会让返回的n的值相加为1。决定的是每个格子频率占总数的百分比。
cumulative:布尔型
如果设置为True,图表就变成了累积型,返回的n也是变成累加的值,而不是原来那种只有自己的值,确切来说,是后面的一个bin是前面的bin的值加上自己的值。
weights:n或者是序列
就像名字一样,权重,是一组与x形状相同的权重,当然,如果density设为True,weights不生效
还有很多其他参数,不再描述,可以看官方文档学习,另外,要多练习哦
seaborn.distplot(a, bins=None, hist=True, kde=True, rug=False, fit=None,
hist_kws=None, kde_kws=None, rug_kws=None, fit_kws=None, color=None,
vertical=False, norm_hist=False, axlabel=None, label=None, ax=None)
a:必须为Series, 1d-array, 或者 list.不像matplotlib.pyplot.hist那样,第一个数据可以是dataframe
hist=True, kde=True,特别注意下,这两个参数默认为True
hist为True的情况下会有矩阵的柱形图
kde是指Kernel Density Estimation核密度估计,通俗点说,所谓核密度估计,就是采用平滑的峰值函数(“核”)来拟合观察到的数据点,从而对真实的概率分布曲线进行模拟。所以,True是会将数据绘制成曲线,曲线下的面积为1。
rug是指轴须图,每根须都对应着一个数据,数据密了自然就粗了,一般和其他一些统计图形(比方说密度曲线之类的)结合着用,轴须图可以更好的帮助了解原始数据的信息(位置)。
如果你用不到distplot提供的这些功能,只是想看看分步,用matplotlib.pyplot.hist足以。
常用plt方法
plt.figure
matplotlib.pyplot.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True, FigureClass=<class 'matplotlib.figure.Figure'>, clear=False, **kwargs)
作用是用来创建一个新的图像实例
常用这两个:
num:类似窗体的id号,或者说窗体标题
figsize:以英寸为单位的宽高
plt.subplot
subplot(nrows, ncols, index, **kwargs)
创建一个坐标轴,按照坐标轴来填充位置,从坐标轴1号位开始沿x轴递增
plt.subplot(211)跟plt.subplot(2,1,1)是一个意思
就是说建立了一个两行一列的坐标轴,图表的位置在第一行第一列。
plt.xlim(xmin, xmax)
plt.ylim(ymin, ymax)
xlim设置坐标值的最左值和最右值
ylim设置坐标值的最上值和最下值
plt.xscale
首先如果数据近似符合分布的数据。即采用原始单位的话,看起来非常偏态:很多数据点的值很小,有一个很长的尾部,尾部数据点的值很大。但是对这些值取对数的话,数据看起来是正态分布的,此时就需要xscale了
有这几种缩放方法:
[‘linear’ | ‘log’ | ‘logit’ | ‘symlog’]
log是log10 只允许正值
linear是线性平时默认的那种
logit是0, 1
symlog是对称对数,并允许正值和负值,允许在曲线内设置一个范围在零附近线性而不用对数
plt.grid(True)
图表带网格
plt.xscale
plt.xscale log和symlog的区别
plt.xlim
plt.subplot
plt.figure