您的位置:

用 Python 做雷达图

一、Python雷达图代码

雷达图,也称为蛛网图或星形图,是一种以同心多边形将几个变量的数据绘制在同一张图表上,以便于进行比较和分析的数据可视化方式。Python提供了多个库来绘制雷达图,包括Matplotlib、Bokeh和Plotly等。

import numpy as np
import matplotlib.pyplot as plt

# 设置数据标签
categories = ['人力资源', '营销', '技术', '财务', '管理']
N = len(categories)

# 设置数据值
vals = [4, 3, 2, 1, 5]
vals += vals[:1]

# 计算每个角的弧度
angles = [n / float(N) * 2 * np.pi for n in range(N)]
angles += angles[:1]

# 绘制多边形,连接数据点
ax = plt.subplot(111, polar=True)
plt.xticks(angles[:-1], categories, color='grey', size=8)
ax.plot(angles, vals, linewidth=1, linestyle='solid')
ax.fill(angles, vals, 'b', alpha=0.1)
plt.show()

上述代码使用Matplotlib库绘制了一个简单的雷达图,该图表显示了几个变量的数据值,包括人力资源、营销、技术、财务和管理。可以看到,Python的绘图库非常容易使用,对于任意的数据可视化任务都非常有用。

二、Python画雷达图代码

除了使用Matplotlib库,Python还提供了其他库来绘制雷达图。下面是一个使用Bokeh库编写的绘制雷达图的示例代码:

from math import pi
import pandas as pd
from bokeh.io import output_file, show
from bokeh.plotting import figure
from bokeh.models import ColumnDataSource

# 创建数据集
data = {'angles': [0, pi/2, pi, 3*pi/2, 2*pi],
        'values': [1.2, 2.5, 3.7, 0.8, 2.1]}
df = pd.DataFrame(data)

# 添加第一个角度值以完成闭环
df = pd.concat([df, pd.DataFrame({'angles':[df['angles'].iloc[0]],
                                   'values':[df['values'].iloc[0]]})])

# 创建Figure对象
p = figure(title="雷达图", x_range=(-1.2, 1.2), y_range=(-1.2, 1.2),
           plot_width=400, plot_height=400)

# 绘制雷达图
p.patch(x=df['values']*np.cos(df['angles']),
        y=df['values']*np.sin(df['angles']),
        fill_alpha=0.4, line_width=2)

output_file("radar.html")
show(p)

该示例代码使用Bokeh库来绘制雷达图,该图表显示了一组固定半径的数据点,它们绕着中心点分布。这个示例代码中的数据集是一个直接使用Python数据结构创建的小数据集,但是实际上可以使用各种数据存储方式来创建Bokeh数据源。

三、Python绘制雷达图函数

将绘制雷达图的代码封装成一个函数可以很方便地重复使用,下面是一个可以在Python中绘制雷达图的简单函数:

import matplotlib.pyplot as plt
import numpy as np

def radar_chart(categories, data, title):
    # 计算数据值并重复第一个数据点以闭环
    N = len(categories)
    data = np.concatenate((data,[data[0]]))
    angles = np.linspace(0, 2*np.pi, N, endpoint=False)
    angles = np.concatenate((angles,[angles[0]]))

    # 绘制多边形
    fig = plt.figure()
    ax = fig.add_subplot(111, polar=True)
    ax.plot(angles, data, 'o-', linewidth=2)
    ax.fill(angles, data, alpha=0.25)
    ax.set_thetagrids(angles * 180/np.pi, categories)
    plt.title(title, va='bottom')

    # 显示结果
    plt.show()

上述函数使用Matplotlib库绘制雷达图,参数categories表示分类变量,data表示每个分类变量对应的数据,title表示图表的标题。通过计算数据值和角度值,并且连接数据点来绘制多边形,最后添加类别标签,这个函数可以方便地绘制可视化效果良好的雷达图。

四、Python雷达图详解

雷达图是一种多维数据可视化技术,可以用于显示多个变量之间的关系及其对整体的贡献率。它由多个同心多边形组成,每个多边形代表一个变量,并且大小和数值成正比。同一张图表上的每个多边形通过连接每个角上的数据点来绘制。数据点的位置由所对应的几个变量的数值决定。

使用Python绘制雷达图的主要步骤如下:

  • 准备数据:准备需要绘制的数据,包括类别变量、数值、标题等。
  • 计算角度和数据值:计算每个角的角度和每个变量的数据值。
  • 绘制多边形:使用Matplotlib、Bokeh或Plotly等库来绘制雷达图。

Python的Matplotlib库提供了一个方便的函数来绘制雷达图,即matplotlib.pyplot.polar()。这个函数使用极坐标系绘制出同心多边形。由于雷达图的数据通常是非负的,因此可以使用填充区域来表示数据。可以使用matplotlib.pyplot.fill()函数来实现这一点。

Bokeh和Plotly等数据可视化库也支持雷达图的绘制,它们的优点是带有交互式和动态效果,能够更好地展示数据和突出主题。Bokeh库使用Python作为绘图语言,提供了一个图表对象,使得用户可以在Web浏览器中交互地探索数据。Plotly库则是一个交互式的绘图库,支持在线绘图和展示,支持多种绘图类型,包括2D和3D可视化。

五、Python生成雷达图

Python提供了多个库来生成雷达图,包括Matplotlib、Bokeh和Plotly等。这些库都具有很高的可自定义性,可以满足不同用户的需求。

使用Python绘制雷达图的最佳方法取决于数据类型和要表现的信息。对于绘制简单的雷达图,可以使用Matplotlib库提供的简便函数。如果需要将雷达图嵌入Python Web应用程序中或者需要创造更加丰富复杂的数据可视化效果,则需要使用先进的数据可视化工具。

最后,Python的雷达图表现出了数据的维度和变化,很好的解释了数据之间的关系。Python通过绘图库快速可靠的提供自己能力,对于数据可视化工作者来说,它是一个强大而方便的工具,可以用各种绘图库实现数据可视化的需求。