本文目录导读:

我来详细介绍一下Seaborn的数据可视化风格配置方法。
基础风格设置
预设风格(5种)
import seaborn as sns
import matplotlib.pyplot as plt
# 可用的风格
sns.set_style("whitegrid") # 白色网格背景
sns.set_style("darkgrid") # 深色网格背景
sns.set_style("white") # 白色无网格
sns.set_style("dark") # 深色无网格
sns.set_style("ticks") # 带刻度标记
使用示例
import numpy as np
import pandas as pd
# 生成示例数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
# 设置风格
sns.set_style("whitegrid")
sns.set_palette("husl")
plt.figure(figsize=(10, 6))
plt.plot(x, y1, label='sin(x)')
plt.plot(x, y2, label='cos(x)')'Seaborn Whitegrid Style')
plt.legend()
plt.show()
详细配置参数
上下文设置(影响尺寸和比例)
# 四种上下文
sns.set_context("paper") # 论文样式,较小
sns.set_context("notebook") # 笔记本样式(默认)
sns.set_context("talk") # 演讲样式,较大
sns.set_context("poster") # 海报样式,最大
# 自定义上下文参数
sns.set_context("notebook", font_scale=1.5, rc={"lines.linewidth": 2.5})
调色板配置
# 分类调色板
sns.set_palette("deep") # 深色
sns.set_palette("muted") # 柔和
sns.set_palette("bright") # 明亮
sns.set_palette("pastel") # 粉彩
sns.set_palette("dark") # 深色
sns.set_palette("colorblind") # 色盲友好
# 连续调色板
sns.set_palette("viridis") # 彩虹色
sns.set_palette("rocket") # 火箭色
sns.set_palette("mako") # 深蓝到浅蓝
# 自定义调色板
custom_palette = ["#FF6B6B", "#4ECDC4", "#45B7D1", "#96CEB4"]
sns.set_palette(custom_palette)
完整风格配置示例
专业图表配置
def configure_professional_style():
"""配置专业的图表风格"""
# 整体风格设置
sns.set_style("whitegrid", {
"axes.facecolor": "#FAFAFA",
"grid.color": "#E8E8E8",
"grid.linestyle": "--",
"grid.alpha": 0.7,
})
# 上下文设置
sns.set_context("notebook", {
"font.size": 12,
"axes.labelsize": 14,
"axes.titlesize": 16,
"xtick.labelsize": 10,
"ytick.labelsize": 10,
"legend.fontsize": 10,
"lines.linewidth": 2,
})
# 调色板设置
sns.set_palette("husl", 8) # HUSL色彩空间,8个颜色
# 字体设置
plt.rcParams['font.family'] = 'Arial'
plt.rcParams['font.sans-serif'] = ['Arial']
应用完整配置
# 应用配置
configure_professional_style()
# 创建数据
np.random.seed(42)
data = pd.DataFrame({
'x': range(20),
'y': np.random.randn(20).cumsum(),
'group': ['A'] * 10 + ['B'] * 10
})
# 绘制图表
fig, axes = plt.subplots(2, 2, figsize=(12, 10))
# 1. 折线图
sns.lineplot(data=data, x='x', y='y', ax=axes[0,0])
axes[0,0].set_title('Line Plot')
# 2. 散点图
sns.scatterplot(data=data, x='x', y='y', hue='group',
s=100, ax=axes[0,1])
axes[0,1].set_title('Scatter Plot')
# 3. 箱线图
sns.boxplot(data=data, x='group', y='y', ax=axes[1,0])
axes[1,0].set_title('Box Plot')
# 4. 直方图
sns.histplot(data=data, x='y', bins=15, ax=axes[1,1])
axes[1,1].set_title('Histogram')
plt.tight_layout()
plt.show()
自定义RGB颜色方案
# 公司品牌色方案
CORPORATE_COLORS = {
'primary': '#2C3E50', # 深蓝
'secondary': '#3498DB', # 亮蓝
'accent': '#E74C3C', # 红色
'info': '#2ECC71', # 绿色
'warning': '#F39C12', # 橙色
'background': '#FAFAFA', # 背景色
'grid': '#ECF0F1', # 网格色
}
def apply_corporate_style():
"""应用公司品牌配色方案"""
# 设置整体风格
sns.set_style("whitegrid", {
"axes.facecolor": CORPORATE_COLORS['background'],
"figure.facecolor": 'white',
"grid.color": CORPORATE_COLORS['grid'],
"grid.linestyle": "-",
"grid.alpha": 0.5,
"axes.edgecolor": CORPORATE_COLORS['primary'],
"axes.labelcolor": CORPORATE_COLORS['primary'],
"xtick.color": CORPORATE_COLORS['primary'],
"ytick.color": CORPORATE_COLORS['primary'],
})
# 设置调色板
brand_palette = [
CORPORATE_COLORS['primary'],
CORPORATE_COLORS['secondary'],
CORPORATE_COLORS['accent'],
CORPORATE_COLORS['info'],
CORPORATE_COLORS['warning']
]
sns.set_palette(brand_palette)
# 字体设置
plt.rcParams['font.size'] = 12
plt.rcParams['axes.titlesize'] = 14
plt.rcParams['axes.labelsize'] = 12
# 应用公司风格
apply_corporate_style()
# 创建示例图表
fig, ax = plt.subplots(figsize=(10, 6))
# 数据
categories = ['Q1', 'Q2', 'Q3', 'Q4']
values = [23, 45, 56, 78]
errors = [2, 3, 4, 3]
# 绘制柱状图
bars = ax.bar(categories, values, yerr=errors, capsize=5)
# 添加数据标签
for bar, val in zip(bars, values):
ax.text(bar.get_x() + bar.get_width()/2, bar.get_height() + 1,
f'{val}', ha='center', va='bottom')
ax.set_title('Quarterly Performance')
ax.set_xlabel('Quarter')
ax.set_ylabel('Values')
plt.tight_layout()
plt.show()
主题化风格方案
# 预设主题包
STYLE_THEMES = {
"modern": {
"style": "whitegrid",
"context": "talk",
"palette": "viridis",
"rc_params": {
"grid.linestyle": "-",
"grid.alpha": 0.3,
"axes.edgecolor": "#333333"
}
},
"elegant": {
"style": "white",
"context": "notebook",
"palette": "husl",
"rc_params": {
"font.family": "serif",
"axes.spines.top": False,
"axes.spines.right": False
}
},
"minimalist": {
"style": "ticks",
"context": "paper",
"palette": "muted",
"rc_params": {
"axes.spines.left": True,
"axes.spines.bottom": True,
"axes.spines.top": False,
"axes.spines.right": False,
"xtick.major.width": 1,
"ytick.major.width": 1
}
},
"dark": {
"style": "darkgrid",
"context": "poster",
"palette": "magma",
"rc_params": {
"figure.facecolor": "#1a1a1a",
"axes.facecolor": "#2d2d2d",
"text.color": "#ffffff",
"axes.labelcolor": "#ffffff",
"xtick.color": "#ffffff",
"ytick.color": "#ffffff"
}
}
}
def apply_theme(theme_name="modern"):
"""应用预设主题"""
if theme_name not in STYLE_THEMES:
raise ValueError(f"Theme {theme_name} not found")
theme = STYLE_THEMES[theme_name]
# 应用基本设置
sns.set_style(theme["style"], theme.get("rc_params", {}))
sns.set_context(theme["context"])
sns.set_palette(theme["palette"])
# 使用不同主题
fig, axes = plt.subplots(2, 2, figsize=(15, 10))
for ax, (theme_name, _) in zip(axes.flat, STYLE_THEMES.items()):
apply_theme(theme_name)
# 绘制示例数据
x = np.linspace(0, 10, 100)
y = np.sin(x) + np.random.randn(100) * 0.1
ax.plot(x, y, label='Data')
ax.plot(x, np.sin(x), '--', label='Trend', alpha=0.8)
ax.set_title(f'{theme_name.capitalize()} Theme')
ax.legend()
plt.tight_layout()
plt.show()
快速调色板预览
def show_palettes():
"""显示所有调色板"""
palettes = ['deep', 'muted', 'bright', 'pastel', 'dark', 'colorblind']
fig, axes = plt.subplots(2, 3, figsize=(15, 8))
for ax, palette in zip(axes.flat, palettes):
colors = sns.color_palette(palette, 10)
sns.palplot(colors, ax=ax)
ax.set_title(f'Palette: {palette}', fontsize=14)
plt.tight_layout()
plt.show()
# 显示所有调色板
show_palettes()
最佳实践建议
- 保持一致性:在同一个报告或项目中保持相同的风格配置
- 考虑受众:正式报告用专业风格,演讲用醒目风格
- 色盲友好:重要图表使用'colorblind'调色板
- 文件导出:使用
plt.savefig('figure.png', dpi=300, bbox_inches='tight')
这些配置方法可以帮助你快速调整图表的视觉效果,创建专业、美观的数据可视化图表。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播