在这个小费数据集中,我们记录了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是一个强大而灵活的低级数据可视化库,它建立在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是建立在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以其交互式图表而著称,使用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是一个交互式可视化库,提供基于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 的交互功能为图表添加个性化的下拉菜单。每个绘图库都有其独特的优势,根据任务需求选择合适的库,既能提高效率又能提供更好的用户体验。希望你在数据可视化的旅程中能够更得心应手!