python中的也有一些不错的绘图包,例如seaborn。基础的matplotlib过于底层,想把一个分类变量映射到颜色上去都要费好几行代码。seaborn就类似于R中的lattice,画一些统计图形非常方便。下面是总结的几种常用图形画法。
%matplotlib inline
import numpy as np
from numpy.random import randn
import pandas as pd
from scipy import stats
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_palette("deep", desat=.6)
sns.set_context(rc={"figure.figsize": (8, 4)})
np.random.seed(9221999)
data = np.random.choice(['a','b','c'], size=100)
sns.barplot(data);
data = randn(100)
sns.distplot(data,bins=30);
sns.tsplot(data);
c1, c2 = sns.color_palette("Set1", 2)
dist1, dist2= stats.norm(0, 1).rvs((2, 100))
dist2 = pd.Series(dist2 + 2, name="dist2")
sns.kdeplot(dist1, shade=True, color=c1)
sns.kdeplot(dist2, shade=True, color=c2);
mpl.rc("figure", figsize=(8, 8))
data = np.random.multivariate_normal([0, 0], [[1, 2], [2, 20]], size=1000)
data = pd.DataFrame(data, columns=["X", "Y"])
sns.kdeplot(data.X, data.Y, shade=True);
x = stats.gamma(3).rvs(5000)
y = stats.gamma(5).rvs(5000)
with sns.axes_style("white"):
sns.jointplot(x, y, kind="kde");
data = [randn(100), randn(100) + 1]
sns.boxplot(data);
sns.violinplot(data, color="pastel");
tips.head()
total_bill | tip | sex | smoker | day | time | size | |
---|---|---|---|---|---|---|---|
0 | 16.99 | 1.01 | Female | No | Sun | Dinner | 2 |
1 | 10.34 | 1.66 | Male | No | Sun | Dinner | 3 |
2 | 21.01 | 3.50 | Male | No | Sun | Dinner | 3 |
3 | 23.68 | 3.31 | Male | No | Sun | Dinner | 2 |
4 | 24.59 | 3.61 | Female | No | Sun | Dinner | 4 |
tips = sns.load_dataset("tips")
sns.lmplot(x="total_bill", y="tip", hue='sex',col='sex',data=tips,fit_reg=True);
titanic = sns.load_dataset("titanic").dropna()
attention = sns.load_dataset("attention")
sns.set_context(rc={"figure.figsize": (8, 8)})
sns.corrplot(titanic[[0,1,3,4,5,6]]);