各种各样的图

本文介绍使用Python的Matplotlib库结合Seaborn美化图表的方法,涵盖曲线图、箱体图、密度图等多种类型,并展示如何通过简单的代码实现这些图表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

1.曲线图

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.箱体图

sns.set_style("whitegrid")
data = np.random.normal(size=(20, 6)) + np.arange(6) / 2
sns.boxplot(data=data);
plt.show()


3.小提琴箱体图

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.密度图

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.分布图

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.柱状图

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就是我们最常见的柱状图


同样的,如果是

sns.distplot(x, hist=False, rug=True)
那么就是柱状没了。

7.联合散点图

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中间增加一些设置有更好的效果。

例如

sns.jointplot(x="x", y="y", data=df, kind="hex")

sns.jointplot(x="x", y="y", data=df, kind="kde")

8,叠加

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.配对关系矩阵图

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

同样的,

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.线性回归图

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

sns.lmplot(x="total_bill", y="tip", hue="smoker", data=tips)


也可以再加入变量:

sns.lmplot(x="total_bill", y="tip", hue="smoker", col="time", data=tips)

还可以接着加。。

sns.lmplot(x="total_bill", y="tip", hue="smoker",
           col="time", row="sex", data=tips)

当然,还可以画成这样;

sns.jointplot(x="total_bill", y="tip", data=tips, kind="reg")





11.有点像箱体图

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.比例变化累积图

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()
这种图形不知道学名是什么,平时还是有很大的概率会用到。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

钱塘小甲子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值