seaborn
importmatplotlib as mplimportmatplotlib.pyplot as pltimportnumpy as npimportpandas as pd#解决坐标轴刻度负号乱码
plt.rcParams['axes.unicode_minus'] =False#解决中文乱码问题
plt.rcParams['font.sans-serif'] = ['Simhei']
1、Seaborn基础
1.1 关于 matplotlib 与 seaborn
要实现复杂的数据可视化,要写大量的样板代码
Matplotlib比Pandas更早开发,要使用Matplotlib实现DataFrame的数据可视化,相对Seaborn比较麻烦
Seaborn是在Matplotlib基础上开发的一套API,为图形样式和颜色设置提供合理的选择,同时为很多常用的统计图形提供专门的高级函数调用
Pandas与DataFrame有机结合,是使用Matplotlib时很好的附加工具
1.2 风格选择
使用 seaborn 画图之前的图样:
importmatplotlib.pyplot as pltimportnumpy as npdefhehe():
plt.rcParams['font.sans-serif'] = ['Simhei'] #解决中文乱码问题
x=np.linspace(0.05,10,100)
y_01=np.cos(x)
y_02=np.sin(x)
plt.plot(x,y_01,ls="-",label=r"$\cos(x)$")
plt.plot(x,y_02,ls="-",label=r"$\sin(x)$")
plt.legend(loc="lower left",title="函数",) #或者写loc=3
plt.title("正弦函数和余弦函数的折线图");
hehe()
结果为:
seaborn 的风格,它们分别是:
darkgrid(默认)
whitegrid
dark
white
ticks
sns.set() 可以用来重置 Seaborn 默认的主题
运行下面的 sns.set() 语句之后,会将接下来运行的 Matplotlib 绘图设置成 Seaborn 默认的主题,重新运行上面的图:
importseaborn as sns
sns.set()
hehe()
结果为:
如果想改变 Seaborn 主题,可以使用以下语句:
axes_style()
set_style() 比如我们又想将默认的 darkgrid 主题改成 ticks :
sns.set_style("whitegrid")
hehe()
结果为:
1.3 自定义坐标轴
如果不想要轴脊柱(图形边框的上下左右四条轴),可以通过 sns.despine() 来移除(先画图后移除,默认移除右和上两条轴):
hehe()
sns.despine()#sns.despine(left=True, bottom=True, top=False, right=False)
结果为:
offset 参数可以设置图形距离原地的距离:
hehe()
sns.despine(offset=10); #绝对距离,以点为单位
结果为:
1.4 自定义绘图元素比例
Seaborn 有一套的参数可以控制绘图元素的比例,通过 sns.set_context() 设置,有四个预置环境,按大小从小到大排列分别为:paper < notebook < talk < poster,其中,默认是 notebook
sns.set_context("talk")
hehe()
结果为:
2、数据集分布的可视化
importnumpy as npimportpandas as pdfrom scipy importstats, integrateimportmatplotlib.pyplot as pltimportseaborn as sns
sns.set(color_codes=True)
np.random.seed(100) #随机数生成种子
2.1 单变量分布图 sns.distplot()
在 Seaborn 中,快速观察单变量分布的最方便的方法就是使用 distplot() 函数,默认会使用柱状图(histogram)来绘制
bin:直方图在横坐标的数据值范围内均等分的形成一定数量的数据段数量
hist:bool,可选,是否绘制(标准化)直方图
kde:bool,可选,是否绘制核密度估计曲线(高斯)
rug : bool, 可选,在每个观察点上的垂直小标签
x = np.random.normal(size=100)
sns.distplot(x);#如果运行代码出现报错,那么运行pip install --upgrade scipy
结果为:
x = np.random.normal(size=100)
sns.distplot(x, hist=True,bins=30,kde=False, rug=True);#kde, 是否画核密度曲线#rug,是否将数组中的数据点画出来作为坐标轴的刻度线
结果为:
2.2 二元分布图
2.2.1 散点图 sns.jointplot()
在 Seaborn 中,对于双变量分布的可视化,最简单的方法就是使用 joinplot() 函数,它能够创建一个多面板图形来展示两个变量之间的联合关系,以及每个轴上单变量的分布情况
x = np.random.rand(100)
y= np.random.rand(100) #从0到1之间,生成100个
df= pd.DataFrame({"A":x, "B":y})
sns.jointplot(x="A", y="B", data=df);
结果为:
2.2.2 Hexbin 图
对于相对较大的数据集进行绘图,使用 “hexbin” 图最好,它展示了落在六角形箱内的观测量
“hexbin” 图可以通过 matplotlib 的 plt.hexbin 函数绘制
“hexbin” 图也可以作为 jointplot 的一种类型参数使用,设置 sns.jointplot() 内的参数 kind="hex"
使用白色背景的时候视觉效果最好
sns.axes_style("white")
x= np.random.rand(200)
y= x+np.random.rand(200)
sns.jointplot(x=x, y=y, kind="hex", color="k");
结果为:
2.2.3 多元矩阵图 sns.pairplot()
当需要对多维数据集进行可视化时,可以使用矩阵图 sns.pairplot()
导入鸢尾花数据集:
iris = sns.load_dataset("iris")
iris.head()
绘制多元矩阵图:
sns.pairplot(iris);
结果为:
3、其他常见图形
散点图
sns.scatterplot(x="字段名A", y="字段名B", data=“某DataFrame”)
sns.scatterplot(x="petal_length", y="petal_width", data=iris);
结果为:
线图
sns.lineplot(x="字段名A", y="字段名B", data="某DataFrame")
sns.lineplot(x="petal_length", y="petal_width", data=iris);
结果为:
柱状图
sns.barplot(x="字段A", y="字段B", data="某DataFrame")
sns.barplot(x="petal_length", y="petal_width", data=iris);
结果为:
计数图
sns.countplot(x="字段A", data="某DataFrame")
sns.countplot(x="petal_length", data=iris);
结果为: