【长文干货】Python可视化教程

数据介绍

在这个小费数据集中,我们记录了20世纪90年代初期餐厅顾客在两个半月内给出的小费情况。数据集包含了total_bill(总账单金额)、tip(小费金额)、sex(性别)、smoker(是否吸烟)、day(就餐日期)、time(就餐时间)、size(就餐人数)等六列信息。

数据下载:

链接: https://pan.baidu.com/s/1gnxI3CM7EVqCAzAGCbtSrg 提取码: 7it9 

读取数据:

import pandas as pd


# 读取数据
data = pd.read_csv("tips.csv")

# 展示前10行
display(data.head(10))

如下所示:
在这里插入图片描述

Matplotlib

Matplotlib是一个强大而灵活的低级数据可视化库,它建立在NumPy数组上。它提供了各种图形,如散点图、折线图、柱形图等。

要安装Matplotlib,可以使用以下命令:

pip install matplotlib

散点图

散点图用于观察变量之间的关系,可以使用Matplotlib的scatter()方法进行绘制。

import pandas as pd
import matplotlib.pyplot as plt
 
 
# 数据
data = pd.read_csv("tips.csv")
 
# 绘制天和小票关系
plt.scatter(data['day'], data['tip'])
 
# 添加标题
plt.title("Scatter Plot")
 
# 添加横纵坐标
plt.xlabel('Day')
plt.ylabel('Tip')
 
plt.show()

如下所示:
在这里插入图片描述

如果想要增添颜色和调整点的大小,可以通过scatter()函数的c和s参数来实现。此外,colorbar()方法可用于显示颜色条。

折线图

折线图用于表示两个变量在不同轴上的关系,使用Matplotlib的plot()函数进行绘制。

import pandas as pd
import matplotlib.pyplot as plt
 
 
# 读取数据
data = pd.read_csv("tips.csv")
 
# 绘制小票和大小关系
plt.plot(data['tip'])
plt.plot(data['size'])
 
#添加标题
plt.title("Scatter Plot")
 
# 添加横纵坐标
plt.xlabel('Day')
plt.ylabel('Tip')
 
plt.show()

如下:
在这里插入图片描述

柱形图

柱形图用于以矩形条的长度和高度表示数据类别。可以使用Matplotlib的bar()方法创建柱形图。


import pandas as pd
import matplotlib.pyplot as plt
 

data = pd.read_csv("tips.csv")
 

plt.bar(data['day'], data['tip'])
 
plt.title("Bar Chart")
 
plt.xlabel('Day')
plt.ylabel('Tip')
 
# Adding the legends
plt.show()

如下:
在这里插入图片描述

直方图

直方图用于以组的形式表示数据,可以使用Matplotlib的hist()函数进行绘制。

import pandas as pd
import matplotlib.pyplot as plt
 
data = pd.read_csv("tips.csv")
plt.hist(data['total_bill'])
 
plt.title("Histogram")
plt.show()

如下:
在这里插入图片描述

Seaborn

Seaborn是建立在Matplotlib之上的高级接口,提供了漂亮的设计风格和调色板,使得绘制更具吸引力的图表变得简单。

要安装Seaborn,可以使用以下命令:

pip install seaborn

Seaborn的scatterplot()方法用于绘制散点图。

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd

data = pd.read_csv("tips.csv")

# 绘制天和小费关系的散点图
sns.scatterplot(x='day', y='tip', data=data)

plt.show()

如下:
在这里插入图片描述

散点图

与Matplotlib不同的是,在Seaborn中,使用hue参数可以轻松地按性别对每个点进行着色。

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd

data = pd.read_csv("tips.csv")

# 根据性别绘制天和小费关系的散点图
sns.scatterplot(x='day', y='tip', data=data, hue='sex')

plt.show()

如下:
在这里插入图片描述
你会发现,在使用 Matplotlib 时,如果你想根据性别给这个图的每个点着色,那会很困难。但是在散点图中,它可以在色调参数的帮助下完成。

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
 
data = pd.read_csv("tips.csv")
 
sns.scatterplot(x='day', y='tip', data=data,
               hue='sex')
plt.show()

如下:
在这里插入图片描述

折线图

Seaborn的lineplot()方法用于绘制折线图。

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
 
 
data = pd.read_csv("tips.csv")
 
sns.lineplot(x='day', y='tip', data=data)
plt.show()

如下:
在这里插入图片描述

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
 
 
data = pd.read_csv("tips.csv")
 
# 去除一个总额度列再绘制
sns.lineplot(data=data.drop(['total_bill'], axis=1))
plt.show()

如下:
在这里插入图片描述

柱形图

Seaborn的barplot()方法用于绘制柱形图。

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
 
data = pd.read_csv("tips.csv")
 
sns.barplot(x='day',y='tip', data=data, 
            hue='sex')
 
plt.show()

如下:
在这里插入图片描述

直方图

Seaborn 中的直方图可以使用 histplot() 函数绘制。

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
 
 
data = pd.read_csv("tips.csv")
 
sns.histplot(x='total_bill', data=data, kde=True, hue='sex')
 
plt.show()

如下:
在这里插入图片描述
在使用Seaborn时,相比于Matplotlib,我们可以更轻松地自定义图表。而且,Seaborn是基于Matplotlib构建的,因此在使用Seaborn时仍然可以利用Matplotlib的自定义函数。

Bokeh

Bokeh以其交互式图表而著称,使用HTML和JavaScript渲染图形,提供了优雅、简洁且高度交互性的现代图形。
在这里插入图片描述

要安装Bokeh,可以使用以下命令:

pip install bokeh

散点图

Bokeh的scatter()方法用于绘制散点图。

from bokeh.plotting import figure, output_file, show
from bokeh.palettes import magma
import pandas as pd
 
 
#初始化
graph = figure(title = "Bokeh Scatter Graph")
 
# 读取
data = pd.read_csv("tips.csv")
 
color = magma(256)
 
# 绘制
graph.scatter(data['total_bill'], data['tip'], color=color)
 
# 显示
show(graph)

如下:
在这里插入图片描述

折线

from bokeh.plotting import figure, output_file, show
import pandas as pd
 
 
graph = figure(title = "Bokeh Bar Chart")
 

data = pd.read_csv("tips.csv")
 
# tip column
df = data['tip'].value_counts()
 
# 绘制
graph.line(df, data['tip'])
 
#展示
show(graph)

如下:
在这里插入图片描述

条形图

Bokeh中的条形图可以使用vbar()方法创建。

from bokeh.plotting import figure, output_file, show
import pandas as pd
 
 
graph = figure(title = "Bokeh Bar Chart")
 
data = pd.read_csv("tips.csv")
 
graph.vbar(data['total_bill'], top=data['tip'])
 
show(graph)

如下:
在这里插入图片描述

交互式

Bokeh提供了交互式图表的功能,可以使用GUI元素如按钮、滑块、复选框等。

from bokeh.plotting import figure, output_file, show
import pandas as pd
 
 
# 初始化
graph = figure(title = "Bokeh Bar Chart")
 
# 数据读取
data = pd.read_csv("tips.csv")
 
# 绘制
graph.vbar(data['total_bill'], top=data['tip'], 
           legend_label = "Bill VS Tips", color='green')
 
graph.vbar(data['tip'], top=data['size'], 
           legend_label = "Tips VS Size", color='red')
 
graph.legend.click_policy = "hide"
 
# 展示
show(graph)

如下:

在这里插入图片描述

例如:

from bokeh.io import show
from bokeh.models import CustomJS, Slider
 
slider = Slider(start=1, end=20, value=1, step=2, title="Slider")
 
slider.js_on_change("value", CustomJS(code="""
    console.log('slider: value=' + this.value, this.toString())
"""))
 
show(slider)

如下:
在这里插入图片描述

Plotly

Plotly是一个交互式可视化库,提供基于Web的图表,可以用于创建漂亮的图表和仪表板。

要安装Plotly,可以使用以下命令:

pip install plotly

基本

使用Plotly Express库中的scatter()方法绘制散点图。


import plotly.express as px
import pandas as pd
 
data = pd.read_csv("tips.csv")
 
fig = px.scatter(data, x="day", y="tip", color='sex')
 
# showing the plot
fig.show()

如下:
在这里插入图片描述
使用Plotly Express库中的line()方法绘制折线图。

import plotly.express as px
import pandas as pd
 

data = pd.read_csv("tips.csv")
 

fig = px.line(data, y='tip', color='sex')
 
fig.show()

如下:
在这里插入图片描述
使用Plotly Express库中的bar()方法绘制柱形图。

import plotly.express as px
import pandas as pd
 

data = pd.read_csv("tips.csv")
 

fig = px.bar(data, x='day', y='tip', color='sex')
 

fig.show()

如下:
在这里插入图片描述
使用Plotly Express库中的histogram()方法绘制直方图。


import plotly.express as px
import pandas as pd
 
# reading the database
data = pd.read_csv("tips.csv")
 
# plotting the scatter chart
fig = px.histogram(data, x='total_bill', color='sex')
 
# showing the plot
fig.show()

如下:
在这里插入图片描述

组合优化:定制化下拉菜单

在数据可视化中,展示图表不仅需要清晰的数据呈现,还需要用户友好的交互体验。本文将介绍如何通过使用 Plotly 中的 updatemenus 功能,为图表添加定制化下拉菜单,让用户能够灵活切换图表类型。

# 导入必要的库
import plotly.graph_objects as go
import pandas as pd

# 读取数据
data = pd.read_csv("tips.csv")

# 创建初始散点图
plot = go.Figure(data=[go.Scatter(
    x=data['day'],
    y=data['tip'],
    mode='markers',)
])

# 定义下拉菜单选项
menu_options = [
    dict(args=["type", "scatter"],
         label="散点图",
         method="restyle"),
    dict(args=["type", "bar"],
         label="柱状图",
         method="restyle")
]

# 添加下拉菜单
plot.update_layout(
    updatemenus=[
        dict(
            buttons=menu_options,
            direction="down",
        ),
    ]
)

# 展示图表
plot.show()

如下所示:
在这里插入图片描述
通过这个简单的示例,你可以在图表上方看到一个下拉菜单,用于在散点图和柱状图之间切换。这种交互方式使得用户能够更直观地探索数据。

同样地,我们可以应用相同的思想来优化时间序列数据的展示:

# 创建初始折线图
plot = go.Figure(data=[go.Scatter(
    y=data['tip'],
    mode='lines',)
])

# 定义时间序列下拉菜单选项
time_menu_options = [
    dict(count=1,
         step="day",
         stepmode="backward")
]

# 更新布局,添加时间序列下拉菜单
plot.update_layout(
    xaxis=dict(
        rangeselector=dict(
            buttons=time_menu_options
        ),
        rangeslider=dict(
            visible=True
        ),
    )
)

# 展示图表
plot.show()

如下:
在这里插入图片描述
这样,你就能够以更有层次感的方式呈现时间序列数据。

总结

通过本文学习,你不仅了解了如何使用 Python 中不同的绘图库(Matplotlib、Seaborn、Bokeh 和 Plotly)来展示提示数据集,还掌握了如何通过 Plotly 的交互功能为图表添加个性化的下拉菜单。每个绘图库都有其独特的优势,根据任务需求选择合适的库,既能提高效率又能提供更好的用户体验。希望你在数据可视化的旅程中能够更得心应手!

猜你喜欢

转载自blog.csdn.net/weixin_46211269/article/details/134700014