Matplotlib和Plotly是两个在Python中广泛使用的数据可视化库,它们具有丰富的API和功能,用于创建各种类型的图表和图形。在本篇博客中,我们将介绍它们的主要特点和基本用法。
Matplotlib
主要特点:
- 高度自定义: Matplotlib允许开发人员完全自定义图表的各个方面,包括线条样式、颜色、标签、图例、坐标轴等。
- 支持多种图表类型: Matplotlib支持多种类型的图表,包括二维和三维图表,使其适用于各种数据可视化需求。
- 交互式绘图: Matplotlib可以嵌入到交互式环境中,如Jupyter Notebook,使用户能够实时交互式地探索数据。
- 输出格式多样: 可以将Matplotlib绘制的图表保存为多种输出格式,包括图像文件(如PNG、JPEG)、PDF文件,或直接显示在图形用户界面中。
基本用法:
- 导入Matplotlib : 使用
import matplotlib.pyplot as plt
导入Matplotlib库,通常使用plt
作为别名。 - 创建图表 : 使用
plt.figure()
创建一个图表对象,可以设置图表的大小、分辨率等属性。 - 绘制图形 : 使用Matplotlib提供的函数和方法来绘制图形,例如使用
plt.plot()
绘制折线图、plt.scatter()
绘制散点图、plt.bar()
绘制柱状图等。 - 设置图表属性 : 使用函数如
plt.title()
、plt.xlabel()
、plt.ylabel()
来设置图表标题和坐标轴标签,使用plt.legend()
添加图例,使用plt.grid()
显示网格等。 - 显示图表 : 使用
plt.show()
来显示绘制的图表。在Jupyter Notebook等交互式环境中,图表通常会自动显示。
Plotly
Plotly的Python库提供了多个API供用户创建交互式可视化图表。以下是Plotly库的一些主要API和其主要功能:
-
plotly.graph_objects API : 这是Plotly的核心API,允许用户通过创建
go.Figure
对象来绘制各种类型的图表。go.Figure()
: 创建一个新的图表对象。add_trace()
: 向图表对象添加数据系列,例如线图、散点图、柱状图等。update_layout()
: 设置图表的布局和样式,包括标题、坐标轴标签、图例等。update_xaxes()
和update_yaxes()
: 设置X轴和Y轴的属性,如刻度、范围等。show()
: 显示图表。
-
plotly.express API: 这是一个更高级的API,可以用更少的代码生成常见类型的图表。它适用于快速可视化和探索性数据分析。
px.line()
,px.scatter()
,px.bar()
: 创建线图、散点图和柱状图等。px.pie()
: 创建饼图。px.choropleth()
: 创建地图和轮廓地图。- 其他快速可视化函数。
-
plotly.subplots API: 这个API允许用户创建包含多个子图的复杂布局,用于同时显示多个图表。
make_subplots()
: 创建包含多个子图的图表布局。add_trace()
: 向子图添加数据系列。update_layout()
: 设置整个布局的样式。
-
plotly.offline API: 用于将Plotly图表保存为本地文件或在离线环境中显示图表。
plot()
: 显示图表并将其保存为HTML文件。init_notebook_mode()
: 初始化Jupyter Notebook中的Plotly图表显示。
-
plotly.io API: 用于导出和显示Plotly图表的方法。
write_html()
: 将图表导出为HTML文件。write_image()
: 将图表导出为图像文件(如PNG、JPEG)。show()
: 显示图表。
这些API提供了广泛的选项和功能,允许用户创建各种类型的交互式可视化图表。用户可以根据数据和需求选择适当的API,并使用这些API来定制图表的样式、交互性和显示方式。 Plotly的文档和示例提供了更多关于API的详细信息和用法示例。两者都是非常强大的工具,根据需求选择适当的库来实现数据可视化目标。
样例演示:
使用Matplotlib绘制销售业绩分析图表:
Python
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.pyplot import MultipleLocator
def test01():
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置中文字体
x = np.arange(0, 30, 1)
y1 = 3 * np.sin(2 * x) + 2 * x + 1
y2 = 2 * np.cos(2 * x) + 3 * x + 9
plt.figure(figsize=(11, 7))
plt.plot(x, y1, linestyle='-.', color='red', linewidth=5.0)
plt.plot(x, y2, marker='*', color='green', markersize=10)
plt.xlabel('日期', size=16)
plt.ylabel('金额', size=16, rotation=90, verticalalignment='center')
x_major_locator = MultipleLocator(2)
y_major_locator = MultipleLocator(10)
ax = plt.gca()
ax.xaxis.set_major_locator(x_major_locator)
ax.yaxis.set_major_locator(y_major_locator)
plt.tick_params(labelsize=16)
plt.xlim(0, 30)
plt.ylim(0, 100)
plt.legend(labels=['利润额', '销售额'], loc='upper left', fontsize=15)
plt.title('2020年9月份企业商品销售业绩分析', loc='center', size=20)
plt.show()
这个示例代码演示了如何使用Matplotlib库创建销售业绩分析图表,包括自定义样式、标签、刻度等。 这段代码导入了NumPy用于生成数据,Matplotlib库用于绘图,以及用于设置坐标轴刻度间隔的MultipleLocator。
具体实现思路如下:
首先生成销售数据,比如日期、利润额和销售额。这是你需要在图表上展示的数据。这可以通过NumPy来完成,比如:
python
x = np.arange(0, 30, 1)
profit = 3 * np.sin(2 * x) + 2 * x + 1
sales = 2 * np.cos(2 * x) + 3 * x + 9
接下来,你可以创建一个图表对象。这将是你的绘图画布,你可以在上面绘制图表。设置图表的大小,可以使用下面的代码:
python
plt.figure(figsize=(11, 7))
然后,你可以使用plt.plot()
来绘制销售数据的曲线。你可以自定义线条的样式、颜色和宽度。比如:
python
plt.plot(x, profit, linestyle='-.', color='red', linewidth=5.0)
plt.plot(x, sales, marker='*', color='green', markersize=10)
接下来,你需要设置坐标轴标签、刻度间隔、刻度标签字体大小和坐标轴范围。这可以使用下面的代码来实现:
python
plt.xlabel('日期', size=16)
plt.ylabel('金额', size=16, rotation=90, verticalalignment='center')
x_major_locator = MultipleLocator(2)
y_major_locator = MultipleLocator(10)
ax = plt.gca()
ax.xaxis.set_major_locator(x_major_locator)
ax.yaxis.set_major_locator(y_major_locator)
plt.tick_params(labelsize=16)
plt.xlim(0, 30)
plt.ylim(0, 100)
接着,你可以添加图例以区分不同的曲线,并设置图表的标题:
python
plt.legend(labels=['利润额', '销售额'], loc='upper left', fontsize=15)
plt.title('2020年9月份企业商品销售业绩分析', loc='center', size=20)
最后,你可以使用plt.show()
来显示你的图表:
python
plt.show()
用Pyecharts库创建了一个柱状图
Python
def test02():
from pyecharts.charts import Bar
from pyecharts import options as opts
bar = (
Bar()
.add_xaxis(["衬衫", "毛衣", "领带", "裤子", "风衣", "高跟鞋", "袜子"])
.add_yaxis("商家A", [114, 55, 27, 101, 125, 27, 105])
.add_yaxis("商家B", [57, 134, 137, 129, 145, 60, 49])
.set_global_opts(title_opts=opts.TitleOpts(title="商家A和商家B9月份销售数量统计",
title_textstyle_opts=opts.TextStyleOpts(font_size=20)),
xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=16)),
yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=16)),
toolbox_opts=opts.ToolboxOpts(),
legend_opts=opts.LegendOpts(is_show=True, item_width=40, item_height=20,
textstyle_opts=opts.TextStyleOpts(font_size=16)))
.set_series_opts(label_opts=opts.LabelOpts(font_size=16))
)
bar.render('sales.html')
这段代码是用Pyecharts库创建了一个柱状图,主要展示了两家商家(商家A和商家B)在九月份的销售数量情况。这种图表在比较不同商品销售数据时非常有用。
首先,我们导入所需的库和模块,然后创建一个柱状图对象。我们定义了X轴的标签,这些标签代表不同种类的商品,比如衬衫、毛衣、领带等等。
接下来,我们添加了两个数据系列,分别代表商家A和商家B的销售数据。这些销售数据以列表的形式提供,包括不同商品的销售数量。
然后,我们设置了一些全局选项,如图表的标题、坐标轴标签的字体大小、工具栏选项和图例。标题是"商家A和商家B9月份销售数量统计",为了使标题更醒目,我们将标题字体大小设置为20。坐标轴标签也有一个合适的字体大小,以确保图表易于阅读。
最后,我们还对数据系列进行了一些选项设置,特别是标签的字体大小。
最终,我们使用.render('sales.html')
将生成的图表保存为一个HTML文件,文件名为"sales.html"。这个HTML文件可以在浏览器中打开,以查看和分享这个柱状图,从而更好地了解商家A和商家B的销售情况。
效果展示图:
使用Plotly库来创建一个饼图
Python
def test03():
import plotly.offline as py
import plotly.graph_objects as go
store = ['定远店', '东海店', '海恒店', '金寨店', '燎原店', '临泉店', '庐江店', '明耀店', '众兴店']
consumer = [30, 22, 20, 28, 16, 30, 24, 18, 12]
fig = go.Figure(
data=[go.Pie(labels=store, values=consumer, textinfo='label+percent', insidetextorientation='radial')])
fig.update_layout(
legend_title="客户类型", # 图例标题文本
width=700, height=500, # 设置图像的大小
title=dict(
text="2020年第二季度各门店销售业绩分析",
x=0.5,
xanchor='center',
xref='paper'
),
font=dict(
family="Courier New, monospace", # 标题的字体
size=18, # 标题的大小
color="RebeccaPurple" # 标题的颜色
)
)
py.plot(fig, filename='bingtu.html')
段代码使用了Plotly库来创建一个饼图,用于展示不同门店在2020年第二季度的销售业绩情况。饼图是一种很好的方式来比较各部分在整体中的占比情况。
首先,我们导入了所需的库和模块,包括Plotly的offline
和graph_objects
。然后,我们定义了两个列表,store
和consumer
,它们分别包含了门店名称和对应的销售业绩数据。
接下来,我们创建了一个Figure
对象,其中使用go.Pie
创建了一个饼图。在饼图中,labels
参数代表各门店的名称,values
参数代表对应的销售业绩数据。textinfo
参数设置了饼图上显示的文本信息,这里是标签和百分比,insidetextorientation
参数设置了文本方向。
然后,我们使用update_layout
来设置图表的布局和样式。这包括设置图表的标题、宽度和高度,以及标题的字体、大小和颜色。
最后,我们使用py.plot
将生成的饼图保存为一个HTML文件,文件名为"bingtu.html"。这个HTML文件可以在浏览器中打开,以查看和分享门店销售业绩的饼图,帮助理解不同门店在总销售中的占比情况。这是一种直观的数据可视化方法。
展示图如下:
使用 Pyecharts 库来创建一个地图图表
Python
from pyecharts import options as opts
from pyecharts.charts import Map
# 提供的数据
city_sales = [
("长沙市", 184), ("株洲市", 192), ("湘潭市", 171), ("衡阳市", 131), ("邵阳市", 149),
("岳阳市", 121), ("常德市", 71), ("张家界市", 83), ("益阳市", 88), ("郴州市", 156),
("永州市", 99), ("怀化市", 86), ("娄底市", 65)
]
city_profits = [
("长沙市", 18.4), ("株洲市", 19.2), ("湘潭市", 17.1), ("衡阳市", 13.1), ("邵阳市", 14.9),
("岳阳市", 12.1), ("常德市", 7.1), ("张家界市", 8.3), ("益阳市", 8.8), ("郴州市", 15.6),
("永州市", 9.9), ("怀化市", 8.6), ("娄底市", 6.5)
]
# 整理数据
city_names = [item[0] for item in city_sales]
profit_data = [item[1] for item in city_profits]
# 绘制商品利润额地图
profits_map = (
Map()
.add(
series_name="2020年湖南省各地级市商品利润额", # 添加数据的系列名称
data_pair=[(city, profit) for city, profit in zip(city_names, profit_data)], # 添加地图数据,包括城市名和商品利润额
maptype="湖南", # 地图类型为湖南
is_map_symbol_show=True, # 显示城市名
)
.set_series_opts(
label_opts=opts.LabelOpts(is_show=True), # 设置标签选项,这里是显示标签
)
.set_global_opts(
title_opts=opts.TitleOpts(
title="2020年湖南省各地级市商品利润额",
subtitle="数据来源:湖南省统计局",
pos_right="10px",
pos_top="20px",
),
visualmap_opts=opts.VisualMapOpts(max_=max(profit_data)),
)
)
# 生成 HTML 文件
profits_map.render("湖南省商品利润额地图.html")
这段代码使用了 Pyecharts 库来创建一个地图图表,用于展示湖南省各地级市在2020年的商品利润额情况。以下是代码的口语叙述:
首先,我们导入了所需的库和模块,包括 Pyecharts 的选项模块 opts
和地图图表模块 Map
。
然后,我们提供了两个数据列表 city_sales
和 city_profits
,分别包含了各地级市的销售额和商品利润额数据。这些数据是根据不同城市的统计信息整理而来。
接下来,我们提取了城市名称和商品利润额的数据,以便用于地图图表的绘制。
然后,我们创建了一个地图图表对象 profits_map
。在这个图表中,我们使用 .add()
方法添加了地图的系列名称和数据对,其中包括城市名称和商品利润额数据。地图的类型被设置为湖南,表示我们要绘制湖南省的地图,并设置了显示城市名的选项。
接着,我们使用 .set_series_opts()
方法设置了标签选项,以便在地图上显示标签。
最后,我们使用 .set_global_opts()
方法设置了图表的全局选项,包括标题、副标题、位置等信息,并使用 visualmap_opts
设置了可视化地图的选项,以便调整颜色映射和范围。
最后,我们使用 .render()
方法生成了一个 HTML 文件,文件名为 "湖南省商品利润额地图.html"。这个 HTML 文件包含了绘制的地图图表,可以在浏览器中打开以查看湖南省各地级市的商品利润额分布情况。这是一种直观的数据可视化方法,帮助用户更好地理解不同城市的商品利润情况。
效果展示图: