Python图表美化案例有哪些?

wen python案例 1

本文目录导读:

  1. 核心工具库
  2. 案例一:使用Seaborn实现“开箱即美”
  3. 案例二:Matplotlib自定义主题(仿Nature/Science论文风格)
  4. 案例三:使用Matplotlib自定义样式(“极简+高级感”)
  5. 案例四:Plotly交互式图表(Web展示)
  6. 案例五:热力图美化(用于相关性矩阵或混淆矩阵)
  7. 根据需求选择

Python图表美化的案例非常丰富,涵盖了从简单的样式调整到复杂的自定义主题,下面我将按照工具库应用场景来分类,介绍一些经典且有代表性的美化案例。

核心工具库

  • Matplotlib:基础库,功能强大但默认样式较丑,美化主要体现在参数调整主题使用
  • Seaborn:基于Matplotlib,自带美观主题和统计图表,是快速美化的首选。
  • Plotly:交互式图表,非常适合Web展示
  • 其他proplot(科学论文风格)、prettyplotlibscienceplots等专业美化库。

使用Seaborn实现“开箱即美”

这是最简单、最通用的美化方式,Seaborn的默认主题就比Matplotlib好很多。

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
# 准备数据
tips = sns.load_dataset('tips')
# 设置主题和样式
sns.set_theme(style='whitegrid', palette='muted', font_scale=1.2)
# 绘制箱线图
plt.figure(figsize=(8, 5))
sns.boxplot(x='day', y='total_bill', hue='sex', data=tips, palette='Set2')
和轴标签,使用英文避免中文问题'Total Bill by Day and Gender')
plt.xlabel('Day of Week')
plt.ylabel('Total Bill (USD)')
# 自动调整布局并显示
plt.tight_layout()
# 去掉图例边框等微调
sns.despine(left=True, bottom=False) 
plt.show()

美化效果:背景为浅灰网格,坐标轴无上边和右边边框(despine),颜色柔和(Set2),字体变大。


Matplotlib自定义主题(仿Nature/Science论文风格)

用于学术论文的图表,需要干净、清晰、字体标准。

import matplotlib.pyplot as plt
import numpy as np
# 使用 scienceplots 库 (需要安装: pip install SciencePlots)
# 这是专门为学术论文设计的主题库
import scienceplots
# 设置风格为 IEEE 或 Nature 风格
plt.style.use(['science', 'ieee']) # 或者 ['science', 'nature']
# 生成数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
fig, ax = plt.subplots(figsize=(4, 3)) # 小尺寸适合论文单栏
# 绘制线条,使用不同线型和标记
ax.plot(x, y1, label='sin(x)', color='#D32F2F', linewidth=1.5, linestyle='-')
ax.plot(x, y2, label='cos(x)', color='#1976D2', linewidth=1.5, linestyle='--')
# 标签
ax.set_xlabel('Time (s)')
ax.set_ylabel('Amplitude')
ax.set_title('Sine and Cosine Waves')
# 图例放在内部
ax.legend(loc='upper right', frameon=False) # 去掉图例边框
# 设置刻度向内
ax.tick_params(direction='in', length=4)
# 显示网格 (可选)
# ax.grid(True, linestyle=':', alpha=0.6)
plt.tight_layout()
plt.show()

美化效果:去掉了顶部和右侧边框,坐标轴刻度向内,字体为Times New Roman或类似风格,线条粗细适中,色彩为学术常用色,整体干净整洁。


使用Matplotlib自定义样式(“极简+高级感”)

适合商业汇报或数据博客,强调视觉清晰度和高级感。

import matplotlib.pyplot as plt
import numpy as np
# 自定义一个函数来创建“暗黑”或“极简”主题
def set_dark_style():
    plt.rcParams.update({
        # 背景色
        'axes.facecolor': '#2E2E2E',
        'figure.facecolor': '#2E2E2E',
        # 坐标轴颜色
        'axes.edgecolor': '#D3D3D3',
        'axes.labelcolor': '#D3D3D3',
        'xtick.color': '#D3D3D3',
        'ytick.color': '#D3D3D3',
        # 文本颜色
        'text.color': '#D3D3D3',
        # 网格样式
        'grid.color': '#444444',
        'grid.linestyle': '--',
        'grid.alpha': 0.5,
        # 字体
        'font.family': 'sans-serif',
        'font.size': 10,
    })
# 应用自定义风格
set_dark_style()
# 生成数据
np.random.seed(42)
x = np.arange(1, 11)
y = np.random.randint(20, 60, size=10)
fig, ax = plt.subplots(figsize=(8, 5))
# 绘制柱状图,使用渐变色
colors = plt.cm.viridis(np.linspace(0.2, 0.8, 10))
ax.bar(x, y, color=colors, edgecolor='white', linewidth=1.5, width=0.7)
# 添加数据标签
for i, v in enumerate(y):
    ax.text(i+1, v + 1, str(v), ha='center', va='bottom', fontsize=9, color='#D3D3D3')
ax.set_xlabel('Category')
ax.set_ylabel('Value')
ax.set_title('Custom Dark Theme Bar Chart')
# 显示网格 (只在Y轴)
ax.grid(axis='y', alpha=0.4)
ax.set_axisbelow(True) # 让网格在柱状图下方
plt.tight_layout()
plt.show()

美化效果:暗色背景、亮色数据、渐变色彩、坐标轴标签为浅色,整体具有高级科技感,适合演示环境。


Plotly交互式图表(Web展示)

适合需要用户探索数据、鼠标悬停显示详情、缩放等场景。

import plotly.express as px
import pandas as pd
# 加载内置数据集
df = px.data.gapminder()
# 筛选2007年的数据
df_2007 = df[df['year'] == 2007]
# 创建气泡图
fig = px.scatter(
    df_2007,
    x='gdpPercap',  # X轴:人均GDP
    y='lifeExp',    # Y轴:预期寿命
    size='pop',     # 气泡大小:人口
    color='continent', # 颜色:大洲
    hover_name='country', # 悬停显示国家名
    log_x=True,     # X轴对数刻度
    size_max=60,    # 最大气泡大小'2007年世界人口、人均GDP与预期寿命',
    template='plotly_dark' # 内置暗黑主题
)
# 优化布局
fig.update_layout(
    xaxis_title='人均GDP (美元)',
    yaxis_title='预期寿命 (岁)',
    legend_title_text='大洲',
    font=dict(family='Arial, sans-serif', size=12)
)
# 显示图表 (在Jupyter Notebook中自动显示,或生成HTML文件)
# fig.show()
# fig.write_html("my_interactive_chart.html")

美化效果:交互式,鼠标悬停显示详细信息,明亮的色彩区分大洲,整体布局现代化,Plotly的默认主题已经非常美观(如plotlyplotly_darkggplot2等)。


热力图美化(用于相关性矩阵或混淆矩阵)

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
# 生成相关性数据
np.random.seed(42)
data = np.random.randn(100, 6)
df = pd.DataFrame(data, columns=['Feature A', 'Feature B', 'Feature C', 
                                  'Feature D', 'Feature E', 'Feature F'])
corr = df.corr()
# 绘制热力图
plt.figure(figsize=(8, 6))
sns.heatmap(
    corr, 
    annot=True,          # 显示数值
    fmt='.2f',           # 数值格式
    cmap='coolwarm',     # 颜色映射 (红-白-蓝)
    linewidths=0.5,      # 单元格之间的线宽
    linecolor='white',   # 线颜色
    cbar_kws={'label': '相关系数', 'shrink': 0.8}, # 颜色条设置
    vmin=-1, vmax=1,     # 色标范围
    square=True,         # 正方形单元格
    mask=np.triu(np.ones_like(corr, dtype=bool)) # 只显示下三角 (可选)
)
'特征相关性热力图', fontsize=14)
plt.xticks(rotation=45, ha='right') 
plt.yticks(rotation=0) 
plt.tight_layout()
plt.show()

美化效果:使用coolwarm冷暖色直观表示正负相关,显示数值,方框分隔清晰,只显示一半矩阵避免冗余。


根据需求选择

场景 推荐工具/方法 特点
快速出图、EDA Seaborn (sns.set_theme()) 一行代码获得美观主题,适合探索性分析。
学术论文发表 SciencePlots (plt.style.use('science')) 符合期刊要求,干净、无多余元素。
商业汇报、Dashboard Plotly (交互式) 或 Matplotlib自定义主题 交互式适合Web;静态的暗黑/极简风格适合PPT。
数据报告(静态) Matplotlib + Seaborn 结合 利用Matplotlib的灵活性和Seaborn的美观主题。
特定图表美化 热力图、堆叠图、凸包图、小提琴图等 使用cmapalphaedgecolor等参数精细调整。

核心建议

  1. 不要从零开始:优先使用 scienceplotsseabornplotly 的默认主题。
  2. 颜色调色板:使用 sns.color_palette('husl', 8)plt.cm.viridis 等专业调色板,避免使用默认的红色、蓝色、绿色组合。
  3. 字体和字号:选择无衬线字体(如Arial, Helvetica),字号要足够大,标题、轴标签、刻度要有明显层次。
  4. 去除冗余:默认情况下,很多边框、网格、图例边框、spine(坐标轴脊线)都是多余的,大胆去掉。
  5. 保存时使用高DPIplt.savefig('myfig.png', dpi=300, bbox_inches='tight')

案例涵盖了从基础到进阶的常见美化场景,你可以直接复制代码进行修改和尝试。

标签: Matplotlib Seaborn

抱歉,评论功能暂时关闭!