基本图形
柱状图
reviews['points'].value_counts().sort_index().plot.bar()
散点图
reviews[reviews['price'] < 100].sample(100).plot.scatter(x='price', y='points')
![](https://i-blog.csdnimg.cn/blog_migrate/6b15df41ba63e12f7ef0329ece2fe892.png)
image
蜂窝图
reviews[reviews['price'] < 100].plot.hexbin(x='price', y='points', gridsize=15)
![](https://i-blog.csdnimg.cn/blog_migrate/410039689177c0786e8b67f90436d0b5.png)
image
大量重复的点可以用这种图表示
柱状图-叠加模式
![](https://i-blog.csdnimg.cn/blog_migrate/cf772e3444ddd3d749b8b83d4f373f75.png)
image
wine_counts.plot.bar(stacked=True)
![](https://i-blog.csdnimg.cn/blog_migrate/9639762df6137b96029e90282a82323a.png)
image
面积模式
wine_counts.plot.area()
折线模式
wine_counts.plot.line()
美化
设置图的大小,字体大小,颜色,标题
reviews['points'].value_counts().sort_index().plot.bar(
figsize=(12, 6),
color='mediumvioletred',
fontsize=16,
title='Rankings Given by Wine Magazine',
)
借助Matplotlib
import matplotlib.pyplot as plt
ax = reviews['points'].value_counts().sort_index().plot.bar(
figsize=(12, 6),
color='mediumvioletred',
fontsize=16
)
ax.set_title("Rankings Given by Wine Magazine", fontsize=20)
![](https://i-blog.csdnimg.cn/blog_migrate/650316433704b25ebd37d3dfa128c3e0.png)
image
借助Seaborn-去除边框
import matplotlib.pyplot as plt
import seaborn as sns
ax = reviews['points'].value_counts().sort_index().plot.bar(
figsize=(12, 6),
color='mediumvioletred',
fontsize=16
)
ax.set_title("Rankings Given by Wine Magazine", fontsize=20)
sns.despine(bottom=True, left=True)
![](https://i-blog.csdnimg.cn/blog_migrate/f01a9ea5105b3aa329d23bd8d157b1ff.png)
image
多图表
matplotlib
fig, axarr = plt.subplots(2, 2, figsize=(12, 8))
reviews['points'].value_counts().sort_index().plot.bar(
ax=axarr[0][0]
)
reviews['province'].value_counts().head(20).plot.bar(
ax=axarr[1][1]
![](https://i-blog.csdnimg.cn/blog_migrate/416b5830b9b57b758278e7685a96b477.png)
image
Seaborn
df = footballers[footballers['Position'].isin(['ST', 'GK'])]
g = sns.FacetGrid(df, col="Position", col_wrap=2)
g.map(sns.kdeplot, "Overall")
![](https://i-blog.csdnimg.cn/blog_migrate/61b498770da50aba77399b7e06ed4b7a.png)
image
df = footballers[footballers['Position'].isin(['ST', 'GK'])]
df = df[df['Club'].isin(['Real Madrid CF', 'FC Barcelona', 'Atlético Madrid'])]
g = sns.FacetGrid(df, row="Position", col="Club")
g.map(sns.violinplot, "Overall")
![](https://i-blog.csdnimg.cn/blog_migrate/5e7d0636b01f32f10a95ce1983549578.png)
image
df = footballers[footballers['Position'].isin(['ST', 'GK'])]
df = df[df['Club'].isin(['Real Madrid CF', 'FC Barcelona', 'Atlético Madrid'])]
g = sns.FacetGrid(df, row="Position", col="Club",
row_order=['GK', 'ST'],
col_order=['Atlético Madrid', 'FC Barcelona', 'Real Madrid CF'])
g.map(sns.violinplot, "Overall")
控制显示顺序
pairplot-多变量的相互关系
sns.pairplot(footballers[['Overall', 'Potential', 'Value']])
![](https://i-blog.csdnimg.cn/blog_migrate/d0d766841bb601559338484a96048073.png)
image
颜色,图标参数
sns.lmplot(
x='Value', y='Overall',
markers=['o', 'x', '*'],
hue='Position',
data=footballers.loc[footballers['Position'].isin(
['ST', 'RW', 'LW'])],
fit_reg=False
)
![](https://i-blog.csdnimg.cn/blog_migrate/9ef2d8ac68d79b9ff74e8111ec45227f.png)
image
分组
f = (footballers
.loc[footballers['Position'].isin(['ST', 'GK'])]
.loc[:, ['Value', 'Overall', 'Aggression', 'Position']]
)
f = f[f["Overall"] >= 80]
f = f[f["Overall"] < 85]
f['Aggression'] = f['Aggression'].astype(float)
sns.boxplot(x="Overall", y="Aggression", hue='Position', data=f)
![](https://i-blog.csdnimg.cn/blog_migrate/b090b362f85b342d8adbef52532d10e4.png)
image
总结图
热力图
f = (
footballers.loc[:, ['Acceleration', 'Aggression', 'Agility', 'Balance', 'Ball control']]
.applymap(lambda v: int(v) if str.isdecimal(v) else np.nan)
.dropna()
).corr()
sns.heatmap(f, annot=True)
![](https://i-blog.csdnimg.cn/blog_migrate/5427cdf7777e2e8f1e047c0b40574de2.png)
image
平行线图
from pandas.plotting import parallel_coordinates
f = (
footballers.iloc[:, 12:17]
.loc[footballers['Position'].isin(['ST', 'GK'])]
.applymap(lambda v: int(v) if str.isdecimal(v) else np.nan)
.dropna()
)
f['Position'] = footballers['Position']
f = f.sample(200)
parallel_coordinates(f, 'Position')
![](https://i-blog.csdnimg.cn/blog_migrate/7ffa210ed150235f118e13cfb038ad84.png)
image
Seanborn使用
基本图形
柱状图-值统计
countplot == value_count
sns.countplot(reviews['points'])
![](https://i-blog.csdnimg.cn/blog_migrate/d0f5f93e5b8502c8ee37a8fa3a59f8b6.png)
image
折线图-密度图
sns.kdeplot(reviews.query('price < 200').price)
![](https://i-blog.csdnimg.cn/blog_migrate/7fac92fcb8a680e4270db170853b9ff0.png)
image
二维密度图--类似蜂窝图作用
样本多,重复点多的时候用
sns.kdeplot(reviews[reviews['price'] < 200].loc[:, ['price', 'points']].dropna().sample(5000))
![](https://i-blog.csdnimg.cn/blog_migrate/e22fb0141d812dbeb63daafb7762a63d.png)
image
直方图
类似pandas.hist
sns.distplot(reviews['points'], bins=10, kde=False)
![](https://i-blog.csdnimg.cn/blog_migrate/d90573a224b66e7b6baf29b0e4053200.png)
image
散点图和直方图复合
sns.jointplot(x='price', y='points', data=reviews[reviews['price'] < 100])
![](https://i-blog.csdnimg.cn/blog_migrate/f25595d17fb63fcd4b18a85dc2519873.png)
image
蜂窝图和直方图复合
sns.jointplot(x='price', y='points', data=reviews[reviews['price'] < 100], kind='hex',gridsize=20)
![](https://i-blog.csdnimg.cn/blog_migrate/bd2f05ee5634de534a207c9264d6ff06.png)
image
箱线图
df = reviews[reviews.variety.isin(reviews.variety.value_counts().head(5).index)]
sns.boxplot(
x='variety',
y='points',
data=df
)
![](https://i-blog.csdnimg.cn/blog_migrate/8fc7c1a63fe11c342bbafc12b3656669.png)
image
小提琴图
sns.violinplot(
x='variety',
y='points',
data=reviews[reviews.variety.isin(reviews.variety.value_counts()[:5].index)]
)
![](https://i-blog.csdnimg.cn/blog_migrate/336308e3820e34936f36a4aab3099700.png)
image
网络动态图表-plotly
from plotly.offline import init_notebook_mode, iplot
init_notebook_mode(connected=True)
散点图
import plotly.graph_objs as go
iplot([go.Scatter(x=reviews.head(1000)['points'], y=reviews.head(1000)['price'], mode='markers')])
![](https://i-blog.csdnimg.cn/blog_migrate/f347bdc0a4c22f7f1097184949b15b6d.png)
image
热力图
iplot([go.Histogram2dContour(x=reviews.head(500)['points'],
y=reviews.head(500)['price'],
contours=go.Contours(coloring='heatmap')),
go.Scatter(x=reviews.head(1000)['points'], y=reviews.head(1000)['price'], mode='markers')])
![](https://i-blog.csdnimg.cn/blog_migrate/de277c327729091eef6332fd742edbed.png)
image
图形语法的可视化库plotnine
from plotnine import *
top_wines = reviews[reviews['variety'].isin(reviews['variety'].value_counts().head(5).index)]
df = top_wines.head(1000).dropna()
(ggplot(df)
+ aes('points', 'price')
+ geom_point())
#其他表达形式ggplot(df)
+ geom_point(aes('points', 'price'))
)
(ggplot(df, aes('points', 'price'))
+ geom_point
一层层添加图形参数
![](https://i-blog.csdnimg.cn/blog_migrate/da9eb3d5c9478d02c5b56f101e4f9760.png)
image
df = top_wines.head(1000).dropna()
(
ggplot(df)
+ aes('points', 'price')
+ geom_point()
+ stat_smooth()
)
![](https://i-blog.csdnimg.cn/blog_migrate/8f7da06c290eb61251f1b1a4daa12d35.png)
image
添加颜色
df = top_wines.head(1000).dropna()
(
ggplot(df)
+ geom_point()
+ aes(color='points')
+ aes('points', 'price')
+ stat_smooth()
)
一图多表
df = top_wines.head(1000).dropna()
(ggplot(df)
+ aes('points', 'price')
+ aes(color='points')
+ geom_point()
+ stat_smooth()
+ facet_wrap('~variety')
)
![](https://i-blog.csdnimg.cn/blog_migrate/87e7d386137530b0acafbac29d945e51.png)
image
柱状图
(ggplot(top_wines)
+ aes('points')
+ geom_bar()
)
![](https://i-blog.csdnimg.cn/blog_migrate/4bb0d75e5c3c4492761c7c26588e0ccb.png)
image
二维热力图
(ggplot(top_wines)
+ aes('points', 'variety')
+ geom_bin2d(bins=20)
)
![](https://i-blog.csdnimg.cn/blog_migrate/868a26f5b2094c8e77dd271008673d09.png)
image
更多API文档 API Reference.
处理时间序列
一般柱状图
shelter_outcomes['date_of_birth'].value_counts().sort_values().plot.line()
![](https://i-blog.csdnimg.cn/blog_migrate/840b9518c1203cc5714fb506a265c20b.png)
image
按年份重新取样
shelter_outcomes['date_of_birth'].value_counts().resample('Y').sum().plot.line()
![](https://i-blog.csdnimg.cn/blog_migrate/271c50259a05aae10e3ab5eb4c5604b6.png)
image
stocks['volume'].resample('Y').mean().plot.bar()
![](https://i-blog.csdnimg.cn/blog_migrate/b84b1bac0a9b9e919a64c447b68850a0.png)
image
同期对比
如今年12月和去年12月比较
from pandas.plotting import lag_plot
lag_plot(stocks['volume'].tail(250))
![](https://i-blog.csdnimg.cn/blog_migrate/60b3233ad4736f235d5566f4adb0c470.png)
image
自相关图
from pandas.plotting import autocorrelation_plot
autocorrelation_plot(stocks['volume'])
![](https://i-blog.csdnimg.cn/blog_migrate/b17a00b0b6f75256694a8f4049a80129.png)
image