数据可视化--Seaborn
No.1 Seaborn 和 Matplotlib 对比¶
用经典的鸢尾花的数据为例子,来对比一下 seaborn 和 matplotlib
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns
from pandas import Series, DataFrame
iris = pd.read_csv('https://raw.githubusercontent.com/pydata/pandas/master/pandas/tests/data/iris.csv')
iris.head()
然后里面的 Name 一共有 3 个,3 个种类。
iris.Name.unique()
iris_groupby = iris.groupby(iris['Name'])
iris_groupby.get_group('Iris-setosa')[:5]
iris_groupby.get_group('Iris-versicolor')[:5]
然后下面用 matplotlib 画图。
color_map = dict(zip(iris.Name.unique(), ['blue', 'green', 'red']))
color_map
for species, group in iris.groupby('Name'):
plt.scatter(group['PetalLength'], group['SepalLength'],
color=color_map[species],
alpha=0.3, edgecolor=None,
label=species)
plt.legend(frameon=True, title='Name')
plt.xlabel('petalLength')
plt.ylabel('sepalLength')
plt.show()
图中三种颜色表示三种类型的花,SepalLength 表示萼片长度,PetalLength 表示花瓣长度。
有没有发现代码好长啊,而且容易出错。再看看 seaborn。
sns.lmplot('PetalLength', 'SepalLength', iris, hue='Name', fit_reg=False)
plt.show()
一行代码……有没有一种呵呵哒的感觉?这差距也太大了。
No.2 Seaborn 直方图和密度图¶
首先回顾一下 matplotlib 画直方图密度图。
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns
from pandas import Series, DataFrame
s1 = Series(np.random.randn(1000))
plt.hist(s1)
plt.show()
s1.plot(kind='kde')
plt.show()
再看看 seaborn 是怎么画的。
sns.distplot(s1, hist=True, kde=True)
plt.show()
人家把两个图结合到一起来当然也可以改的。
sns.distplot(s1, hist=False, kde=True, rug=True)
plt.show()
下面加了一层,表示分布情况。还可以添加 bins 来切割直方图。
sns.distplot(s1, bins=40, hist=True, kde=False, rug=True)
plt.show()
还可以填充密度图。
sns.kdeplot(s1, shade=True, color='r')
plt.show()
No.3 Seaborn 柱状图和热力图¶
首先使用 seaborn 的 load_dataset 方法来加载在线数据,这个如何实现可以去看 GitHub 的源码,源码里面提供了很多 csv 文件的数据集。
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns
from pandas import Series, DataFrame
df = sns.load_dataset('flights')
df.head()
df.shape
这是个飞行数据,下面做一个透视表出来。
df = df.pivot(index='month', columns='year', values='passengers')
df
根据这个透视表做一个热力图,查看每年飞行次数。
sns.heatmap(df, annot=True, fmt='d')
plt.show()
这张热力图能看出来 49 年到 60 年飞行次数逐步增加,并且每年飞行次数多集中于中间月份,也就是 5 月到 9 月。
然后再画一个柱状图,柱状图就比较简单了。
sns.barplot(x=df.sum().index, y=df.sum().values)
plt.show()
这是每一年飞行次数的综合画的柱状图。
No.4 Seaborn 强大的调色功能¶
首先写一个固定的绘图函数。
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns
from pandas import Series, DataFrame
def sinplot():
x = np.linspace(0, 14, 100)
plt.figure(figsize=(8, 6))
for i in range(4):
plt.plot(x, np.sin(x+i)*(i+0.75), label='sin(x+%s)*(%s+0.75)' %(i,i))
plt.legend()
plt.show()
sinplot()
seaborn 内置了一个调色盘,六个颜色,有不同主题。
sns.color_palette() # RGB
sns.palplot(sns.color_palette())
plt.show()
pal_style = ['deep', 'muted', 'pastel', 'bright', 'dark', 'colorblind']
sns.palplot(sns.color_palette('deep'))
plt.show()
sns.palplot(sns.color_palette('bright'))
plt.show()
sns.palplot(sns.color_palette('colorblind'))
plt.show()
更换默认主题。
sns.set_palette(sns.color_palette('colorblind'))
sinplot()
图中线的颜色变了。你也可以自己设置颜色。
pal_1 = sns.color_palette([(0.5, 0.1, 0.7),
(0.3, 0.1, 0.9),
(0.7, 0.4, 0.2)])
sns.palplot(pal_1)
plt.show()
但是这种方法太慢了,还要自己敲数字,seaborn 还有一个更便捷的方法。
pal_2 = sns.color_palette('hls', 10)
sns.palplot(pal_2)
plt.show()
sns.set_palette(pal_2)
sinplot()
一行代码就可以了。
结束。
引用资源:https://zhuanlan.zhihu.com/p/31231795
文章链接:https://macplay.github.io/posts/shu-ju-ke-shi-hua-seaborn/
发布/更新于:
版权声明:如无特别说明,本站文章均遵循 CC BY-NC-SA 4.0 协议,转载请注明作者及出处。