超強,18 個必會的可視化技術(shù)
大家好,我是小寒。
今天給大家分享 18 個必會的數(shù)據(jù)可視化技術(shù)。
首先,我們使用如下代碼生成一個示例數(shù)據(jù)集。
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.條形圖
條形圖非常適合比較分類數(shù)據(jù)。
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.散點圖
散點圖對于可視化兩個變量之間的關(guān)系非常有效。
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.直方圖
直方圖有助于理解數(shù)值數(shù)據(jù)的分布。
# 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.箱線圖
箱線圖對于顯示數(shù)據(jù)分布和識別異常值非常有用。
# 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.熱圖
熱圖可以揭示密集數(shù)據(jù)集中的模式和相關(guān)性。
# 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.氣泡圖
氣泡圖與散點圖類似,但使用不同的氣泡大小來表示附加維度。氣泡圖添加了一個視覺維度,可以根據(jù)銷售量和比例來比較產(chǎn)品。
# 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.樹狀圖
樹狀圖非常適合使用嵌套矩形顯示分層數(shù)據(jù)。
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.?;鶊D
?;鶊D顯示節(jié)點之間的數(shù)據(jù)或資源流。
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.小提琴圖
小提琴圖結(jié)合了箱線圖和核密度圖的特征,可以更豐富地理解數(shù)據(jù)的分布。
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.雷達(dá)圖
雷達(dá)圖可用于比較不同類別的多個定量變量。
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.詞云
詞云是一種視覺上吸引人的方式來表示文本數(shù)據(jù),其中每個單詞的大小表示其頻率。
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.平行坐標(biāo)圖
平行坐標(biāo)圖對于可視化多變量數(shù)據(jù)非常有用,特別是對于比較不同類別的變量時。
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.六邊形圖
六邊形圖可用于通過將數(shù)據(jù)分箱到六邊形箱中來可視化大型數(shù)據(jù)集的分布。
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.極坐標(biāo)圖
極坐標(biāo)圖對于可視化循環(huán)數(shù)據(jù)非常有用,例如周期性趨勢或方向數(shù)據(jù)。
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 圖估計連續(xù)變量的概率密度函數(shù),提供對數(shù)據(jù)基本分布的洞察。
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. 配對圖
配對圖可視化數(shù)據(jù)集中多個變量之間的成對關(guān)系。
plt.figure(figsize=(10, 8))
sns.pairplot(sales)
plt.suptitle('Pairwise Relationships Between Variables')
plt.show()