Python设计可视化库

1 matplotlib(静态)

Matplotlib 是一个用于创建静态、交互式和动画可视化的Python库。它提供了一个类似于MATLAB的绘图框架,使得用户能够轻松地创建高质量的图表和图形。Matplotlib 广泛用于数据可视化,特别是在科学计算和工程领域。推荐阅读(点击阅读👉):玩转Matplotlib的10个高级技巧

以下是Matplotlib的一些主要特点:

  • 多平台:支持多种操作系统,包括Windows、Linux和macOS。
  • 多种输出格式:可以生成多种格式的图形,如PNG、PDF、SVG、EPS等。
  • 丰富的图表类型:支持线图、散点图、柱状图、直方图、箱线图等多种图表类型。
  • 自定义能力:用户可以自定义图表的各个方面,包括颜色、线型、标记、图例、标题等。
  • 交互式工具:提供了交云式界面,如可以缩放和拖动的图表。
  • 动画支持:可以创建动画图表,展示数据随时间的变化。
  • 扩展性:可以通过扩展包支持更多的功能,如3D绘图等。

优点:

  • 易于解释的数据属性

    在分析数据时,快速了解数据分布情况往往非常有用的。例如,如果你想检查拥有最多粉丝的前100名用户的分布情况,通常Matplotlib就足够了。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    import pandas as pd  
    import matplotlib.pyplot as plt

    new_profile = pd.read_csv('https://gist.githubusercontent.com/khuyentran1401/98658198f0ef0cb12abb34b4f2361fd8/raw/ece16eb32e1b41f5f20c894fb72a4c198e86a5ea/github_users.csv')

    top_followers = new_profile.sort_values(by="followers", axis=0, ascending=False)[:100]
    fig = plt.figure()
    plt.bar(top_followers.user_name, top_followers.followers)
    plt.show()
  • 多样性

    Matplotlib的功能非常全面,能够生成各种类型的图形。Matplotlib的**网站[2]**提供了全面的文档和各种图形的图库,使得它很容易找到几乎任何类型的绘图的教程。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    fig = plt.figure()

    plt.text(
    0.6,
    0.7,
    "learning",
    size=40,
    rotation=20.0,
    ha="center",
    va="center",
    bbox=dict(
    boxstyle="round",
    ec=(1.0, 0.5, 0.5),
    fc=(1.0, 0.8, 0.8),
    ),
    )

    plt.text(
    0.55,
    0.6,
    "machine",
    size=40,
    rotation=-25.0,
    ha="right",
    va="top",
    bbox=dict(
    boxstyle="square",
    ec=(1.0, 0.5, 0.5),
    fc=(1.0, 0.8, 0.8),
    ),
    )

    plt.show()

缺点:

  • 虽然Matplotlib几乎可以绘制任何东西,但生成非基本的图或为审美目的调整图可能很复杂。如果你打算向他人展示你的数据,定制X轴、Y轴和其他绘图元素可能需要大量的努力。这是由于Matplotlib的低级接口造成的。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    num_features = new_profile.select_dtypes("int64")
    correlation = num_features.corr()

    fig, ax = plt.subplots()
    im = plt.imshow(correlation)

    ax.set_xticklabels(correlation.columns)
    ax.set_yticklabels(correlation.columns)

    plt.setp(ax.get_xticklabels(),
    rotation=45,
    ha="right",
    rotation_mode="anchor")
    plt.show()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import matplotlib.pyplot as plt
%matplotlib inline

# 设置支持中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']
# 设置图像标题字体
plt.rcParams['axes.unicode_minus'] = False

# 数据
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]

# 创建一个新的图形
plt.figure(figsize=(9,6))

# 绘制折线图
plt.plot(x, y, marker='o', linestyle='-', color='r', label='Data Line')

# 添加标题和标签
plt.title('Simple Line Plot')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')

# 显示网格、图例、图形
plt.grid(True)
plt.legend()
plt.show()

img

经验之谈:Matplotlib 能够制作任何绘图,但与其他库相比,创建复杂的绘图往往需要更多的代码。

更多资料:matplotlib.org


2 seaborn(基于matplot,比matplot好看)

Seaborn 是一个基于 Python 的数据可视化库,它建立在 matplotlib 库之上,提供了一个高级接口来绘制各种有吸引力和信息丰富的统计图形。Seaborn 旨在使绘图更加容易,并且能够自动处理复杂的可视化任务,比如分类数据的分布、多变量关系以及热图等。推荐阅读(点击阅读👉):快速掌握 Seaborn 分布图的 10 个例子, Seaborn 绘制 21 种超实用精美图表, 太厉害了!Seaborn也能做多种回归分析,统统只需一行代码

Seaborn 的一些主要特点包括:

  1. 美观的默认主题:Seaborn 提供了比 matplotlib 更加现代和美观的默认绘图风格。
  2. 面向数据集的接口:Seaborn 的函数通常接受数据集(如 pandas DataFrame)作为输入,使得绘图过程更加直观。
  3. 自动处理分类数据:Seaborn 能够自动处理分类数据,使得绘制分类数据的分布和关系变得简单。
  4. 多变量关系:Seaborn 提供了多种方法来探索数据集中的多变量关系,比如散点图矩阵(pairplot)和小提琴图(violinplot)。
  5. 热图和集群图:Seaborn 可以绘制热图(heatmap)来展示变量之间的关系,以及使用集群图(clustermap)来展示数据集的层次结构。
  6. 分布的可视化:Seaborn 提供了多种方法来可视化数据的分布,包括直方图、核密度估计(KDE)和箱线图。
  7. 交互式图表:虽然 Seaborn 本身不支持交互式图表,但它可以与交互式图表库(如 Plotly 或 Bokeh)结合使用,以创建交互式图形。

优点:

  • 减少的代码

    Seaborn提供了一个更高层次的接口来生成与Matplotlib类似的图。这意味着你可以用更少的代码和更漂亮的视觉设计来实现类似的可视化。

    例如,使用与之前相同的数据,我们可以创建一个热图,而无需明确设置x和y标签,这使得热图在视觉上更有吸引力,而不需要额外的配置。

    1
    2
    3
    correlation = new_profile.corr()

    sns.heatmap(correlation, annot=True)
  • 改善普通图表的美感

    Seaborn是常见绘图类型的热门选择,如柱状图、箱形图、计数图和直方图。Seaborn不仅需要较少的代码来生成这些图,而且它们还具有增强的视觉美感。

    在下面的例子中,由于Seaborn的默认设置,计数图在视觉上显得更加吸引人:

    1
    2
    3
    sns.set(style="darkgrid")
    titanic = sns.load_dataset("titanic")
    ax = sns.countplot(x="class", data=titanic)

缺点:

  • Seaborn尽管有其优势,但并不像Matplotlib那样拥有广泛的绘图类型集合。虽然它在流行的绘图类型方面表现出色,但对于更专业或定制的绘图,它可能无法提供同样广泛的选项。

Seaborn 是数据科学和统计分析中常用的工具,特别适合于探索性数据分析(EDA)阶段,帮助研究人员和分析师快速理解数据集的特点和结构。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

# 生成示例数据
data = {'Category': ['A']*50 + ['B']*50 + ['C']*50,
'Value': np.concatenate([np.random.normal(loc=0, scale=1, size=50),
np.random.normal(loc=2, scale=1.5, size=50),
np.random.normal(loc=-1, scale=0.5, size=50)])
}
df = pd.DataFrame(data)

# 创建小提琴图
plt.figure(figsize=(10, 6))
sns.violinplot(x='Category', y='Value', data=df, inner='quartile')

# 添加标题和标签
plt.title('Violin Plot Example')
plt.xlabel('Category')
plt.ylabel('Value')

# 显示图表
plt.show()

img

经验之谈:Seaborn 是Matplotlib的一个高级版本。尽管它没有像Matplotlib那样广泛的集合,但Seaborn可以用更少的代码使流行的绘图,如柱状图、盒状图、热图等看起来更漂亮。

更多资料: http://web.stanford.edu/~mwaskom/software/seaborn/index.html


3 plotly(交互式)

Plotly 是一个用于数据可视化的库,它支持 Python、R、Julia 和 JavaScript 等多种编程语言。Plotly 特别擅长创建交互式的图表和仪表板,这些图表可以在网页上显示,并且用户可以与之交互,比如缩放、平移、悬停显示数据信息等。推荐阅读(点击阅读👉):Pandas+Matplotlib+Plotly,完美解决 Python 数据分析问题

Plotly 的一些主要特点包括:

  1. 交互性:Plotly 的图表是完全交互式的,用户可以与图表进行多种交互操作,比如缩放、拖动、悬停显示详细信息等。
  2. 多种图表类型:Plotly 支持多种图表类型,包括散点图、线图、条形图、箱线图、热图、3D 图表、地图以及仪表板等。
  3. 多平台支持:Plotly 可以在多种平台上使用,包括 Jupyter 笔记本、网页应用、移动设备等。
  4. 易于集成:Plotly 可以很容易地与其他库和框架集成,比如 Dash(一个用于构建分析 Web 应用的框架)。
  5. 动态更新:Plotly 允许动态更新图表,这对于实时数据可视化非常有用。
  6. 自定义性:Plotly 提供了丰富的自定义选项,允许用户调整图表的各个方面,以满足特定的视觉和功能需求。
  7. 开源:Plotly 的核心功能是开源的,这意味着它是免费的,并且有一个活跃的社区支持。
  8. 数据操作:Plotly 可以与 pandas 等数据处理库无缝集成,使得数据操作和可视化可以在同一环境中完成。
  9. 跨浏览器兼容:Plotly 的图表在大多数现代浏览器中都能良好工作,无需任何插件。
  10. 导出功能:Plotly 提供了将图表导出为不同格式的功能,包括图片、PDF 和 HTML。

优点:

  • 与R相似

    如果你熟悉在R中创建绘图,并在使用Python时怀念它的功能,Plotly是一个很好的选择。它允许你用Python实现同样水平的高质量绘图。

    Plotly Express尤其突出,因为它只用一行Python代码就能创建令人印象深刻的图表。比如说:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    import plotly.express as px
    fig = px.scatter(
    new_profile[:100],
    x="followers",
    y="total_stars",
    color="forks",
    size="contribution",
    )
    fig.show()
  • 交互式图表创建

    Plotly擅长创建交互式图表,这不仅增强了视觉吸引力,而且使观众能够更详细地探索数据。

    让我们考虑一下前面的用Matplotlib创建的条形图例子。下面是如何用Plotly实现的:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    top_followers = new_profile.sort_values(by="followers", axis=0, ascending=False)[:100]

    fig = px.bar(
    top_followers,
    x="user_name",
    y="followers",
    )

    fig.show()

    通过类似的代码,Plotly可以生成一个交互式的图表,用户可以将鼠标悬停在每个条形图上,查看相应的用户和关注者数量。这种互动性使你的可视化的消费者有能力自己去探索数据。

  • 复杂地块中的简单性

    Plotly简化了复杂图的创建,这在其他库中可能是个挑战。

    例如,如果我们想在地图上可视化GitHub用户的位置,我们可以获得他们的经纬度,并据此绘制:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    location_df = pd.read_csv(
    "https://gist.githubusercontent.com/khuyentran1401/ce61bbad3bc636bf2548d70d197a0e3f/raw/ab1b1a832c6f3e01590a16231ba25ca5a3d761f3/location_df.csv",
    index_col=0,
    )

    m = px.scatter_geo(
    location_df,
    lat="latitude",
    lon="longitude",
    color="total_stars",
    size="forks",
    hover_data=["user_name", "followers"],
    title="Locations of Top Users",
    )

    m.show()

    只需几行代码,Plotly就能在地图上漂亮地表示用户的位置。气泡的颜色代表分叉的数量,而大小则与星星的总数相对应。

Plotly 是数据科学家、工程师和分析师在进行数据探索和呈现时的有力工具,它的交互性和美观的图表设计使其成为展示复杂数据和分析结果的理想选择。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import plotly.express as px

# 使用内置iris数据集
df = px.data.iris()

fig = px.scatter(
df,
x='sepal_width', # 指定x-y轴、颜色、散点大小、标题
y='sepal_length',
color='species',
size="sepal_length"
)

size = 20

# 设置x-y轴刻度、字体和图形整体信息
fig.update_layout(
title= {"text":"Iris Dataset Scatter Plot",
"font":dict(size=size,family="Arial",color="black",weight="bold")},

xaxis=dict(
title='Month.',
titlefont=dict(size=size,family="Arial",color="black",weight="bold"),
tickfont=dict(size=size)
),
yaxis=dict(
title='Capacity Retention.',
titlefont=dict(size=size,family="Arial",color="black",weight="bold"),
tickfont=dict(size=size)
),
width=950,
height=550,
title_x=0.45,
title_y=0.95,
autosize=False,
legend=dict(font=dict(size=size)) # 图例大小设置
#plot_bgcolor='rgba(0, 100, 100, 0.5)' # 设置背景色为半透明的红色
)

fig.show()

img

经验之谈:Plotly 是一个很好的选择,可以用最少的代码来创建交互式和出版质量的图表。它提供了广泛的可视化功能,并简化了创建复杂图表的过程。

更多资料: https://plot.ly/python/


4 Bokeh(交互式)

Bokeh 是一个用于创建交互式可视化的 Python 库,特别适用于现代 Web 浏览器。推荐阅读(点击阅读👉):Python Bokeh 库进行数据可视化实用指南

以下是 Bokeh 的一些核心特性:

  1. 交互性:Bokeh 提供了丰富的交互性选项,使用户能够在图表上进行缩放、平移、选择数据点等操作。
  2. 现代化的外观:Bokeh 的图表外观非常现代化和吸引人,可以定制颜色、线条样式等。
  3. 多种输出格式:Bokeh 支持多种输出格式,包括 HTML、Jupyter Notebook、交互式应用程序等。
  4. 无需前端开发经验:使用 Bokeh,不需要具备前端开发的经验,就可以创建交互式的 Web 可视化。
  5. 支持大数据:Bokeh 能够有效地处理大数据集,因此适用于各种规模的数据分析任务。
  6. 灵活性:Bokeh 对于常见的绘图要求以及自定义和复杂用例非常有用。
  7. 工作效率:Bokeh 可以轻松地与其他流行的 Pydata 工具(例如 Pandas 和 Jupyter notebook)进行交互。
  8. 功能强大:通过添加自定义 JavaScript,可以为专门的用例生成可视化效果。
  9. 可分享:绘图可以嵌入到支持 Flask 或 Django 的 web 应用程序的输出中。它们也可以在 Jupyter 笔记本中呈现。
  10. 开源:Bokeh 是一个开源项目,在 Berkeley Source Distribution (BSD) 许可证下分发。源代码可以在 GitHub 上找到。

优点:

  • Matplotlib的交互式版本

    在交互式可视化方面,Bokeh作为与Matplotlib最相似的库脱颖而出。Matplotlib是一个低级别的可视化库,而Bokeh同时提供了高级和低级别的接口。使用Bokeh,你可以创建类似于Matplotlib的复杂图,但代码行数更少,分辨率更高。

    例如,Matplotlib的圆形图…

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    import matplotlib.pyplot as plt

    fig, ax = plt.subplots()

    x = [1, 2, 3, 4, 5]
    y = [2, 5, 8, 2, 7]

    for x, y in zip(x, y):
    ax.add_patch(
    plt.Circle((x, y), 0.5, edgecolor="#f03b20", facecolor="#9ebcda", alpha=0.8)
    )


    # Use adjustable='box-forced' to make the plot area square-shaped as well.
    ax.set_aspect("equal", adjustable="datalim")
    ax.set_xbound(3, 4)

    ax.plot() # Causes an autoscale update.
    plt.show()

    ……可以通过使用虚化技术实现更好的分辨率和更大的效用:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    from bokeh.io import show, output_notebook
    from bokeh.models import Circle
    from bokeh.plotting import figure

    output_notebook()

    plot = figure(tools="tap", title="Select a circle")
    renderer = plot.circle([1, 2, 3, 4, 5], [2, 5, 8, 2, 7], size=50)

    selected_circle = Circle(fill_alpha=1, fill_color="firebrick", line_color=None)
    nonselected_circle = Circle(fill_alpha=0.2, fill_color="blue", line_color="firebrick")

    renderer.selection_glyph = selected_circle
    renderer.nonselection_glyph = nonselected_circle

    show(plot)
  • 图表之间的联系

    Bokeh使建立地块之间的联系变得非常容易。应用于一个图的变化可以自动反映在另一个具有类似变量的图中。这个功能允许探索多个地块之间的关系。

    例如,如果你创建了三个并排的图形,并想观察它们的关系,你可以利用链接刷:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    from bokeh.layouts import gridplot
    from bokeh.models import ColumnDataSource


    source = ColumnDataSource(new_profile)

    TOOLS = "box_select,lasso_select,help"
    TOOLTIPS = [
    ("user", "@user_name"),
    ("followers", "@followers"),
    ("following", "@following"),
    ("forks", "@forks"),
    ("contribution", "@contribution"),
    ]

    s1 = figure(tooltips=TOOLTIPS, title=None, tools=TOOLS)
    s1.circle(x="followers", y="following", source=source)

    s2 = figure(tooltips=TOOLTIPS, title=None, tools=TOOLS)
    s2.circle(x="followers", y="forks", source=source)

    s3 = figure(tooltips=TOOLTIPS, title=None, tools=TOOLS)
    s3.circle(x="followers", y="contribution", source=source)

    p = gridplot([[s1, s2, s3]])
    show(p)

    通过利用ColumnDataSource,数据可以在绘图之间共享。因此,当一个情节发生变化时,其他情节也会相应地自动更新。

缺点:

  • 作为一个具有某种中间层次界面的库,Bokeh通常需要更多的代码来产生与Seaborn、Altair或Plotly相同的图。虽然Bokeh需要的代码比Matplotlib少,但与其他库相比,它可能需要额外的代码行来实现类似的质量输出。

    例如,使用泰坦尼克号数据创建同样的计数图,除了需要提前转换数据外,如果我们想让图表看起来漂亮,还需要设置条形图的宽度和颜色。

    如果我们不为条形图增加宽度,图表会是这样的:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    from bokeh.transform import factor_cmap
    from bokeh.palettes import Spectral6

    titanic_groupby = titanic.groupby("class")["survived"].sum().reset_index()

    p = figure(x_range=list(titanic_groupby["class"]))
    p.vbar(
    x="class",
    top="survived",
    source=titanic_groupby,
    fill_color=factor_cmap(
    "class", palette=Spectral6, factors=list(titanic_groupby["class"])
    ),
    )
    show(p)

    from bokeh.transform import factor_cmap
    from bokeh.palettes import Spectral6

    titanic_groupby = titanic.groupby("class")["survived"].sum().reset_index()

    p = figure(x_range=list(titanic_groupby["class"]))
    p.vbar(
    x="class",
    top="survived",
    source=titanic_groupby,
    fill_color=factor_cmap(
    "class", palette=Spectral6, factors=list(titanic_groupby["class"])
    ),
    )
    show(p)

    因此,我们需要手动调整尺寸以使绘图更美观:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    p = figure(x_range=list(titanic_groupby["class"]))
    p.vbar(
    x="class",
    top="survived",
    width=0.9,
    source=titanic_groupby,
    fill_color=factor_cmap(
    "class", palette=Spectral6, factors=list(titanic_groupby["class"])
    ),
    )
    show(p)

Bokeh 的主要优势在于其对浏览器的原生支持,通过 Bokeh Server,可以轻松地实现实时数据的动态可视化。Bokeh 允许用户创建各种类型的图表,包括线图、散点图、柱状图、热图等,而且这些图表都可以在 Web 浏览器中交互式地操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
from bokeh.io import output_notebook, show
from bokeh.plotting import figure
from bokeh.models import ColumnDataSource
import numpy as np

# 启用Bokeh输出到Jupyter Notebook
output_notebook()

# 生成一些示例数据
categories = ['A', 'B', 'C', 'D', 'E']
values = [10, 20, 30, 40, 50]

source = ColumnDataSource(data=dict(categories=categories, values=values))

# 创建一个Bokeh绘图对象
p = figure(x_range=categories, title="Bar Chart Example", width=800, height=400)

# 添加柱状图
p.vbar(x='categories', top='values', width=0.9, source=source, legend_label="Values", line_color='white')

# 设置图表属性
p.xgrid.grid_line_color = None
p.y_range.start = 0
p.legend.orientation = "horizontal"
p.legend.location = "top_center"

# 显示图表
show(p)

img

经验之谈:Bokeh 的独特优势在于它能够提供一系列的界面,从低到高,从而能够创建多功能的、具有视觉吸引力的图形。然而,与其他库相比,在追求类似的情节质量时,这种灵活性往往导致需要更多的代码。

更多资料: http://bokeh.pydata.org/en/latest/


5 Altair(交互式)

Altair 是一个基于 Python 的数据可视化库,用于创建交互式和声明式的数据可视化。它构建在 Vega-Lite 之上,Vega-Lite 是一种用于描述图表的高级语法,提供了一种直观的方式来定义数据可视化的外观和行为。它在创建需要大量统计转换的图表时大放异彩。推荐阅读(点击阅读👉):被圈粉了!Altair 数据可视化已超神, 再见 Seaborn!Altair 数据可视化已超神

以下是 Altair 的一些关键特点:

  1. 声明式语法:Altair 使用简单而直观的 Python 语法来描述数据可视化,使创建图表变得容易。
  2. 交互式:Altair 支持交互式可视化,可以轻松添加交互式元素,例如工具提示、缩放和选择。
  3. 基于 Vega-Lite:Altair 核心思想是将数据可视化视为数据集到图形的映射,而不是一个步骤序列。
  4. 易于上手:Altair 提供了一种直观的方式来定义数据可视化的外观和行为,使得即使是初学者也能快速上手。
  5. 强大的功能:Altair 能够以声明式的方式创建漂亮的图表,适合数据科学家、数据分析师以及任何需要可视化数据的人。

优点:

  • 简单的可视化语法

    Altair利用直观的语法来创建可视化。你只需要指定数据列和编码通道之间的联系,其余的绘图工作都是自动处理的。这种简单性使得信息的可视化变得快速而直观。

    例如,使用泰坦尼克号的数据集来计算每个班级的人数:

    1
    2
    3
    4
    5
    import seaborn as sns
    import altair as alt

    titanic = sns.load_dataset("titanic")
    alt.Chart(titanic).mark_bar().encode(alt.X("class"), y="count()")

    Altair简洁的语法允许你专注于数据和它的关系,从而产生高效和富有表现力的可视化。

  • 易于数据转换

    Altair使其在创建图表时毫不费力地进行数据转换。

    例如,如果你想在泰坦尼克号数据集中找到每个性别的平均年龄,你可以在代码本身中进行转换:

    1
    2
    3
    4
    5
    6
    7
    8
    hireable = (
    alt.Chart(titanic)
    .mark_bar()
    .encode(x="sex:N", y="mean_age:Q")
    .transform_aggregate(mean_age="mean(age)", groupby=["sex"])
    )

    hireable

    Altair的transform_aggregate()函数使你能够在飞行中汇总数据,并在你的可视化中使用这些结果。

    你也可以使用:N:Q符号指定数据类型,如名义(没有任何顺序的分类数据)或定量(数值的衡量)。

    查看数据转换的**完整列表[6]**。

  • 链接图表

    Altair提供了令人印象深刻的将多个地块连接在一起的能力。你可以根据用户的互动,使用选择来过滤所附图块的内容。

    例如,在散点图上直观地显示所选区间内每个阶层的人数:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    brush = alt.selection(type="interval")

    points = (
    alt.Chart(titanic)
    .mark_point()
    .encode(
    x="age:Q",
    y="fare:Q",
    color=alt.condition(brush, "class:N", alt.value("lightgray")),
    )
    .add_selection(brush)
    )

    bars = (
    alt.Chart(titanic)
    .mark_bar()
    .encode(y="class:N", color="class:N", x="count(class):Q")
    .transform_filter(brush)
    )

    points & bars

    当你在散点图中选择一个区间时,柱状图会动态更新以反映过滤后的数据。Altair连接图的能力允许高度互动的可视化和即时计算,不需要运行Python服务器。

缺点:

  • Altair的简单图表,如柱状图,可能看起来不像Seaborn或Plotly等库中的图表那样有风格,除非你指定自定义风格。

  • Altair建议在处理超过5000个样本的数据集时,在可视化之前对数据进行汇总。处理更大的数据集可能需要额外的步骤来管理数据大小和复杂性。

Altair 的这些特点使其成为一个强大而易于使用的数据可视化库,能够帮助用户更好地理解数据、发现见解,并有效地传达发现。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import altair as alt
from vega_datasets import data

source = data.cars()

chart = alt.Chart(source).mark_point().encode(
x='Horsepower',
y='Miles_per_Gallon',
color='Origin'
).properties(
width=800,
height=400,
title='Horsepower vs Miles per Gallon'
)

chart.show()

img

经验之谈:Altair 是创建复杂统计图表的绝佳选择。虽然它可能缺乏一些默认的样式选项,并且在处理大型数据集时有局限性,但Altair的简单性、数据转换能力和链接图使其成为统计可视化的强大工具。


6 pygal

Pygal 是一个开源的 Python 数据可视化库,专门用于创建高度互动的图表和图形。以下是 Pygal 的一些关键特性:

  1. SVG 格式:Pygal 基于 SVG(可扩展矢量图)格式,这意味着创建的图表可以无损地缩放到任何大小,而不会失真。
  2. 多种图表类型:Pygal 支持多种图表类型,包括线图、柱状图、饼图、散点图等。
  3. 丰富的自定义选项和交互功能:Pygal 提供了丰富的自定义选项,允许用户调整图表的颜色、字体、轴标签等,同时支持添加数据标签、图例、注释、动画效果和交互功能。
  4. 易于安装和使用:Pygal 可以通过 pip 轻松安装,并且使用起来非常简单。用户可以用最少的编码工作来创建时尚和互动的图表。
  5. 图表导出:Pygal 允许用户将图表以 SVG、PNG、Etree、Base 64 数据 URI、Browser 和 PyQuery 等多种格式下载。
  6. 与 Web 框架集成:Pygal 可以与 Flask 或 Django 等 Web 框架集成,方便在 Web 应用中显示图表。
  7. 交互性强:Pygal 的图表具有高度的可交互性,用户可以探索数据、过滤特定特征、放大/缩小等。
  8. 适用于多种场景:Pygal 适用于数据分析、数据可视化和网站开发等多种场景。

总的来说,Pygal 是一个简单而功能强大的数据可视化工具,它通过提供丰富的图表类型、高度的可定制性和交互性,使得数据展示变得更加直观和吸引人。

如果你的数据量相对小,SVG就够用了。但是如果你有成百上千的数据点,SVG的渲染过程会变得很慢。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import pygal
from IPython.display import SVG, display

# 创建折线图对象
line_chart = pygal.Line()
line_chart.title = 'Simple Line Chart Example'
line_chart.x_labels = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun']
line_chart.add('Series 1', [1, 2, 3, 4, 5, 6])
line_chart.add('Series 2', [6, 5, 4, 3, 2, 1])

# 设置图像大小(宽度和高度)
line_chart.width = 600
line_chart.height = 300

# 渲染图表为SVG字符串
svg_data = line_chart.render(is_unicode=True)

# 在Jupyter Notebook中显示图表
display(SVG(svg_data))

img

更多资料: http://www.pygal.org/en/latest/index.html


7 Folium

**Folium[7]**简化了在交互式小册子地图上实现数据可视化的过程。这个库提供了来自OpenStreetMap、Mapbox和Stamen的内置瓦片集。推荐阅读(点击阅读👉):Python地图绘制工具folium基础知识全攻略

优点:

  • 易于创建一个带有标记的地图

    与Plotly、Altair和Bokeh等其他选项相比,Folium通过利用开放的街道地图提供了一种更直接的方法。这给人一种类似于谷歌地图的体验,而且代码最少。

    还记得我们用Plotly创建的可视化Github用户位置的地图吗?有了Folium,我们可以进一步增强地图的外观。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    import folium

    # 在一个列表中保存纬度、经度和地点的名称*
    lats = location_df["纬度"]
    lons = location_df["经度"]
    names = location_df["location"]

    # 用一个初始位置创建一个地图*
    m = folium.Map(location=[lats[0], lons[0]] )

    for lat, lon, name in zip(lats, lons, names):
    # 用其他位置创建标记*
    folium.Marker(
    location=[lat, lon], popup=name, icon=folium.Icon(color="green")
    ).add_to(m)

    m

    只用几行代码,我们就创建了一个显示用户位置的真实地图。

  • 添加地点

    Folium通过允许加入标记,可以很容易地添加其他用户的潜在位置。

    1
    2
    # 启用在地图中添加更多的位置
    m = m.add_child(folium.ClickForMarker(popup="Potential Location"))

    在地图上点击,就在你点击的地方生成一个新的位置标记。

  • 插件

    Folium提供各种插件,可以与你的地图一起利用,包括Altair的插件。例如,如果我们想将全球Github用户的总星数热图可视化,并识别出拥有大量顶级用户和星数的地区,Folium热图插件就可以实现这一目的。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    # heatmap
    # 强烈推荐关注@公众号:数据STUDIO,更多优质内容等你~
    from folium.plugins import HeatMap

    m = folium.Map(location=[lats[0], lons[0]])

    HeatMap(data=location_df[["latitude", "longitude", "total_stars"]]).add_to(m)

    m

经验之谈:Folium 只需几行代码就能创建互动地图。它提供了类似于谷歌地图的用户体验。


8 geoplotlib

在这里插入图片描述

geoplotlib 是一个用于制作地图和地理相关数据的工具箱。你可以用它来制作多种地图,比如等值区域图, 热度图,点密度图。你必须安装 Pyglet (一个面向对象编程接口)来使用geoplotlib。 不过因为大部分Python的可视化工具不提供地图,有一个专职画地图的工具也是挺方便的。
开发者: Andrea Cuttone
更多资料: https://github.com/andrea-cuttone/geoplotlib


9 Gleam

在这里插入图片描述

Gleam 借用了R中 Shiny 的灵感。 它允许你只利用 Python 程序将你的分析变成可交互的网络应用,你不需要会用HTML CSS 或者 JaveScript。Gleam 可以使用任何一种 Python 的可视化库。当你创建一个图表的时候,你可以在上面加上一个域,这样用户可以用它来对数据排序和过滤了。
开发者: David Robinson
更多资料: https://github.com/dgrtwo/gleam


10 missingno

在这里插入图片描述

缺失数据是永远的痛。missingno 用图像的方式让你能够快速评估数据缺失的情况,而不是在数据表里面步履维艰。你可以根据数据的完整度对数据进行排序或过滤,或者根据热度图或树状图来考虑对数据进行修正。
开发者: Aleksey Bilogur
更多资料: https://github.com/ResidentMario/missingno


11 Leather

在这里插入图片描述

Leather的最佳定义来自它的作者 Christopher Groskopf:“Leather 适用于现在就需要一个图表并且对图表是不是完美并不在乎的人。”它可以用于所以的数据类型然后生成SVG图像,这样在你调整图像大小的时候就不会损失图像质量。这个库很新,一些文档还没有最后完成。图像成品非常基础——但是这就是设计目标。
开发者: Christopher Groskopf
更多资料: http://leather.readthedocs.io/en/latest/index.html