前言:Python主要有Matplotlib、Seaborn和Bokeh三个库进行可视化,一个比一个高级,其中Bokeh可以添加tabs、tools、slider实现交互。
本文讲Matplotlib,由于mat是基础绘图,它在高级绘图中也有使用,故此篇不会太长。大家访问他们的官网,查看参数、学习例图制作;同样,也可以与通义等联网模型进行交流学习。
此外,老早之前写的两篇基础性文章被自动vip了,现在已重新设置为免费,大家可以查看:
准备工作:
import matplotlib.pyplot as plt #导入函数库
import seaborn as sns
import pandas as pd
import numpy as np
一个小妙招:重新设置工作路径,导出图片时可以免去输入路径之繁琐!
import os
os.getcwd() #获取
os.chdir("D:\PY3.8\PythonDA\pre") #创建工作目录
os.getcwd()
导入数据,并查看数据基本情况
data= pd.read_csv('D:\PY3.8\PythonDA\source\code\Chapter05\HR_comma_sep.csv')
data.head()
data.shape
一、Matplotlib
1. 散点图与气泡图
【散点图:scatter】
#【散点图:scatter】
x_hrs = data['average_montly_hours'][0:5]
y_level=data['satisfaction_level'][0:5]
plt.scatter(x_hrs,y_level,c='r',alpha=0.5)
plt.rcParams['font.family'] = 'Microsoft YaHei'
#import matplotlib 后选择个支持中文的字体
plt.title('满意度与工作时间')
plt.xlabel('工作时间')
plt.ylabel('满意度')
plt.savefig('mat_sc')
【气泡图:引入s参数】
#【气泡图:scatter() s】
x_hrs = data['average_montly_hours'][0:5]
y_level=data['satisfaction_level'][0:5]
plt.scatter(x_hrs,y_level,c=range(5),alpha=0.5,s=200*y_level)
#通过s=200*y_level,显示他们的相对大小
plt.rcParams['font.family'] = 'Microsoft YaHei'
plt.title('满意度与工作时间')
plt.xlabel('工作时间')
plt.ylabel('满意度')
plt.savefig('mat_sc_bubble')
2. 柱状图与直方图
两者区别:barchart展现两个变量,histchart展现单个变量(连续变量设置bins可以离散化)
我们引入subplots将他们绘制在一起
#【bar&hist】
fig,(ax1,ax2)=plt.subplots(1,2)
ax1.hist(data['salary'])
ax1.set(xlabel='salary',title='hist')
high_sm,low_sm,medium_sm,=data.groupby('salary')['satisfaction_level'].mean() #求平均数
#通过data.groupby('salary')['satisfaction_level'].mean() ,查看返回顺序
ax2.bar(['low','mediun','high'],[high_sm,low_sm,medium_sm])
ax2.set(xlabel='salary',title='bar')
plt.savefig('hist_bar')
哦这里还有个关于分组求平均数的小插曲,请看我的另一篇:Python谜之BUG论:5.1更新:groupby()求平均报错,近来最奇怪的bug!
结果:
3. 饼图【重要】
这一节包含了调色的详细解释,饼图参数讲解也很详细,很重要
简单饼图:
#【饼图pie】
pie_name=np.arange(1,6)
plt.pie(x_hrs,labels=pie_name,startangle=90,counterclock=False,autopct='%1.2f%%')
#startangle=90使第一部分是垂直的,counterclock=False控制方向
#autopct='%1.2f%%'显示具体数值
plt.title('饼状图')
plt.savefig('pie')
调色,突出某一部分:
#虽然有颜色,但丑得一言难尽
fig,(pie1,pie2)=plt.subplots(1,2,figsize=(10,5))
#figsize=(10,5) 设置窗口大小
pie1.pie(x_hrs,labels=pie_name,startangle=90,counterclock=False,autopct='%1.2f%%',colors=sns.color_palette("pastel"))
#通过sns.color_palette取色,颜色条参见:https://seaborn.pydata.org/tutorial/color_palettes.html
#注意sns是seaborn,所以你需要先import
#颜色也可以通过plt.colormaps['']来提取,但是需要手动1234指定,不太方便
#代码:cmap=plt.colormaps['pastel'] 参数设定:colors=cmap[1,2,3,4,5],
#mat颜色调参见:https://matplotlib.org/stable/gallery/color/colormap_reference.html
pie1.set(title='颜色美丽的饼状图')
pie2.pie(x_hrs,labels=pie_name,startangle=90,counterclock=False,autopct='%1.2f%%',colors=sns.color_palette("pastel"),
explode=(0.1,0,0,0,0))#设置每一块的离心距离
pie2.set(title='设置explode参数后')
plt.savefig('pie_double')
二、直接用pandas绘图
关于pandas的解释:
#【用pandas绘图】
df = pd.concat([data.average_montly_hours[0:10], data.satisfaction_level[0:10]], axis=1)
#利用数据现有数据手搓个小数据的数据集
df.plot('average_montly_hours','satisfaction_level',marker='o')
#plot默认为折线图,所以可以省略
plt.savefig('pd_line')
至于boxplot,到seaborn画