超強,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()

























