相关文章推荐
微醺的凉茶  ·  Why is DB2 data ...·  4 月前    · 
豪爽的烈马  ·  Fragment思考_android ...·  9 月前    · 
爱看球的伤疤  ·  kotlin的 ...·  1 年前    · 

文章目录

  • 一、Python做各类统计图介绍
  • 二、各类统计图细讲
    • 2.1 直方图
    • 2.2 散点图
    • 2.3 折线图
    • 2.4 箱型图
    • 2.5 热力图
      • 2.5.1 Seaborn绘制热力图
      • 2.5.2 matplotlib库绘制热力图
      • 2.5.3 使用plotly库绘制热力图
    • 2.6 饼图
    • 2.7 条形图
      • 2.7.1 matplotlib库
      • 2.7.2 seaborn绘制条形图
      • 2.7.3 plotly绘制条形图
    • 2.8 散步图
      • 2.8.1 Matplotlib
      • 2.8.1 Seaborn
    • 2.9 密度图

一、Python做各类统计图介绍

Python有很多可视化库可以用于各类统计图的绘制,比如常用的matplotlib、seaborn、plotly、bokeh等。

下面简单介绍一些基本的统计图及其Python实现方法:

  1. 直方图(Histogram)

直方图是用于表示连续变量分布情况的一种统计图形。通常将连续变量按照一定的间隔分成若干个区间,然后统计每个区间内的样本数量,最后绘制成一个条形图,条形的高度表示该区间内的样本数量。在Python中,可以使用matplotlib库的hist()函数来绘制直方图,也可以使用seaborn库的distplot()函数来绘制带有密度曲线的直方图。

  1. 散点图(Scatter Plot)

散点图是用于表示两个变量之间关系的一种统计图形。在Python中,可以使用matplotlib库的scatter()函数来绘制散点图,也可以使用seaborn库的scatterplot()函数来绘制。

  1. 折线图(Line Chart)

折线图是用于表示随时间或其他连续变量变化的趋势的一种统计图形。在Python中,可以使用matplotlib库的plot()函数来绘制折线图,也可以使用seaborn库的lineplot()函数来绘制。

  1. 箱线图(Box Plot)

箱线图是用于表示数据分布情况的一种统计图形。它可以显示出数据的中位数、四分位数、最大值和最小值等统计信息。在Python中,可以使用matplotlib库的boxplot()函数来绘制箱线图,也可以使用seaborn库的boxplot()函数来绘制。

  1. 热力图(Heatmap)

热力图是用于表示二维变量关系的一种统计图形,通常将变量分别放在X轴和Y轴上,然后用颜色来表示变量之间的关系。在Python中,可以使用matplotlib库的imshow()函数来绘制热力图,也可以使用seaborn库的heatmap()函数来绘制。

  1. 饼图(Pie Chart)

饼图是用于表示分类变量占比的一种统计图形。在Python中,可以使用matplotlib库的pie()函数来绘制饼图。

  1. 条形图(Bar Chart)

条形图是用于比较不同分类变量之间数量差异的一种统计图形。在Python中,可以使用matplotlib库的bar()函数来绘制条形图,也可以使用seaborn库的barplot()函数来绘制。

除了以上几种常见的统计图形外,Python的可视化库还支持很多其他类型的统计图形,如散步图(Scatter Plot Matrix)、密度图(Density Plot)等,可以根据实际需要进行选择和使用。

二、各类统计图细讲

2.1 直方图

直方图是一种用于展示数值数据分布情况的图形,它将数据范围划分成一些小的区间,然后计算每个区间内数据出现的频数或频率,并以矩形的形式绘制在图表上。

在 Python 中,可以使用 matplotlib 库绘制直方图。下面是一个简单的例子:

import matplotlib.pyplot as plt
import numpy as np
# 生成一些随机数据
data = np.random.randn(1000)
# 绘制直方图
plt.hist(data, bins=20, color='blue', alpha=0.5)
plt.title('Histogram of Random Data')
plt.xlabel('Value')
plt.ylabel('Frequency')
plt.show()


在上面的代码中,我们首先生成了 1000 个随机数作为数据,然后使用 hist() 函数绘制直方图。bins 参数指定将数据划分为的区间数,color 参数设置矩形的颜色,alpha 参数设置矩形的透明度。最后,我们添加了标题和坐标轴标签,并使用 show() 函数显示图表。

除了 matplotlib,Seaborn 也提供了绘制直方图的函数 distplot(),它可以在直方图的基础上添加拟合的概率密度函数曲线。下面是一个简单的例子:

import seaborn as sns
import numpy as np
# 生成一些随机数据
data = np.random.randn(1000)
# 绘制直方图和概率密度函数曲线
sns.distplot(data, bins=20, kde=True, color='green')
plt.title('Histogram with Density Plot')
plt.xlabel('Value')
plt.ylabel('Frequency')
plt.show()


在上面的代码中,我们使用 distplot() 函数绘制了直方图和概率密度函数曲线。kde 参数设置是否绘制拟合的概率密度函数曲线。其他参数的含义和 hist() 函数类似。最后,我们添加了标题和坐标轴标签,并使用 show() 函数显示图表。

2.2 散点图

散点图(scatter plot)是一种常见的二维数据可视化方法,用于表示两个变量之间的关系。散点图中每个点的横坐标和纵坐标分别表示两个变量的值,点的位置越靠近一条直线,说明两个变量之间的关系越密切。

在 Python 中,使用 Matplotlib 库的 scatter 函数可以绘制散点图。下面是一个简单的例子:

import matplotlib.pyplot as plt
import numpy as np
# 生成随机数据
x = np.random.rand(50)
y = np.random.rand(50)
# 绘制散点图
plt.scatter(x, y)
plt.show()


这段代码生成了一个包含 50 个随机点的散点图。可以通过调整 x 和 y 数组的值来改变散点图的分布情况。可以通过 scatter 函数的参数来设置点的颜色、大小、形状等属性,以及图表的标题、横纵坐标的标签等属性。

2.3 折线图

折线图常用于展示数据随时间或其他连续性变量的趋势。绘制折线图需要使用Matplotlib库中的plot()函数。

下面是一个绘制折线图的简单示例:

import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [3, 6, 1, 9, 5]
plt.plot(x, y)
plt.show()


这段代码将生成一个简单的折线图,其中x轴表示时间或其他连续性变量,y轴表示数据。在这个示例中,我们创建了两个列表x和y,分别表示时间和对应的数据,然后将它们传递给plot()函数。最后,我们使用show()函数显示图形。

如果需要添加标题,x轴标签,y轴标签等,可以使用xlabel(),ylabel()和title()函数,例如:

plt.xlabel('Time')
plt.ylabel('Data')
plt.title('Data Trends Over Time')


此外,还可以在plot()函数中使用各种样式和属性来自定义折线的颜色、线型、标记等,例如:

plt.plot(x, y, color='red', linestyle='dashed', marker='o', markerfacecolor='blue', markersize=8)


这个示例将折线的颜色设置为红色,线型设置为虚线,标记设置为圆形,标记填充颜色设置为蓝色,标记大小设置为8。您可以根据需要使用其他属性和样式来自定义折线图。

2.4 箱型图

箱型图(Box Plot)是一种用于显示数据分布情况的图形。箱型图主要由五个数值点组成,分别是最小值、第一四分位数、中位数、第三四分位数和最大值,其中第一四分位数和第三四分位数之间的区域被称为箱子(IQR),箱子内的线代表中位数。箱子上下的线段称为“触须”,表示数据的范围,超过“触须”范围之外的数据点被称为离群值(outliers)。

绘制箱型图可以使用Python中的Matplotlib库或Seaborn库,常用的函数是plt.boxplot()和sns.boxplot()。使用这些函数时,需要输入数据,并可以选择设置一些参数,如颜色、线型、标签等,以美化图形并提高可读性。

下面是一个示例代码,用于绘制一组随机数的箱型图:

import numpy as np
import matplotlib.pyplot as plt
# 生成100个随机数
data = np.random.normal(size=100)
# 绘制箱型图
plt.boxplot(data)
# 添加标题和标签
plt.title('Box plot of random data')
plt.xlabel('Data')
plt.ylabel('Value')
# 显示图形
plt.show()


这段代码生成100个随机数,然后使用plt.boxplot()函数绘制箱型图。最后使用plt.title()、plt.xlabel()和plt.ylabel()函数添加标题和标签,并使用plt.show()函数显示图形。

2.5 热力图

热力图(Heatmap)是一种基于颜色变化来展示数据密度的二维图表,通常用于显示矩阵数据。热力图中,数据通过颜色变化的深浅来表示数据的大小或者分布情况,一般而言,颜色较深的地方代表数据较大或者数据较为集中,颜色较浅的地方代表数据较小或者数据较为分散。

在Python中,可以使用多种工具和库来绘制热力图,其中比较常用的有以下几种:

  1. Matplotlib:通过使用matplotlib库中的imshow()方法绘制热力图。
  2. Seaborn:通过使用seaborn库中的heatmap()方法绘制热力图。
  3. Plotly:通过使用plotly库中的heatmap()方法绘制热力图,并可以通过Plotly提供的交互式界面进行数据的探索和可视化。

2.5.1 Seaborn绘制热力图

下面是一个使用Seaborn绘制热力图的示例代码,假设我们有一份包含多个人对于多个商品评分的数据,需要绘制一个评分热力图来观察不同人对于不同商品的评分情况:

import numpy as np
import pandas as pd
import seaborn as sns
# 生成评分数据
np.random.seed(0)
data = pd.DataFrame(np.random.randint(0, 11, size=(10, 5)),
                    columns=['Product A', 'Product B', 'Product C', 'Product D', 'Product E'],
                    index=['User %d' % i for i in range(1, 11)])
# 绘制热力图
sns.heatmap(data, cmap='coolwarm', annot=True, fmt='d')
# 设置图表标题
plt.title('Product Rating Heatmap')

在上述代码中,我们使用了Seaborn库中的heatmap()方法来绘制热力图,其中data参数指定了绘制热力图所需的数据,cmap参数指定了使用的颜色映射方案,annot参数指定了是否在热力图中显示每个数据点的具体数值,fmt参数指定了数据点数值的显示格式。最终,我们可以通过调用plt.title()方法来为热力图添加一个标题。

2.5.2 matplotlib库绘制热力图

要使用Matplotlib库中的imshow()方法绘制热力图,需要先将数据转换成一个二维矩阵。以下是一个简单的例子:

import numpy as np
import matplotlib.pyplot as plt
# 生成随机数据
data = np.random.rand(10, 10)
# 绘制热力图
plt.imshow(data, cmap='hot', interpolation='nearest')
plt.colorbar()
plt.show()


在上面的代码中,首先生成一个10×10的随机矩阵,然后使用imshow()方法将其绘制成热力图。其中,cmap参数指定了颜色映射方案,interpolation参数指定了插值方法,colorbar()方法可以添加一个颜色条。最后使用show()方法展示图像。

你可以根据实际需要修改数据和参数以绘制符合自己需求的热力图。

2.5.3 使用plotly库绘制热力图

使用plotly库绘制热力图可以方便地添加交互式功能,具有更好的可视化效果。下面是使用plotly库中的heatmap()方法绘制热力图的步骤:

  1. 导入必要的库和数据
import plotly.graph_objs as go
import plotly.offline as pyo
import numpy as np
# 生成随机数据
np.random.seed(1)
z = np.random.randint(0, 10, (5, 5))
  1. 定义热力图的数据
# 定义热力图的数据
heatmap_data = go.Heatmap(z=z)
  1. 定义布局
# 定义布局
layout = go.Layout(title='Heatmap Example', xaxis_title='X Axis', yaxis_title='Y Axis')
  1. 绘制热力图
# 绘制热力图
fig = go.Figure(data=[heatmap_data], layout=layout)
pyo.iplot(fig)

完整代码如下:

import plotly.graph_objs as go
import plotly.offline as pyo
import numpy as np
# 生成随机数据
np.random.seed(1)
z = np.random.randint(0, 10, (5, 5))
# 定义热力图的数据
heatmap_data = go.Heatmap(z=z)
# 定义布局
layout = go.Layout(title='Heatmap Example', xaxis_title='X Axis', yaxis_title='Y Axis')
# 绘制热力图
fig = go.Figure(data=[heatmap_data], layout=layout)
pyo.iplot(fig)


运行上述代码,就可以得到一个简单的热力图示例。

2.6 饼图

饼图(Pie chart)是一种用于展示数据占比的图形。饼图的原理是把一个圆形分成若干份,每一份的大小与数据中的相应部分的比例成正比。饼图通常用于展示相对比例较小的数据。

在Python中,使用matplotlib库可以很方便地绘制饼图。下面是一个简单的例子:

import matplotlib.pyplot as plt
labels = ['A', 'B', 'C', 'D']
sizes = [20, 30, 40, 10]
plt.pie(sizes, labels=labels)
plt.show()


这段代码会生成一个包含四个扇形的饼图,每个扇形的大小分别对应20%、30%、40%和10%。labels参数是一个字符串列表,用于指定每个扇形的标签;sizes参数是一个数值列表,用于指定每个扇形的大小。

当然,matplotlib库还提供了很多其他的参数可以用来控制饼图的样式,比如指定颜色、添加阴影等等。如果需要进一步定制饼图的样式,可以查看matplotlib的官方文档。

2.7 条形图

条形图(Bar Plot)是一种用于展示类别型变量之间差异的图形,通常用于展示离散变量的频数或频率。在Python中,可以使用多个库绘制条形图,比如matplotlib、seaborn和plotly等。

2.7.1 matplotlib库

  1. 导入matplotlib库和需要绘制的数据
import matplotlib.pyplot as plt
import numpy as np
# 需要绘制的数据
x = ['A', 'B', 'C', 'D', 'E']
y = [10, 8, 6, 4, 2]
  1. 创建画布和子图,并设置图形属性
# 创建画布和子图
fig, ax = plt.subplots()
# 设置图形属性
ax.set_title('Bar Plot Example')
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
  1. 绘制条形图
# 绘制条形图
ax.bar(x, y)
# 显示图形
plt.show()

以上代码将绘制一个简单的条形图,如果需要更改图形属性或增加其他元素,可以使用matplotlib库提供的其他方法和函数进行调整。

2.7.2 seaborn绘制条形图

Seaborn是一个基于matplotlib的数据可视化库,它提供了一些方便快捷的绘图函数,包括条形图。下面给出一个使用Seaborn绘制条形图的例子:

假设我们有如下数据:

import pandas as pd
import numpy as np
np.random.seed(0)
data = pd.DataFrame({'A': np.random.rand(5),
                     'B': np.random.rand(5),
                     'C': np.random.rand(5)})

我们可以使用barplot函数绘制条形图:

import seaborn as sns
sns.barplot(data=data)

这会生成一个默认的条形图,其中x轴表示不同的列(A、B、C),y轴表示值。默认情况下,Seaborn会计算每列的平均值,并绘制其误差线(95%置信区间)。我们可以通过ci参数来控制误差线的宽度:

sns.barplot(data=data, ci='sd')


其中,ci参数可以取值为:

  1. “sd”:标准差
  2. “sem”:标准误差
  3. 95:95%置信区间
  4. None:不绘制误差线

我们还可以使用hue参数来指定分类变量,并使用不同颜色来区分不同的类别:

data['D'] = ['x', 'x', 'y', 'y', 'z']
sns.barplot(data=data, x='D', y='A', hue='D')


这会生成一个针对分类变量D的条形图,其中x轴表示D的不同取值(x、y、z),y轴表示A的值。不同的颜色表示不同的类别。

2.7.3 plotly绘制条形图

绘制条形图可以使用 plotly.graph_objs 中的 Bar 类,以及 plotly.express 中的 bar 函数。

下面是一个使用 plotly.graph_objs 绘制简单条形图的例子,假设我们有如下数据:

import pandas as pd
data = {
    'weekday': ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'],
    'sales': [110, 80, 120, 90, 100, 130, 140]
df = pd.DataFrame(data)

我们可以使用 Bar 类创建一个条形图对象,然后将其添加到一个 Figure 对象中,并使用 show 方法显示图形:

import plotly.graph_objs as go
fig = go.Figure()
fig.add_trace(go.Bar(
    x=df['weekday'], 
    y=df['sales'], 
    name='Sales'
fig.update_layout(
    title='Weekly Sales',
    xaxis_title='Weekday',
    yaxis_title='Sales'
fig.show()

这将绘制一个简单的条形图,其中 X 轴显示工作日,Y 轴显示每个工作日的销售量。


另外,使用 plotly.express 可以更快速地绘制简单的条形图,下面是一个例子:

import plotly.express as px
fig = px.bar(df, x='weekday', y='sales', title='Weekly Sales')
fig.show()


这段代码将使用 plotly.express 的 bar 函数,快速绘制一个与前面相同的图形。

2.8 散步图

散步图(Scatter plot)是一种用于研究两个变量之间关系的图表类型。它在直角坐标系上以点的形式绘制数据,其中一个变量被映射到水平轴(x轴),另一个变量被映射到垂直轴(y轴),因此每个点的位置表示这两个变量的值。散点图通常用于发现变量之间的关系和趋势,以及寻找数据中的异常值和离群点。

Python中可以使用多个库来绘制散点图,包括:

  1. Matplotlib:使用scatter()函数绘制散点图。
  2. Seaborn:使用scatterplot()函数绘制散点图,可以通过hue参数添加颜色分类变量,通过size参数设置点的大小。
  3. Plotly:使用scatter()函数绘制散点图,可以通过color参数设置颜色,通过size参数设置点的大小。与Matplotlib和Seaborn不同,Plotly绘制的散点图通常是交互式的,可以通过鼠标悬停、缩放、选择等操作进行交互。

下面是使用Matplotlib和Seaborn绘制散点图的示例代码:

2.8.1 Matplotlib

import matplotlib.pyplot as plt
import numpy as np
# 生成数据
x = np.random.randn(100)
y = np.random.randn(100)
# 绘制散点图
plt.scatter(x, y)
# 添加标题和坐标轴标签
plt.title('Scatter plot')
plt.xlabel('X axis')
plt.ylabel('Y axis')
# 显示图形
plt.show()

2.8.1 Seaborn

import seaborn as sns
import numpy as np
# 生成数据
x = np.random.randn(100)
y = np.random.randn(100)
# 绘制散点图
sns.scatterplot(x=x, y=y)
# 添加标题和坐标轴标签
plt.title('Scatter plot')
plt.xlabel('X axis')
plt.ylabel('Y axis')
# 显示图形
plt.show()

2.9 密度图

密度图(Density Plot)是一种用来表示数据分布情况的图形,通常是通过核密度估计方法来估计数据分布的概率密度,并将结果绘制成连续的曲线。密度图可以更直观地展示数据的分布情况,相比直方图和箱型图等方法,可以更准确地表示数据分布的趋势和形态。

Python中可以使用多个库来绘制密度图,包括matplotlib、seaborn和plotly等。下面以seaborn库为例,介绍如何使用Python绘制密度图。

首先需要安装seaborn库,可以使用pip命令进行安装:

pip install seaborn

接下来,可以使用seaborn库中的distplot()方法绘制密度图。以下是一个简单的示例代码:

import seaborn as sns
import numpy as np
# 生成随机数据
data = np.random.normal(size=1000)
# 绘制密度图
sns.distplot(data)


在这个示例中,首先生成了1000个随机数作为数据,然后使用distplot()方法绘制密度图。distplot()方法可以自动计算数据的核密度估计,并绘制出连续的曲线。可以通过调整参数来修改图形的样式和布局。例如,可以使用rug参数添加样本点标记,使用kde参数关闭核密度估计,使用bins参数调整直方图的宽度等。