MK
摩柯社区 - 一个极简的技术知识社区
AI 面试

Python数据可视化中的颜色和样式设置技巧

2024-09-097.4k 阅读

Python 数据可视化中颜色设置技巧

基础颜色使用

在 Python 的数据可视化库中,如 Matplotlib、Seaborn 等,使用基础颜色是最常见的操作。Matplotlib 允许直接通过颜色名称来指定颜色。例如,要绘制一个简单的折线图并设置线条颜色为红色,可以使用以下代码:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.plot(x, y, color='red')
plt.show()

这里,color='red' 明确指定了线条颜色为红色。Matplotlib 支持常见的颜色英文名称,如 'blue'(蓝色)、'green'(绿色)、'yellow'(黄色)等。

除了颜色名称,还可以使用十六进制颜色码。十六进制颜色码以 '#' 开头,后面跟着六个十六进制数字,分别表示红色、绿色和蓝色的强度。例如,要设置颜色为浅蓝色,可以使用代码:

plt.plot(x, y, color='#87CEEB')
plt.show()

这种方式在需要精确控制颜色时非常有用,因为可以通过调整十六进制值来得到任何想要的颜色。

使用颜色映射(Colormaps)

颜色映射是数据可视化中非常强大的工具,它可以根据数据的值来映射不同的颜色。在 Matplotlib 中,有多种预定义的颜色映射可供选择。

例如,使用 imshow 函数展示图像数据时,可以通过 cmap 参数指定颜色映射。假设我们有一个二维数组表示图像灰度值:

import numpy as np
import matplotlib.pyplot as plt

data = np.random.rand(10, 10)
plt.imshow(data, cmap='viridis')
plt.colorbar()
plt.show()

这里使用了 'viridis' 颜色映射,它是一种从蓝色到黄色的渐变映射,适合表示连续的数据。Matplotlib 中的颜色映射分为几种类型:

  1. 顺序型(Sequential):如 'viridis''plasma''inferno''magma' 等,适用于表示从低到高的连续数据。'viridis' 是比较常用的顺序型颜色映射,它具有良好的对比度和色彩均匀性,在不同颜色感知能力的人群中都能清晰区分。'plasma' 则在蓝色到红色的渐变中更强调紫色调,'inferno' 从黑色到明亮的橙色,'magma' 从黑色到明亮的粉色,常用于表示温度、密度等数据。
  2. 发散型(Diverging):例如 'seismic''bwr',用于展示数据围绕某个中点对称分布的情况。比如在展示温度偏差时,如果有正负偏差,'seismic' 颜色映射可以很好地用不同颜色区分正负值,中间点通常为中性颜色(如白色)。'bwr' 则是从蓝色到白色再到红色的渐变,也常用于类似的数据场景。
  3. 定性型(Qualitative):像 'Set1''Set2''Set3' 等,用于区分不同类别,颜色之间的差异较大,没有内在的顺序关系。例如在绘制多个类别不同的柱状图时,'Set1' 可以为每个类别分配独特且易于区分的颜色。

自定义颜色映射

有时候预定义的颜色映射不能满足需求,这就需要自定义颜色映射。在 Matplotlib 中,可以通过 LinearSegmentedColormap 类来创建自定义的线性分段颜色映射。

假设我们想要创建一个从绿色到红色的自定义颜色映射,并且分为三个阶段:绿色(低数值)、黄色(中间数值)、红色(高数值)。代码如下:

import matplotlib.colors as mcolors
import matplotlib.pyplot as plt
import numpy as np

cdict = {'red':   ((0.0, 0.0, 0.0),
                   (0.5, 1.0, 1.0),
                   (1.0, 1.0, 1.0)),
         'green': ((0.0, 1.0, 1.0),
                   (0.5, 1.0, 1.0),
                   (1.0, 0.0, 0.0)),
         'blue':  ((0.0, 0.0, 0.0),
                   (0.5, 0.0, 0.0),
                   (1.0, 0.0, 0.0))}
my_cmap = mcolors.LinearSegmentedColormap('my_cmap', cdict)

data = np.random.rand(10, 10)
plt.imshow(data, cmap=my_cmap)
plt.colorbar()
plt.show()

cdict 字典中,每个颜色通道('red''green''blue')都定义了一个元组序列。每个元组包含三个值:第一个值是归一化的数据值(范围从 0 到 1),第二个值是该点颜色通道的起始值,第三个值是结束值。通过调整这些值,可以精确控制颜色映射的过渡。

Seaborn 中的颜色设置

Seaborn 是基于 Matplotlib 的数据可视化库,它在颜色设置方面提供了更高级和美观的选项。

  1. 调色板(Palettes):Seaborn 有多种调色板可供选择。例如,要使用 'deep' 调色板绘制柱状图,可以这样写:
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt

data = {'Category': ['A', 'B', 'C', 'D'], 'Value': [25, 40, 15, 30]}
df = pd.DataFrame(data)
sns.barplot(x='Category', y='Value', palette='deep', data=df)
plt.show()

Seaborn 的调色板类型包括: - 分类调色板(Categorical Palettes):如 'deep''muted''bright''pastel''dark''colorblind''deep' 调色板提供了丰富且对比度较高的颜色,适合区分不同类别;'muted' 调色板颜色较为柔和,适合在需要营造温和视觉效果时使用;'bright' 调色板颜色鲜艳,视觉冲击力强;'pastel' 调色板使用柔和的浅色,给人清新的感觉;'dark' 调色板颜色较深,适合在深色背景下使用;'colorblind' 调色板专门为色盲人群设计,通过合理的颜色搭配确保不同类别在色盲眼中也能清晰区分。 - 顺序调色板(Sequential Palettes):类似于 Matplotlib 的顺序型颜色映射,如 'Blues''Greens''Reds' 等,以单一颜色的渐变来表示数据的顺序变化。这些调色板可以通过添加 _d(深色调)或 _l(浅色调)后缀来调整颜色的深浅,例如 'Blues_d' 表示深蓝色调的顺序调色板。 - 发散调色板(Diverging Palettes):如 'RdBu''PuOr' 等,用于展示围绕中点对称的数据分布,与 Matplotlib 的发散型颜色映射功能类似,但 Seaborn 的调色板在色彩搭配上更具美观性和专业性。

  1. 使用 hue 参数设置颜色:在许多 Seaborn 绘图函数中,可以通过 hue 参数根据数据的某个类别变量来设置颜色。例如,假设我们有一个包含不同类别和数值的数据框,想要按类别区分颜色绘制散点图:
data = {'Category': ['A', 'A', 'B', 'B', 'B'], 'X': [1, 2, 3, 4, 5], 'Y': [5, 4, 3, 2, 1]}
df = pd.DataFrame(data)
sns.scatterplot(x='X', y='Y', hue='Category', data=df)
plt.show()

这里,hue='Category' 使得不同类别的数据点以不同颜色显示,方便区分数据中的不同类别特征。

Python 数据可视化中样式设置技巧

Matplotlib 中的样式设置

  1. 线条样式:在 Matplotlib 中绘制线条时,可以通过 linestyle 参数设置线条的样式。常见的线条样式有:
    • '-':实线,这是默认的线条样式。例如:
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y1 = np.sin(x)
plt.plot(x, y1, linestyle='-')
plt.show()
- `'--'`:虚线。代码如下:
y2 = np.cos(x)
plt.plot(x, y2, linestyle='--')
plt.show()
- `'-.'`:点划线。使用方式为:
y3 = np.tan(x)
plt.plot(x, y3, linestyle='-.')
plt.show()
- `':'`:点线。例如:
y4 = np.exp(x)
plt.plot(x, y4, linestyle=':')
plt.show()
  1. 标记样式:可以通过 marker 参数为数据点添加标记。Matplotlib 提供了多种标记样式,如 'o'(圆形)、's'(正方形)、'^'(三角形)、'*'(星号)等。以下是使用不同标记样式的示例:
x = np.array([1, 2, 3, 4, 5])
y1 = np.array([2, 4, 6, 8, 10])
plt.plot(x, y1, marker='o')
plt.show()

y2 = np.array([10, 8, 6, 4, 2])
plt.plot(x, y2, marker='s')
plt.show()

y3 = np.array([1, 4, 9, 16, 25])
plt.plot(x, y3, marker='^')
plt.show()

y4 = np.array([1, 1, 1, 1, 1])
plt.plot(x, y4, marker='*')
plt.show()

还可以同时设置线条样式和标记样式,例如绘制带有圆形标记的虚线:

plt.plot(x, y1, linestyle='--', marker='o')
plt.show()
  1. 图形外观样式:Matplotlib 提供了 style 模块来设置整个图形的外观样式。有多种预定义的样式可供选择,如 'ggplot''seaborn''bmh' 等。要使用 'ggplot' 样式,可以在绘图代码前添加以下语句:
import matplotlib.pyplot as plt
import numpy as np
plt.style.use('ggplot')

x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.plot(x, y)
plt.show()

'ggplot' 样式模仿了 ggplot2 库的风格,图形具有简洁的网格和清晰的配色。'seaborn' 样式则采用了 Seaborn 库的默认美观风格,'bmh' 样式具有深色背景和鲜明的线条,适合在某些特定场景下使用。除了使用预定义样式,还可以自定义样式。可以通过创建一个包含样式设置的字典,并使用 plt.style.context 来应用自定义样式。例如:

custom_style = {
    'axes.facecolor': 'lightgray',
    'figure.facecolor': 'white',
    'lines.linewidth': 2,
    'font.size': 12
}
with plt.style.context(custom_style):
    x = np.linspace(0, 10, 100)
    y = np.sin(x)
    plt.plot(x, y)
    plt.show()

在这个自定义样式中,设置了坐标轴背景颜色为浅灰色,图形背景颜色为白色,线条宽度为 2,字体大小为 12。

Seaborn 中的样式设置

  1. 主题(Themes):Seaborn 提供了多种主题来设置图形的整体外观。通过 set_style 函数可以选择不同的主题。例如,要使用 'darkgrid' 主题:
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt

data = {'Category': ['A', 'B', 'C', 'D'], 'Value': [25, 40, 15, 30]}
df = pd.DataFrame(data)
sns.set_style('darkgrid')
sns.barplot(x='Category', y='Value', data=df)
plt.show()

Seaborn 的主题包括: - 'darkgrid':具有深色网格背景,数据元素在深色背景上更加突出,适合在光线充足的环境下展示数据。 - 'whitegrid':白色背景搭配浅色网格,视觉效果较为清爽,是比较常用的主题之一,尤其适合展示色彩丰富的数据。 - 'dark':深色背景,适合营造沉稳、专业的氛围,常用于需要突出数据而弱化背景干扰的场景。 - 'white':纯白色背景,简洁明了,适合展示简单、干净的数据,避免过多背景元素分散注意力。 - 'ticks':在 'white' 主题的基础上,在坐标轴上添加刻度标记,方便读者更准确地读取数据值。

  1. 调整图形元素:Seaborn 可以方便地调整图形中各种元素的样式。例如,在绘制柱状图时,可以通过 barplot 函数的参数来设置柱子的宽度、颜色等。假设我们想要设置柱子的宽度为 0.8,并使用 'pastel' 调色板:
data = {'Category': ['A', 'B', 'C', 'D'], 'Value': [25, 40, 15, 30]}
df = pd.DataFrame(data)
sns.barplot(x='Category', y='Value', palette='pastel', width=0.8, data=df)
plt.show()

对于其他绘图函数,如 scatterplotlineplot 等,也有类似的参数可以调整图形元素的样式。例如在 scatterplot 中,可以通过 s 参数设置点的大小,通过 alpha 参数设置点的透明度。如下代码展示了如何设置点的大小和透明度:

data = {'X': [1, 2, 3, 4, 5], 'Y': [5, 4, 3, 2, 1], 'Size': [100, 200, 300, 400, 500]}
df = pd.DataFrame(data)
sns.scatterplot(x='X', y='Y', s='Size', alpha=0.7, data=df)
plt.show()

这里,s='Size' 表示根据数据框中的 'Size' 列来设置点的大小,alpha=0.7 设置了点的透明度为 0.7,使得在数据点较多时,不会因为重叠而完全遮挡。

Plotly 中的样式设置

  1. 交互式图形样式:Plotly 是一个用于创建交互式数据可视化的库。在 Plotly 中,可以通过 layout 参数来设置图形的样式。例如,创建一个简单的折线图并设置其标题、坐标轴标签和线条颜色:
import plotly.graph_objects as go
import numpy as np

x = np.linspace(0, 10, 100)
y = np.sin(x)
fig = go.Figure()
fig.add_trace(go.Scatter(x=x, y=y, mode='lines', line=dict(color='blue', width=2)))
fig.update_layout(
    title='Sine Wave',
    xaxis_title='X Axis',
    yaxis_title='Y Axis'
)
fig.show()

在这段代码中,line=dict(color='blue', width=2) 设置了线条颜色为蓝色,宽度为 2。update_layout 方法用于设置图形的布局,包括标题、坐标轴标签等。

  1. 主题和模板:Plotly 提供了多种主题和模板来快速改变图形的外观。例如,要使用 'plotly_dark' 主题:
import plotly.graph_objects as go
import numpy as np

x = np.linspace(0, 10, 100)
y = np.sin(x)
fig = go.Figure()
fig.add_trace(go.Scatter(x=x, y=y, mode='lines'))
fig.update_layout(template='plotly_dark')
fig.show()

'plotly_dark' 主题为图形提供了深色背景,使得线条和数据点在深色环境下更加突出。除了内置主题,还可以自定义模板。可以通过创建一个包含各种样式设置的字典,并将其作为模板应用到图形中。例如:

custom_template = {
    'layout': {
        'title': {
            'font': {
              'size': 24,
                'color': 'white'
            }
        },
        'xaxis': {
            'title': {
                'text': 'X Axis',
                'font': {
                  'size': 18,
                    'color': 'white'
                }
            }
        },
        'yaxis': {
            'title': {
                'text': 'Y Axis',
                'font': {
                  'size': 18,
                    'color': 'white'
                }
            }
        },
        'plot_bgcolor': 'black',
        'paper_bgcolor': 'black'
    }
}
fig = go.Figure()
fig.add_trace(go.Scatter(x=x, y=y, mode='lines'))
fig.update_layout(template=custom_template)
fig.show()

在这个自定义模板中,设置了标题、坐标轴标签的字体大小和颜色,以及图形背景和纸张背景颜色为黑色,创建了一个适合在黑暗模式下展示的模板。

  1. 标记和样式细节:在 Plotly 中绘制散点图时,可以通过 marker 参数设置标记的样式、颜色、大小等细节。例如:
import plotly.graph_objects as go
import numpy as np

x = np.random.randn(100)
y = np.random.randn(100)
fig = go.Figure()
fig.add_trace(go.Scatter(x=x, y=y, mode='markers',
                         marker=dict(
                             color='red',
                             size=10,
                             symbol='square',
                             line=dict(width=2, color='black')
                         )))
fig.show()

这里,marker=dict(color='red', size=10, symbol='square', line=dict(width=2, color='black')) 设置了标记为红色正方形,大小为 10,并且标记边缘线条宽度为 2,颜色为黑色,通过这些设置可以使散点图的标记更加个性化和易于区分。

通过上述在不同库中对颜色和样式的设置技巧,可以创建出各种美观、清晰且富有表现力的数据可视化图形,更好地展示和传达数据中的信息。无论是简单的数据探索还是专业的报告展示,这些技巧都能极大提升可视化效果。