问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

与排序和比较相关的可视化图表总结

创作时间:
作者:
@小白创作中心

与排序和比较相关的可视化图表总结

引用
CSDN
1.
https://blog.csdn.net/2301_77970732/article/details/146487403

数据可视化是数据分析中至关重要的一环,它能够帮助我们更直观地理解数据背后的故事。本文总结了7种与排序和比较相关的图表类型,包括柱状图、环形柱状图、子弹图、哑铃图、雷达图、平行坐标图和词云图。每种图表都包含了其特点、适用场景以及Python代码实现,希望能帮助读者更好地理解和应用这些图表。

柱状图

柱状图是最常见的数据可视化图表之一,通过矩形高度或长度展示离散类别间的数值对比。柱状图直观性强,支持多维度分组(堆积/簇状柱状图),适合展示排名。但当类别过多时易拥挤,无法展示时间序列趋势。

适用场景:

  • 不同类别间的数值比较
  • 时间序列数据对比
  • 频率分布展示
  • 排名数据可视化
import matplotlib.pyplot as plt  
import numpy as np  

categories = ['Q1', 'Q2', 'Q3', 'Q4']  
values = [850, 1200, 980, 1500]  
colors = ['#4C72B0', '#55A868', '#C44E52', '#8172B2']  

plt.figure(figsize=(10, 6))  
bars = plt.bar(categories,  
values,  
color=colors,  
edgecolor='black',  
linewidth=1.2)  

plt.title('Electronics Sales by Quarter (2023)', fontsize=14, pad=20)  
plt.xlabel('Quarter', fontsize=12)  
plt.ylabel('Sales (Million USD)', fontsize=12)  
plt.ylim(0, 1600)  

for bar in bars:  
height = bar.get_height()  
plt.text(bar.get_x() + bar.get_width()/2.,  
height + 20,  
f'{height}',  
ha='center',  
va='bottom')  

plt.grid(axis='y',  
linestyle='--',  
alpha=0.7,  
which='both')  

plt.xticks(fontsize=10)  
plt.yticks(np.arange(0, 1601, 200), fontsize=10)  
plt.tight_layout()  
plt.show()  

环形柱状图

环形柱状图是一种具有环形布局的柱状图,数据以同心圆的形式排列,柱状条从圆心向外辐射延伸(或反向),长度代表数值大小,类似传统柱状图的“弯曲版”。环形柱状图比传统柱状图更具设计感和创意性,适合吸引观众注意。但当类别过多时会导致拥挤,且人类视觉对弧形长度的敏感度低于直线长度,精确对比数值可能较困难。

适用场景:

  • 美观优先的展示
  • 周期性数据
  • 类别数量适中
  • 相对比较而非精确值
import matplotlib.pyplot as plt
import numpy as np

def create_bullet_graph(data, labels, ranges, target, title, figsize=(8, 3)):
    fig, ax = plt.subplots(figsize=figsize)
    ax.set_aspect('auto')
    ax.axis('off') # 隐藏坐标轴

    range_colors = ['#eeeeee', '#cccccc', '#aaaaaa'] # 背景分段颜色(灰阶)
    bar_color = '#666666' # 主条形颜色
    target_color = 'red' # 目标线颜色

    for i, (start, end) in enumerate(ranges):
        ax.barh(labels, end - start, left=start, height=0.5, color=range_colors[i])

    ax.barh(labels, data, height=0.2, color=bar_color, edgecolor='black')
    ax.vlines(target, -0.2, len(labels) - 0.8, color=target_color, linewidth=2)

    for i, (value, label) in enumerate(zip(data, labels)):
        ax.text(value + 1, i, f'{value}', va='center', ha='left')

    ax.set_title(title, pad=20, fontweight='bold')
    plt.tight_layout()
    return fig

data = [65, 40, 85] # 实际值
labels = ['Sales', 'Profit', 'Growth'] # 指标名称
ranges = [[0, 30], [30, 70], [70, 100]] # 背景分段(差/中/优)
target = [75, 50, 90] # 目标值

create_bullet_graph(data, labels, ranges, target, 'Performance Metrics (Q1)')
plt.show()

哑铃图(Dumbbell Plot)

哑铃图(Dumbbell Plot),也称为 DNA图 或 双点图,用于比较同一组别在两个时间点或条件下的数值变化。哑铃图通过线段连接两个点,清晰展示变化方向(增长/减少)和幅度。哑铃图简洁性,避免传统条形图的冗余,突出差异。可平行展示多组数据(如不同部门、产品)。

应用场景:

  • 时间趋势对比
  • AB测试结果
  • 排名变化
import matplotlib.pyplot as plt  
import numpy as np  

def create_dumbbell_plot(labels, start_values, end_values, title="Dumbbell Plot", figsize=(10, 6)):  
    fig, ax = plt.subplots(figsize=figsize)  
    y_pos = np.arange(len(labels))  

    start_color = '#1f77b4' # 起始点颜色  
    end_color = '#ff7f0e' # 结束点颜色  
    line_color = '#7f7f7f' # 连接线颜色  

    for y, start, end in zip(y_pos, start_values, end_values):  
        ax.plot([start, end], [y, y], color=line_color, linestyle='-', linewidth=1, alpha=0.6)  

    ax.scatter(start_values, y_pos, color=start_color, label='Start (2022)', s=100, edgecolor='black', zorder=3)  
    ax.scatter(end_values, y_pos, color=end_color, label='End (2023)', s=100, edgecolor='black', zorder=3)  

    for y, start, end in zip(y_pos, start_values, end_values):  
        ax.text(start, y, f'{start}', ha='right', va='center', fontsize=10, bbox=dict(facecolor='white', alpha=0.7))  
        ax.text(end, y, f'{end}', ha='left', va='center', fontsize=10, bbox=dict(facecolor='white', alpha=0.7))  

    ax.set_yticks(y_pos)  
    ax.set_yticklabels(labels, fontsize=12)  
    ax.set_xlabel('Value', fontsize=12)  
    ax.set_title(title, fontsize=14, pad=20)  
    ax.grid(axis='x', linestyle='--', alpha=0.6)  
    ax.legend(loc='upper right', framealpha=1)  
    plt.tight_layout()  
    return fig  

labels = ['Product A', 'Product B', 'Product C', 'Product D']  
start_values = [50, 75, 30, 90] # 2022年数据  
end_values = [65, 60, 45, 85] # 2023年数据  

create_dumbbell_plot(labels, start_values, end_values, title="Sales Comparison (2022 vs 2023)")  
plt.show()  

雷达图(Radar Chart / Spider Chart)

雷达图(Radar Chart),也称为 蜘蛛图(Spider Chart) 或 星形图(Star Plot),是一种多变量数据可视化工具。雷达图在同一个极坐标系中展示多个变量(如技能评估、产品属性)。每个数据点连接形成多边形,便于直观比较不同组别的整体表现。极坐标系统:变量均匀分布在圆周上,数值从中心向外辐射。雷达图适合展示多维度数据的相对强弱,直观呈现整体平衡性(如“木桶效应”)。但变量过多时易混乱(建议不超过8个维度)。面积可能误导对比(人类视觉对面积敏感度低于长度)。

应用场景:

  • 能力评估
  • 产品对比
  • 游戏角色属性
  • 市场分析
import numpy as np  
import matplotlib.pyplot as plt  

def create_radar_chart(categories, values, title, color='blue', alpha=0.25):  
    N = len(categories)  
    angles = np.linspace(0, 2 * np.pi, N, endpoint=False).tolist()  
    values += values[:1] # 闭合图形  
    angles += angles[:1]  

    fig = plt.figure(figsize=(8, 8))  
    ax = fig.add_subplot(111, polar=True)  

    ax.plot(angles, values, color=color, linewidth=2, linestyle='solid')  
    ax.fill(angles, values, color=color, alpha=alpha)  

    ax.set_xticks(angles[:-1])  
    ax.set_xticklabels(categories, fontsize=12)  

    ax.set_rlabel_position(30)  
    plt.yticks([20, 40, 60, 80, 100], ["20", "40", "60", "80", "100"], color="grey", size=10)  
    plt.ylim(0, 100)  

    plt.title(title, size=15, pad=20)  
    plt.tight_layout()  
    return fig  

categories = ['编程', '沟通', '管理', '设计', '数据分析', '创新']  
values = [90, 70, 85, 60, 75, 80]  

create_radar_chart(categories, values, title="员工技能评估", color="#1f77b4", alpha=0.3)  
plt.show()  

平行坐标图(Parallel Coordinates Plot)

平行坐标图(Parallel Coordinates Plot)是一种多维数据可视化方法,适用于分析高维数据的模式、聚类和异常值。平行坐标图在平行纵轴上展示多个变量,每个数据点表示为一条折线。通过线条的走向和交叉情况,观察变量间的相关性或异常模式。通常需要对变量进行标准化(如Min-Max缩放),避免量纲影响。平行坐标图常用于机器学习特征分析、多维数据聚类、异常检测和产品性能对比。

import pandas as pd  
import matplotlib.pyplot as plt  
from sklearn.preprocessing import MinMaxScaler  

data = {  
    'Speed': [10, 20, 15, 30],  
    'Cost': [50, 30, 40, 20],  
    'Weight': [200, 150, 180, 100],  
    'Durability': [8, 6, 7, 9]  
}  

df = pd.DataFrame(data)  

scaler = MinMaxScaler()  
df_scaled = pd.DataFrame(scaler.fit_transform(df), columns=df.columns)  

plt.figure(figsize=(10, 6))  
for i in range(len(df_scaled)):  
    plt.plot(df_scaled.columns, df_scaled.iloc[i], marker='o', label=f'Sample {i+1}')  

plt.title("Parallel Coordinates Plot", pad=20)  
plt.xticks(rotation=45)  
plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left')  
plt.grid(alpha=0.3)  
plt.show()  

词云图(Word Cloud)

词云图(Word Cloud)是一种文本数据的可视化形式,通过不同大小、颜色的词语展示词频或重要性。词频越高,显示越大。词云图视觉冲击力强,适合快速传达文本主题。支持形状、颜色、字体等个性化设置。词云图直观展示高频词,适合文本摘要。设计灵活,可嵌入报告或海报。但无法精确量化词频(需辅助柱状图)。过多词语会降低可读性。

应用场景:

  • 用户评论分析
  • 社交媒体话题
  • 演讲稿优化
  • 品牌宣传
from wordcloud import WordCloud  
import matplotlib.pyplot as plt  

text = "Python Python Java JavaScript C++ Python Ruby JavaScript Python"  

wordcloud = WordCloud(width=800, height=400,  
background_color='white',  
colormap='viridis').generate(text)  

plt.figure(figsize=(10, 5))  
plt.imshow(wordcloud, interpolation='bilinear')  
plt.axis('off')  
plt.show()  

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号