前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >各种各样的图

各种各样的图

作者头像
钱塘小甲子
发布2019-01-28 15:53:30
5980
发布2019-01-28 15:53:30
举报

有时候,我们想画某一种图,就到处找代码,现学现卖。这里,笔者就做一个收集,使用python的matplotlib加上seaborn来美化的各种各样的图。

1.曲线图

代码语言:javascript
复制
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
def sinplot(flip=1):
    x = np.linspace(0, 14, 100)
    for i in range(1, 7):
        plt.plot(x, np.sin(x + i * .5) * (7 - i) * flip)
    plt.show()
sns.set_style("whitegrid")
sinplot()

2.箱体图

代码语言:javascript
复制
sns.set_style("whitegrid")
data = np.random.normal(size=(20, 6)) + np.arange(6) / 2
sns.boxplot(data=data);
plt.show()

3.小提琴箱体图

代码语言:javascript
复制
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_style("whitegrid")
data = np.random.normal(size=(20, 6)) + np.arange(6) / 2
sns.violinplot(data=data)
sns.despine(offset=10, trim=True)#形成坐标裂开的样子
plt.show()

4.密度图

代码语言:javascript
复制
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
x, y = np.random.multivariate_normal([0, 0], [[1, -.5], [-.5, 1]], size=300).T
cmap = sns.cubehelix_palette(light=1, as_cmap=True)
sns.kdeplot(x, y, cmap=cmap, shade=True)
plt.show()

5.分布图

代码语言:javascript
复制
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
x = np.random.normal(size=100)
sns.distplot(x)
plt.show()

6.柱状图

代码语言:javascript
复制
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
x = np.random.normal(size=100)
sns.distplot(x, kde=False, rug=True)
plt.show()

rug设为False就是我们最常见的柱状图

同样的,如果是

代码语言:javascript
复制
sns.distplot(x, hist=False, rug=True)

那么就是柱状没了。

7.联合散点图

代码语言:javascript
复制
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
mean, cov = [0, 1], [(1, .5), (.5, 1)]
data = np.random.multivariate_normal(mean, cov, 200)
df = pd.DataFrame(data, columns=["x", "y"])
sns.jointplot(x="x", y="y", data=df)
plt.show()

上面这个jointplot中间增加一些设置有更好的效果。

例如

代码语言:javascript
复制
sns.jointplot(x="x", y="y", data=df, kind="hex")
代码语言:javascript
复制
sns.jointplot(x="x", y="y", data=df, kind="kde")

8,叠加

代码语言:javascript
复制
mport numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
mean, cov = [0, 1], [(1, .5), (.5, 1)]
data = np.random.multivariate_normal(mean, cov, 200)
df = pd.DataFrame(data, columns=["x", "y"])
g = sns.jointplot(x="x", y="y", data=df, kind="kde", color='m')
g.plot_joint(plt.scatter, marker="+")
plt.show()

散点图和上面的联合密度分布图叠加

9.配对关系矩阵图

代码语言:javascript
复制
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
iris = sns.load_dataset("iris")
print iris
sns.pairplot(iris)
plt.show()

这里,我们来看一下我们的数据集:

     sepal_length  sepal_width  petal_length  petal_width    species 0             5.1          3.5           1.4          0.2     setosa 1             4.9          3.0           1.4          0.2     setosa 2             4.7          3.2           1.3          0.2     setosa 3             4.6          3.1           1.5          0.2     setosa 4             5.0          3.6           1.4          0.2     setosa 5             5.4          3.9           1.7          0.4     setosa 6             4.6          3.4           1.4          0.3     setosa 7             5.0          3.4           1.5          0.2     setosa 8             4.4          2.9           1.4          0.2     setosa 9             4.9          3.1           1.5          0.1     setosa 10            5.4          3.7           1.5          0.2     setosa 11            4.8          3.4           1.6          0.2     setosa 12            4.8          3.0           1.4          0.1     setosa 13            4.3          3.0           1.1          0.1     setosa 14            5.8          4.0           1.2          0.2     setosa 15            5.7          4.4           1.5          0.4     setosa 16            5.4          3.9           1.3          0.4     setosa 17            5.1          3.5           1.4          0.3     setosa 18            5.7          3.8           1.7          0.3     setosa 19            5.1          3.8           1.5          0.3     setosa 20            5.4          3.4           1.7          0.2     setosa 21            5.1          3.7           1.5          0.4     setosa 22            4.6          3.6           1.0          0.2     setosa 23            5.1          3.3           1.7          0.5     setosa 24            4.8          3.4           1.9          0.2     setosa

这是一个dataframe的结构,我们绘制的就是四列一其他三列分别的散点图,对角线上的则是这一个变量的分布直方图,当然,也可以改成别的。

同样的,

代码语言:javascript
复制
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
iris = sns.load_dataset("iris")
g = sns.PairGrid(iris)
g.map_diag(sns.kdeplot)
g.map_offdiag(sns.kdeplot, cmap="Blues_d", n_levels=6);
plt.show()

10.线性回归图

代码语言:javascript
复制
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
tips = sns.load_dataset("tips")
# print tips
sns.regplot(x="total_bill", y="tip", data=tips)
plt.show()

tips的数据是这样的:

     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 5         25.29  4.71    Male     No   Sun  Dinner     4 6          8.77  2.00    Male     No   Sun  Dinner     2 7         26.88  3.12    Male     No   Sun  Dinner     4 8         15.04  1.96    Male     No   Sun  Dinner     2 9         14.78  3.23    Male     No   Sun  Dinner     2 10        10.27  1.71    Male     No   Sun  Dinner     2 11        35.26  5.00  Female     No   Sun  Dinner     4 12        15.42  1.57    Male     No   Sun  Dinner     2 13        18.43  3.00    Male     No   Sun  Dinner     4 14        14.83  3.02  Female     No   Sun  Dinner     2

如果是下面这样的话,就是一个有条件的线性回归,或者说,分类别了。而类别就是smoker

代码语言:javascript
复制
sns.lmplot(x="total_bill", y="tip", hue="smoker", data=tips)

也可以再加入变量:

代码语言:javascript
复制
sns.lmplot(x="total_bill", y="tip", hue="smoker", col="time", data=tips)

还可以接着加。。

代码语言:javascript
复制
sns.lmplot(x="total_bill", y="tip", hue="smoker",
           col="time", row="sex", data=tips)

当然,还可以画成这样;

代码语言:javascript
复制
sns.jointplot(x="total_bill", y="tip", data=tips, kind="reg")

11.有点像箱体图

代码语言:javascript
复制
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
tips = sns.load_dataset("tips")
sns.stripplot(x="day", y="total_bill", data=tips, jitter=True)
plt.show()

12.比例变化累积图

代码语言:javascript
复制
import seaborn as sns
import numpy as np
np.random.seed(sum(map(ord, "aesthetics")))
ax = plt.subplot(1, 1, 1)
signal_weight_sz50.plot.area(figsize=(10, 5), ax=ax)
plt.show()

这种图形不知道学名是什么,平时还是有很大的概率会用到。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年06月04日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.曲线图
  • 2.箱体图
  • 3.小提琴箱体图
  • 4.密度图
  • 5.分布图
  • 6.柱状图
  • 7.联合散点图
  • 8,叠加
  • 9.配对关系矩阵图
  • 10.线性回归图
  • 11.有点像箱体图
  • 12.比例变化累积图
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档