内容主要介绍了python模块matplotlib即seaborn数据可视化
matplotlib模块通过import matplotlib.pyplot as plt
生成图形,如生成图形没展示,可调用plt.show()
方法展示图形;
对于颜色属性设置,既可以使用十六进制颜色表达(#7777aa'
),也可以使用颜色名称,比如绿色:green
,红色:red
,黄色:yellow
图形中如果涉及中文及数字中的负号,需要设置rcParams属性
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] # 如果有中文设置字体格式为微软雅黑
plt.rcParams['axes.unicode_minus'] = False # 坐标轴如果有负数,通过该参数设置
主要应用于离散变量,展示各个成分结构占比
matplotlib绘制饼图默认如果是椭圆形,如展示位正圆形,可通过pyplot模块中的axes设置为正圆形:plt.axes(aspect='equal
)
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)
参数说明:
colors=['#999ff','#7777aa']
autopct='%.1f%%'
样例:
import matplotlib.pyplot as plt
plt.title('渠道销售占比')
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] # 如果有中文设置字体格式为微软雅黑
plt.pie(x=[10,20,30],labels=['渠道一','渠道二','渠道三'],colors=['green','red','yellow'],autopct='%.1f%%')
pandas模块可以绘制常见图形,诸如:折线图、条形图、直方图、箱线图、核密度图等;
可以通过kind
参数设置图形类型,比如饼图(pie):kind='pie'
Series.plot(kind='line', ax=None, figsize=None, use_index=True, title=None,
grid=None, legend=False, style=None, logx=False, logy=False,
loglog=False, xticks=None, yticks=None, xlim=None, ylim=None,
rot=None, fontsize=None, colormap=None, table=False, yerr=None,
xerr=None, label=None, secondary_y=False, **kwds)
参数说明:
kind:指定一个字符串值,用于绘制图形的类型,默认为折线图line。还可以绘制垂直条形图bar、水平条形图hbar、直方图hist、箱线图box、核密度图kde、面积图area和饼图pie
ax:控制当前子图在组图中的位置例如,在一个2×2的图形矩阵中,通过该参数控制当前图形在矩阵中的位置
figsize:控制图形的宽度和高度,以元组形式传递,即(width,hright)
use_index:bool类型的参数,是否将序列的行索引用作x轴的刻度,默认为True
title:用以添加图形的标题
grid:bool类型的参数,是否给图形添加网格线,默认为False
legend:bool类型的参数,是否添加子图的图例,默认为False
style:如果kind为line,该参数可以控制折线图的线条类型
logx:bool类型的参数,是否对x轴做对数变换,默认为False
logy:bool类型的参数,是否对y轴做对数变换,默认为False
loglog:bool类型的参数,是否同时对x轴和y轴做对数变换,默认为False
xticks:用于设置x轴的刻度值
yticks:用于设置y轴的刻度值
xlim:以元组或列表的形式,设置x轴的取值范围,如(0,3)表示x轴落在0~3的范围之内
ylim:以元组或列表的形式,设置y轴的取值范围
rot:接受一个整数值,用于旋转刻度值的角度
fontsize:接受一个整数,用于控制x轴与y轴刻度值的字体大小
colormap:接受一个表示颜色含义的字符串,或者Python的色彩映射对象,该参数用于设置图形的区域颜色
table:该参数如果为True,表示在绘制图形的基础上再添加数据表;如果传递的是序列或数据框,则根据数据添加数据表
yerr:如果kind为bar或hbar,该参数表示在条形图的基础上添加误差棒
xerr:含义同yerr参数
label:用于添加图形的标签
secondary_y:bool类型的参数,是否添加第二个y轴,默认为False
**kwds:关键字参数,该参数可以根据不同的kind值,为图形添加更多的修饰性参数(依赖于pyplot中的绘图函数)
样例:
df = pd.DataFrame([['渠道一',10],['渠道二',20],['渠道三',30]],columns=['渠道','销售额'])
df['销售额'].plot(kind='pie',labels=df['渠道'],title='各渠道销售占比',autopct='%.1f%%')
同饼图一样,适用于分类型数据
bar(left, height, width=0.8, bottom=None, color=None, edgecolor=None,
linewidth=None, tick_label=None, xerr=None, yerr=None,
label = None, ecolor=None, align, log=False, **kwargs)
其中barh
表示横向条形图
参数说明:
样例:
df = pd.DataFrame([['渠道一',10],['渠道二',20],['渠道三',30]],columns=['渠道','销售额'])
plt.ylabel('销售额')
plt.style.use('seaborn-paper') # 绘图风格,具体style值,可通过plt.style.available属性查看,有的值可能用不了
plt.title('各渠道销售情况')
plt.bar(x=range(df.shape[0]),height=df['销售额'],tick_label=df['渠道'])
for x,y in enumerate(df['销售额']):
plt.text(x,y+0.2,str(y),ha='center') # 添加y轴标签
df = pd.DataFrame([['渠道一',10],['渠道二',20],['渠道三',30]],columns=['渠道','销售额'])
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.ylabel('销售额')
plt.style.use('seaborn-paper') # 绘图风格,具体style值,可通过plt.style.available属性查看
plt.title('各渠道销售情况')
plt.barh(y=range(df.shape[0]),width=df['销售额'],tick_label=df['渠道'])
for x,y in enumerate(df['销售额']):
plt.text(y+1,x,str(y),ha='center') # 添加y轴标签
plt.show()
相较以上单维度条形图,还可以在同一条形里绘制不同维度对比,同一柱子不同类别设置不同bottom参数即可
df = pd.DataFrame([['深圳',10,20],['北京',35,30],['广州',30,40]],columns=['地区','A部门销售额','B部门销售额'])
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
# 绘制A部门销售
plt.bar(x=range(df.shape[0]),tick_label=df['地区'],height=df['A部门销售额'],color='green')
# 绘制B部门销售
plt.bar(x=range(df.shape[0]),tick_label=df['地区'],height=df['B部门销售额'],color='red',bottom=df['A部门销售额'])
# 如果有第三个部门,bottom=df['A部门销售额'] + df['C部门销售额']
# 显示y轴标签
plt.ylabel('销售额')
# 添加图图形标题
plt.title('各地区销售情况')
# 显示图例
plt.legend(['A部门销售额','B部门销售额'])
plt.show()
这块在绘制其他图形时,只需要将x轴的位置往右平移width宽度就好
样例:
df = pd.DataFrame([['深圳',10,20],['北京',35,30],['广州',30,40]],columns=['地区','A部门销售额','B部门销售额'])
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
# 绘制A部门销售
plt.bar(x=range(df.shape[0]),tick_label=df['地区'],height=df['A部门销售额'],color='green',width=0.2)
# 绘制B部门销售
plt.bar(x=[x+0.2 for x in range(df.shape[0])],tick_label=df['地区'],height=df['B部门销售额'],color='red',width=0.2)
plt.ylabel('销售额')
# 添加图图形标题
plt.title('各地区销售情况')
# 显示图例
plt.legend(['A部门销售额','B部门销售额'])
# 添加x轴标签,width=0.2,这里设置+0.1两根柱子居中
plt.xticks([x+0.1 for x in range(df.shape[0])],df['地区'])
plt.show()
如果添加刻度标签,通过plt.text
参数设置即可,同上;
样例:
df = pd.DataFrame([['渠道一',10],['渠道二',20],['渠道三',30]],columns=['渠道','销售额'])
df['销售额'].plot(kind='bar',width=0.2,title='销售额',color='green')
plt.ylabel('销售额')
plt.title('各渠道销售情况')
plt.xticks(range(df.shape[0]),df['渠道'])
for x,y in enumerate(df['销售额']):
plt.text(x,y+0.4,str(y),ha='center') # 添加y轴标签
df = pd.DataFrame([['深圳',10,20],['北京',35,30],['广州',30,40]],columns=['地区','A部门销售额','B部门销售额'])
df.plot(x='地区',
y=['A部门销售额','B部门销售额'],
kind='bar',
color=['green','red'],
width=0.4,
title='各地区销售额')
plt.ylabel('销售额')
plt.xlabel('')
plt.show()
import seaborn as sns
sns.barplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None,
ci=95, n_boot=1000, orient=None, color=None, palette=None,
saturation=0.75, errcolor='.26', errwidth=None, dodge=True, ax=None, **kwargs)
参数说明
样例:
df = pd.DataFrame([['渠道一',10],['渠道二',20],['渠道三',30]],columns=['渠道','销售额'])
sns.barplot(y='渠道',x='销售额',data=df,color='steelblue',orient='horizontal')
plt.xlabel('销售额')
plt.ylabel('')
plt.title('各渠道销售')
for y,x in enumerate(df['销售额']):
plt.text(x,y,str(x),va='center')
plt.show()
主要应用于连续型变量,查看变量分布情况
plt.hist(x, bins=10, range=None, normed=False,
weights=None, cumulative=False, bottom=None,
histtype='bar', align='mid', orientation='vertical',
rwidth=None, log=False, color=None,
label=None, stacked=False)
参数说明:
sns.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)
参数说明:
主要用于查看连续型变量离散情况,比如找出离异值
plt.boxplot(x, notch=None, sym=None, vert=None,
whis=None, positions=None, widths=None,
patch_artist=None, meanline=None, showmeans=None,
showcaps=None, showbox=None, showfliers=None,
boxprops=None, labels=None, flierprops=None,
medianprops=None, meanprops=None,
capprops=None, whiskerprops=None)
参数说明:
sns.boxplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None,
orient=None, color=None, palette=None, saturation=0.75, width=0.8,
dodge=True, fliersize=5, linewidth=None, whis=1.5, notch=False, ax=None, **kwargs)
参数说明:
sns.violinplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None,
bw='scott', cut=2, scale='area', scale_hue=True, gridsize=100,
width=0.8, inner='box', split=False, dodge=True, orient=None,
linewidth=None, color=None, palette=None, saturation=0.75, ax=None)
相关参数:
一般用于反应连续型变量趋势
plt.plot(x, y, linestyle, linewidth, color, marker,
markersize, markeredgecolor, markerfactcolor,
markeredgewidth, label, alpha)
参数说明:
线的类型(参数:linestyle):
点的类型(参数:marker):
主要用于研究两个变量的相关关系,比如线性回归,可以先通过绘制散点图看两个变量相关情况
scatter(x, y, s=20, c=None, marker='o', cmap=None, norm=None, vmin=None,
vmax=None, alpha=None, linewidths=None, edgecolors=None)
参数说明:
df.plot(kind='scatter',x='x变量的column名称',y='y的column名称',title='标题')
plt.xlabel('x轴标签')
plt.ylabel('y轴标签')
plt.show() # 图展示
lmplot(x, y, data, hue=None, col=None, row=None, palette=None, col_wrap=None,
size=5, aspect=1, markers='o', sharex=True, sharey=True, hue_order=None,
col_order=None, row_order=None, legend=True, legend_out=True, scatter=True,
fit_reg=True, ci=95, n_boot=1000, order=1, logistic=False, lowess=False,
robust=False, logx=False, x_partial=None, y_partial=None, truncate=False,
x_jitter=None, y_jitter=None, scatter_kws=None, line_kws=None)
参数说明:
核心参数:x,y,hue,data
相比散点图展示二维数据关系,气泡图能展示更多的信息,比如可以通过气泡大小、颜色表示某个变量亦或维度
比如查看各个城市拥挤情况,可以实现类似excel中颜色条件格式的效果,比如展示各个分组数据,值比较大的用深度颜色标记
heatmap(data, vmin=None, vmax=None, cmap=None, center=None, annot=None, fmt='.2g',
annot_kws=None, linewidths=0, linecolor='white', cbar=True, cbar_kws = None,
square=False, xticklabels='auto', yticklabels='auto', mask=None, ax=None)
参数说明:
类似于tkinter,python图形展示可以通过grid布局,函数级参数如下:
subplot2grid(shape, loc, rowspan=1, colspan=1, **kwargs)
参数说明:
其中跨行和跨列参数,表示该子图横向亦或纵向跨几个格子
上图,一个2x3=6个格子,左侧6个子图,右侧4个子图,有一个跨了两列,有一个跨了两行
import matplotlib.pyplot as plt
import seaborn as sns
pandas则使用使用Series
或DataFrame
调用plot
函数即可
声明:函数参数说明主要整理自《从零开始学python数据分析与挖掘》
该书偏向技术应用,详解了python数据处理,可视化以及机器学习,如果纯粹学习技术应用,该书值得推荐。
其他相关书籍:张杰-《Python数据可视化之美》