雷达图是一种常用于展示多维度数据的图表,它以圆形为基础,将各个维度数据映射到圆周上,通过线条连接不同的数据点,形成一个封闭的区域。在这个区域中,每个维度的重要性可以通过颜色和区域面积来展示。
在Python中,我们可以使用第三方库pyecharts来实现雷达图的绘制。下面我们将通过一个具体的例子,来教会大家如何使用Python和pyecharts来绘制雷达图。
数据概览:
首先,让我们看一下需要绘制的数据。假设我们想要展示全国药店销售额的占比,具体数据如下:
全国药店药品销售额占比
药品类型 | 占比(%) |
化学药 | 33 |
中成药 | 45 |
生物制品 | 3 |
保健品 | 9 |
中药饮片 | 6 |
其他 | 4 |
可视化实现:
接下来
- 导入必要的库和模块:
from pyecharts import options as opts
from pyecharts.charts import Radar
这行代码导入了pyecharts库的配置模块(options
)和雷达图模块(Radar
),用于创建和配置雷达图。
- 定义雷达图的数据:
data = [{"value": [33, 45, 3, 9, 6, 4], "name": "药品类型"}]
这行代码定义了雷达图的数据,包括数值和名称。在这个例子中,使用一个字典包含了药品类型的数值列表和名称。
- 定义雷达图的维度配置:
c_schema = [ {"name": "化学药", "max": 50, "min": 0}, {"name": "中成药", "max": 50, "min": 0}, {"name": "生物制品", "max": 50, "min": 0}, {"name": "保健品", "max": 50, "min": 0}, {"name": "中药饮片", "max": 50, "min": 0}, {"name": "其他", "max": 50, "min": 0}, ]
这段代码定义了雷达图的各个维度的配置。每个维度由一个字典表示,包括名称(
name
)、最大值(max
)和最小值(min
)。在这个例子中,定义了6个维度,分别对应不同的药品类型。 - 创建雷达图对象:
c = ( Radar() .add_schema( schema=c_schema, shape="circle", center=["50%", "50%"], radius="80%", angleaxis_opts=opts.AngleAxisOpts( max_=360, is_clockwise=False, interval=5, axistick_opts=opts.AxisTickOpts(is_show=False), axisline_opts=opts.AxisLineOpts(is_show=False), axislabel_opts=opts.LabelOpts(is_show=False), splitline_opts=opts.SplitLineOpts(is_show=False), ), radiusaxis_opts=opts.RadiusAxisOpts( min_=0, max_=50, interval=10, splitarea_opts=opts.SplitAreaOpts(is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)), ), polar_opts=opts.PolarOpts(), splitarea_opt=opts.SplitAreaOpts(is_show=False), splitline_opt=opts.SplitLineOpts(is_show=False), ) )
这段代码创建了一个雷达图对象。通过链式调用的方式,设置了雷达图的各种配置项,包括形状、中心位置、半径、角度轴、半径轴等。具体的配置可以参考代码中的注释。
- 添加数据系列:
.add( series_name="药品类型", data=data, areastyle_opts=opts.AreaStyleOpts(opacity=0.1), linestyle_opts=opts.LineStyleOpts(width=1), )
这段代码向雷达图对象中添加了数据系列。通过
.add()
方法,设置了数据系列的名称、数据、数据区域的样式和线条的样式。 - 设置颜色和全局配置:
.set_colors(["#4587E7"]) .set_global_opts(title_opts=opts.TitleOpts(title="中药材消费者画像数据"))
这段代码设置了雷达图的颜色和全局配置。
.set_colors()
设置了雷达图的颜色为指定的颜色值。.set_global_opts()
设置了全局配置,其中包括标题的配置。 - 渲染和保存图表:
.render("04.html")
这段代码将图表渲染为HTML文件,并保存为"04.html"。
以下是完整的代码实现:
from pyecharts import options as opts # 导入 pyecharts 库的配置模块
from pyecharts.charts import Radar # 导入雷达图模块
data = [{"value": [33, 45, 3, 9, 6, 4], "name": "药品类型"}] # 定义雷达图的数据,包括数值和名称
c_schema = [ # 定义雷达图的各个维度的配置
{"name": "化学药", "max": 50, "min": 0},
{"name": "中成药", "max": 50, "min": 0},
{"name": "生物制品", "max": 50, "min": 0},
{"name": "保健品", "max": 50, "min": 0},
{"name": "中药饮片", "max": 50, "min": 0},
{"name": "其他", "max": 50, "min": 0},
]
c = ( # 创建雷达图对象
Radar()
.add_schema( # 添加雷达图的配置
schema=c_schema, # 设置维度的配置
shape="circle", # 设置雷达图的形状为圆形
center=["50%", "50%"], # 设置雷达图的中心位置为页面的中心
radius="80%", # 设置雷达图的半径为页面宽度的80%
angleaxis_opts=opts.AngleAxisOpts( # 设置角度轴的配置
max_=360, # 角度轴的最大值为360度
is_clockwise=False, # 不顺时针显示角度轴
interval=5, # 设置角度轴刻度间隔为5度
axistick_opts=opts.AxisTickOpts(is_show=False), # 不显示角度轴刻度线
axisline_opts=opts.AxisLineOpts(is_show=False), # 不显示角度轴线
axislabel_opts=opts.LabelOpts(is_show=False), # 不显示角度轴标签
splitline_opts=opts.SplitLineOpts(is_show=False), # 不显示角度轴分割线
),
radiusaxis_opts=opts.RadiusAxisOpts( # 设置半径轴的配置
min_=0, # 半径轴的最小值为0
max_=50, # 半径轴的最大值为50
interval=10, # 设置半径轴刻度间隔为10
splitarea_opts=opts.SplitAreaOpts(is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)), # 显示半径轴的分隔区域,设置透明度为1
),
polar_opts=opts.PolarOpts(), # 极坐标系配置项
splitarea_opt=opts.SplitAreaOpts(is_show=False), # 不显示分割区域
splitline_opt=opts.SplitLineOpts(is_show=False), # 不显示分割线
)
.add( # 添加雷达图的数据系列
series_name="药品类型", # 数据系列的名称
data=data, # 数据
areastyle_opts=opts.AreaStyleOpts(opacity=0.1), # 设置数据区域的透明度为0.1
linestyle_opts=opts.LineStyleOpts(width=1), # 设置线条的宽度为1
)
.set_colors(["#4587E7"]) # 设置颜色
.set_global_opts(title_opts=opts.TitleOpts(title="中药材消费者画像数据")) # 设置全局配置,包括标题
.render("04.html") # 将图表渲染为 HTML 文件
)