文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

超强,18 个必会的可视化技术

2024-11-30 01:18

关注

今天给大家分享 18 个必会的数据可视化技术。

首先,我们使用如下代码生成一个示例数据集。

import pandas as pd
import numpy as np

# Generate sample data
np.random.seed(0)
dates = pd.date_range(start='2023-01-01', end='2023-12-31', freq='D')
products = ['Product A', 'Product B', 'Product C']
sales = pd.DataFrame({
    'Date': np.random.choice(dates, 300),
    'Product': np.random.choice(products, 300),
    'Sales': np.random.randint(100, 1000, size=300)
})

1.折线图

折线图适合可视化随时间变化的趋势。

import matplotlib.pyplot as plt

# Data preprocessing
sales_by_date = sales.groupby('Date')['Sales'].sum()

# Visualization
plt.figure(figsize=(10, 6))
plt.plot(sales_by_date.index, sales_by_date.values, marker='o', linestyle='-')
plt.title('Sales Trend Over Time')
plt.xlabel('Date')
plt.ylabel('Sales')
plt.grid(True)
plt.show()

图片

2.条形图

条形图非常适合比较分类数据。

sales_by_product = sales.groupby('Product')['Sales'].sum()

# Visualization
plt.figure(figsize=(10, 6))
sales_by_product.plot(kind='bar', color='skyblue')
plt.title('Total Sales by Product')
plt.xlabel('Product')
plt.ylabel('Sales')
plt.xticks(rotatinotallow=45)
plt.grid(axis='y')
plt.show()

图片

3.散点图

散点图对于可视化两个变量之间的关系非常有效。

import seaborn as sns

# Data preprocessing
sales_by_product = sales.groupby('Product')['Sales'].sum().reset_index()

# Visualization
plt.figure(figsize=(10, 6))
sns.scatterplot(data=sales, x='Date', y='Sales', hue='Product')
plt.title('Sales Scatter Plot Over Time')
plt.xlabel('Date')
plt.ylabel('Sales')
plt.legend(title='Product')
plt.grid(True)
plt.show()

4.饼图

饼图对于显示整体的比例很有用。

# Data preprocessing
sales_by_product = sales.groupby('Product')['Sales'].sum()

# Visualization
plt.figure(figsize=(8, 8))
plt.pie(sales_by_product, labels=sales_by_product.index, autopct='%1.1f%%', startangle=140)
plt.title('Sales Distribution by Product')
plt.axis('equal')
plt.show()

5.直方图

直方图有助于理解数值数据的分布。

# Data preprocessing
sales_per_day = sales.groupby('Date')['Sales'].sum()

# Visualization
plt.figure(figsize=(10, 6))
plt.hist(sales_per_day, bins=20, color='lightblue', edgecolor='black')
plt.title('Distribution of Daily Sales')
plt.xlabel('Sales')
plt.ylabel('Frequency')
plt.grid(True)
plt.show()

图片

6.箱线图

箱线图对于显示数据分布和识别异常值非常有用。

# Visualization
plt.figure(figsize=(10, 6))
sns.boxplot(data=sales, x='Product', y='Sales')
plt.title('Sales Distribution by Product')
plt.xlabel('Product')
plt.ylabel('Sales')
plt.grid(True)
plt.show()

7.热图

热图可以揭示密集数据集中的模式和相关性。

# Data preprocessing
sales_pivot = sales.pivot_table(index='Date', columns='Product', values='Sales', aggfunc='sum')

# Visualization
plt.figure(figsize=(10, 8))
sns.heatmap(sales_pivot, cmap='Blues')
plt.title('Sales Heatmap by Date and Product')
plt.xlabel('Product')
plt.ylabel('Date')
plt.show()

8.气泡图

气泡图与散点图类似,但使用不同的气泡大小来表示附加维度。气泡图添加了一个视觉维度,可以根据销售量和比例来比较产品。

# Data preprocessing
sales_by_product = sales.groupby('Product')['Sales'].sum()
product_sizes = sales_by_product / sales_by_product.max() * 100  # Scale for bubble sizes

# Visualization
plt.figure(figsize=(10, 6))
plt.scatter(sales_by_product.index, sales_by_product.values, s=product_sizes, alpha=0.5)
plt.title('Sales by Product (Bubble Chart)')
plt.xlabel('Product')
plt.ylabel('Sales')
plt.grid(True)
plt.show()

9.树状图

树状图非常适合使用嵌套矩形显示分层数据。

import squarify  

# Data preprocessing
sales_by_product = sales.groupby('Product')['Sales'].sum()

# Visualization
plt.figure(figsize=(10, 8))
squarify.plot(sizes=sales_by_product, label=sales_by_product.index, alpha=0.8)
plt.title('Sales Distribution by Product (Treemap)')
plt.axis('off')
plt.show()

图片

10.桑基图

桑基图显示节点之间的数据或资源流。

from matplotlib.sankey import Sankey

# Data preprocessing
product_sales = sales.groupby('Product')['Sales'].sum()
product_sales_diff = product_sales.diff().fillna(0)

# Visualization
plt.figure(figsize=(10, 8))
sankey = Sankey(flows=product_sales_diff.values, labels=product_sales_diff.index)
sankey.finish()
plt.title('Sales Flow Between Products (Sankey Diagram)')
plt.show()

11.小提琴图

小提琴图结合了箱线图和核密度图的特征,可以更丰富地理解数据的分布。

plt.figure(figsize=(10, 6))
sns.violinplot(data=sales, x='Product', y='Sales')
plt.title('Sales Distribution by Product (Violin Plot)')
plt.xlabel('Product')
plt.ylabel('Sales')
plt.grid(True)
plt.show()

12.雷达图

雷达图可用于比较不同类别的多个定量变量。

sales_by_product = sales.groupby('Product')['Sales'].sum()
max_sales = sales_by_product.max()

# Visualization
labels=np.array(sales_by_product.index)
stats=sales_by_product.values

angles=np.linspace(0, 2*np.pi, len(labels), endpoint=False).tolist()

fig, ax = plt.subplots(figsize=(10, 6), subplot_kw=dict(polar=True))
ax.fill(angles, stats, color='skyblue', alpha=0.25)
ax.plot(angles, stats, color='blue', linewidth=2)
ax.set_yticklabels([])
plt.title('Sales Comparison by Product (Radar Chart)')
ax.set_xticks(angles)
ax.set_xticklabels(labels)
plt.show()

图片

13.词云

词云是一种视觉上吸引人的方式来表示文本数据,其中每个单词的大小表示其频率。

from wordcloud import WordCloud

# Data preprocessing (assuming there is a text column in the sales dataset)
text_data = ' '.join(sales['Product'])

# Visualization
wordcloud = WordCloud(width=800, height=400, background_color='white').generate(text_data)

plt.figure(figsize=(10, 6))
plt.imshow(wordcloud, interpolatinotallow='bilinear')
plt.title('Word Cloud of Products')
plt.axis('off')
plt.show()

14.平行坐标图

平行坐标图对于可视化多变量数据非常有用,特别是对于比较不同类别的变量时。

from pandas.plotting import parallel_coordinates

# Assuming there are multiple numerical columns in the sales dataset
# and 'Product' is a categorical variable
plt.figure(figsize=(10, 6))
parallel_coordinates(sales, 'Product', colormap='viridis')
plt.title('Parallel Coordinates Plot of Sales Variables by Product')
plt.xlabel('Variables')
plt.ylabel('Values')
plt.xticks(rotatinotallow=45)
plt.show()

15.六边形图

六边形图可用于通过将数据分箱到六边形箱中来可视化大型数据集的分布。

plt.figure(figsize=(10, 6))
plt.hexbin(range(len(sales)), sales['Sales'], gridsize=20, cmap='Blues')
plt.colorbar(label='count in bin')
plt.title('Hexbin Plot of Sales Over Time')
plt.xlabel('Time')
plt.ylabel('Sales')
plt.show()

16.极坐标图

极坐标图对于可视化循环数据非常有用,例如周期性趋势或方向数据。

plt.figure(figsize=(10, 8))
plt.subplot(111, polar=True)
theta = np.linspace(0, 2*np.pi, len(sales))
r = sales['Sales']
plt.plot(theta, r)
plt.title('Polar Plot of Sales Over Time')
plt.show()

17.KDE 图

KDE 图估计连续变量的概率密度函数,提供对数据基本分布的洞察。

plt.figure(figsize=(10, 6))
sns.kdeplot(data=sales, x='Sales', shade=True, color='skyblue')
plt.title('Kernel Density Estimation (KDE) Plot of Sales')
plt.xlabel('Sales')
plt.ylabel('Density')
plt.grid(True)
plt.show()

18. 配对图

配对图可视化数据集中多个变量之间的成对关系。

plt.figure(figsize=(10, 8))
sns.pairplot(sales)
plt.suptitle('Pairwise Relationships Between Variables')
plt.show()
来源:程序员学长内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯