Plotly是一个用于创建交互式图形的Python库。它提供了丰富的图表类型,包括散点图、线图、柱状图、热力图、饼图等,以及高级的可视化功能,如动画、交互、数据缩放和拖动等。
Plotly库的主要特点:
- 交互式图表:Plotly创建的图表是交互式的,用户可以在图表上进行缩放、拖动、选择数据等操作,并实时看到结果。
- 丰富的图表类型:Plotly支持多种图表类型,可以满足不同领域的数据可视化需求。
- 易于使用:Plotly提供了简洁的API,使得用户可以轻松创建和定制图表。
- 集成性:Plotly可以与Pandas、NumPy等Python数据处理库无缝集成,方便用户进行数据分析和可视化。
- 跨平台:Plotly可以在Web浏览器、Jupyter Notebook、Dash应用程序等多种环境中展示图表。
如何安装Plotly?
安装Plotly的方法主要依赖于你使用的编程环境。一般来说,如果你使用的是Python,你可以通过pip工具来安装Plotly库。以下是在Python环境中安装Plotly的步骤:
- 打开你的命令行工具(在Windows系统中,你可以通过Win+R打开运行窗口并输入cmd后回车,以管理员身份启动命令行)。
- 在命令行中输入以下命令来安装Plotly:pip install plotly。这个命令会从Python库官网下载并安装Plotly库。
Plotly库基本结构
Plotly库结构主要由几个关键模块组成,这些模块协同工作以创建各种类型的数据可视化图表。
以下是Plotly库的主要模块及其功能:
- plotly.plotly:这个模块包含需要与Plotly服务器交互的函数。它提供了本地机器与Plotly服务之间的接口,使得用户能够利用Plotly的在线功能,如数据保存、分享以及与Web的无缝集成。
- plotly.graph_objs:这是Plotly库中最核心的模块,它包含了构成图表的各种对象的类定义。这些图形对象包括但不限于散点图、方框图、直方图等,它们用于生成和/或修改Plotly图的每个特征。此外,这个模块还定义了Figure和Layout对象,它们分别用于表示整个图表和数据轨迹的布局。
- plotly.tools:这个模块包含了许多有助于增强Plotly体验的功能。这些功能可能包括数据的预处理、图表的优化以及其他辅助功能。
注意:plotly.express模块可以一次创建整个图。它在内部使用graph_objects并返回graph_objects.Figure实例。
在使用Plotly库时,用户通常首先使用plotly.graph_objs模块中的类来创建数据轨迹和布局,然后使用这些对象来创建Figure对象。最后,通过plotly.plotly模块或其他方式(如使用Plotly的离线模式)将图表渲染出来。
示例:
import plotly.express as px # Creating the Figure instance
fig = px.line(x=[1,2, 3], y=[1, 2, 3]) # printing the figure instance
print(fig)
输出
Figure({'data': [{'hovertemplate': 'x=%{x}<br>y=%{y}<extra></extra>','legendgroup': '','line': {'color': '#636efa', 'dash': 'solid'},'marker': {'symbol': 'circle'},'mode': 'lines','name': '','orientation': 'v','showlegend': False,'type': 'scatter','x': array([1, 2, 3], dtype=int64),'xaxis': 'x','y': array([1, 2, 3], dtype=int64),'yaxis': 'y'}],'layout': {'legend': {'tracegroupgap': 0},'margin': {'t': 60},'template': '...','xaxis': {'anchor': 'y', 'domain': [0.0, 1.0], 'title': {'text': 'x'}},'yaxis': {'anchor': 'x', 'domain': [0.0, 1.0], 'title': {'text': 'y'}}}
})
图形以树来表示,其中根节点具有三个顶层属性-data, layout和frames,命名节点称为“attributes”。考虑上面的例子,layout.legend是一个嵌套字典,其中legend是字典中的键,其值也是一个字典。
开始学习
在学习了Plotly的安装和基本结构之后,让我们使用plotly定义的预定义数据集创建一个简单的图。
import plotly.express as px # Creating the Figure instance
fig = px.line(x=[1, 2, 3], y=[1, 2, 3]) # showing the plot
fig.show()
在上面的示例中,导入了返回Figure实例的plotly.express模块。我们通过传递要绘制的点的x,y坐标创建了一个简单的折线图。
创建不同类型的图表
使用plotly,我们可以创建40多种图表,每个图表都可以使用plotly.express和plotly.graph_objects类创建。下面来看一下常见的几种图表:
折线图
Plotly中的折线图是一个很好的补充,它可以管理各种类型的数据并组装易于风格化的统计数据。使用px.line,每个数据位置都表示为2D空间中的一个标记的顶点(其位置由x和y列给出)。
示例:
import plotly.express as px # using the iris dataset
df = px.data.iris() # plotting the line chart
fig = px.line(df, x="species", y="petal_width") # showing the plot
fig.show()
条形图
条形图是数据的图形表示,它用矩形条表示分类数据,矩形条的高度或长度与它们所表示的值成比例。换句话说,它是数据集的图形表示。这些数据集包含代表长度或高度的变量的数值。
示例:
import plotly.express as px # using the iris dataset
df = px.data.iris() # plotting the bar chart
fig = px.bar(df, x="sepal_width", y="sepal_length") # showing the plot
fig.show()
直方图
直方图包含一个矩形区域,用于显示统计信息,该统计信息与变量的频率及其在连续数值区间中的宽度成比例。将一组数据点管理到不同指定范围的图形表示。
示例:
import plotly.express as px # using the iris dataset
df = px.data.iris() # plotting the histogram
fig = px.histogram(df, x="sepal_length", y="petal_width") # showing the plot
fig.show()
散点图和气泡图
散点图是一组虚线点,用于表示水平轴和垂直轴上的各个数据片段。两个变量的值沿沿着X轴和Y轴绘制的图形,结果点的模式揭示了它们之间的相关性。
气泡图是带有气泡的散点图(彩色填充圆圈)。气泡的大小取决于数据中的另一个变量。它可以使用plotly.express的scatter()方法创建。
散点图示例:
import plotly.express as px # using the iris dataset
df = px.data.iris() # plotting the scatter chart
fig = px.scatter(df, x="species", y="petal_width") # showing the plot
fig.show()
气泡图示例:
import plotly.express as px # using the iris dataset
df = px.data.iris() # plotting the bubble chart
fig = px.scatter(df, x="species", y="petal_width", size="petal_length", color="species") # showing the plot
fig.show()
饼图
饼图是一种圆形统计图形,它被划分为切片以说明数字比例。它描绘了一个特殊的图表,使用“饼状切片”,其中每个扇区显示数据的相对大小。圆形图表以半径的形式切割成描述相对频率或幅度的段,也称为圆图。
示例:
import plotly.express as px # using the tips dataset
df = px.data.tips() # plotting the pie chart
fig = px.pie(df, values="total_bill", names="day") # showing the plot
fig.show()
箱形图
箱形图也称为须状图,用于显示具有最小值、第一四分位数、中位数、第三四分位数和最大值等属性的数据值集的汇总。在箱形图中,从第一四分位数到第三四分位数创建一个框,一条垂直线也在那里穿过中位数处的框。这里x轴表示要绘制的数据,而y轴表示频率分布。
示例:
import plotly.express as px # using the tips dataset
df = px.data.tips() # plotting the box chart
fig = px.box(df, x="day", y="total_bill") # showing the plot
fig.show()
小提琴图
小提琴图是一种可视化不同变量的数值数据分布的方法。它类似于Box Plot,但在每一侧都有一个旋转的图,提供有关y轴上密度估计的更多信息。密度被镜像和翻转,结果形状被填充,创建一个类似小提琴的图像。小提琴图的优点是它可以显示分布中的细微差别,而这些细微差别在箱形图中是无法察觉的。
示例:
import plotly.express as px # using the tips dataset
df = px.data.tips() # plotting the violin chart
fig = px.violin(df, x="day", y="total_bill")# showing the plot
fig.show()
甘特图
甘特图(Gantt Chart)是一种用于展示项目计划执行过程的条形图。它主要用于项目管理,帮助管理者清晰地了解项目的进度、任务分配以及时间规划。甘特图通过直观的图形展示,使得项目相关人员能够更快速地理解和分析项目的状态。
在甘特图中,横轴代表时间,纵轴代表任务或活动。每个任务或活动在图中用一条条形表示,条形的长度表示该任务或活动所需的时间,条形的位置表示该任务或活动在时间轴上的开始和结束时间。通过这种方式,甘特图能够清晰地展示项目的整体进度以及各个任务或活动之间的时间关系。
示例:
import plotly.figure_factory as ff # Data to be plotted
df = [dict(Task="A", Start='2020-01-01', Finish='2009-02-02'), dict(Task="Job B", Start='2020-03-01', Finish='2020-11-11'), dict(Task="Job C", Start='2020-08-06', Finish='2020-09-21')] # Creating the plot
fig = ff.create_gantt(df)
fig.show()
等高线图
等高线图也称为水平图,是一种用于进行多变量分析和在二维空间中可视化三维图的工具。如果我们将X和Y视为我们想要绘制的变量,则响应Z将被绘制为X-Y平面上的切片,因此轮廓有时被称为Z切片或等响应。
等高线图用于查看某个值(Z)相对于两个值(X,Y)的变化的情况。
示例:
import plotly.graph_objects as go
import numpy as np # Creating the X, Y value that will
# change the values of Z as a function
feature_x = np.arange(0, 50, 2)
feature_y = np.arange(0, 50, 3) # Creating 2-D grid of features
[X, Y] = np.meshgrid(feature_x, feature_y) Z = np.cos(X / 2) + np.sin(Y / 4) # plotting the figure
fig = go.Figure(data =go.Contour(x = feature_x, y = feature_y, z = Z)) fig.show()
热力图
热力图被定义为使用颜色来可视化矩阵值的数据的图形表示。在此,为了表示更常见的值或更高的活性,使用基本上带红色的颜色,并且为了表示较不常见的值或活性值,优选较暗的颜色。热力图也由着色矩阵的名称定义。
示例:
import plotly.graph_objects as go
import numpy as np feature_x = np.arange(0, 50, 2)
feature_y = np.arange(0, 50, 3) # Creating 2-D grid of features
[X, Y] = np.meshgrid(feature_x, feature_y) Z = np.cos(X / 2) + np.sin(Y / 4) # plotting the figure
fig = go.Figure(data =go.Heatmap(x = feature_x, y = feature_y, z = Z,)) fig.show()
误差条
对于表示2D数据点的函数,如px.scatter、px.line、px.bar等,误差条作为列名称给出,该列名称是error_x(对于x位置上的误差)和error_y(对于y位置上的误差)的值。误差条是数据的图形表示形式,用于图表,以暗示报告数据中的误差或不确定性。
示例:
import plotly.express as px # using the iris dataset
df = px.data.iris() # Calculating the error field
df["error"] = df["petal_length"]/100# plotting the scatter chart
fig = px.scatter(df, x="species", y="petal_width",error_x="error", error_y="error") # showing the plot
fig.show()
3D折线图
plotly中的折线图是绘图中管理各种类型数据和组装易于风格化统计的一个非常方便和出色的附加功能。在px.line_3d中,每个数据位置都表示为3D空间中一个标记的顶点(其位置由x、y和z列给出)。
示例:
import plotly.express as px # data to be plotted
df = px.data.tips() # plotting the figure
fig = px.line_3d(df, x="sex", y="day", z="time", color="sex") fig.show()
3D散点图
3D散点图可以绘制二维图形,可以通过映射多达三个附加变量来增强,同时使用色调,大小和样式参数的语义。所有的参数控制视觉语义,用于识别不同的子集。使用冗余语义有助于使图形更易于访问。它可以使用plotly.express类的scatter_3d函数创建。
示例:
import plotly.express as px # Data to be plotted
df = px.data.iris() # Plotting the figure
fig = px.scatter_3d(df, x = 'sepal_width', y = 'sepal_length', z = 'petal_width', color = 'species') fig.show()
3D曲面图
曲面图是具有X、Y、Z三维数据的图。曲面图不是显示单个数据点,而是在因变量Y之间具有函数关系,并具有两个自变量X和Z。此图用于区分因变量和自变量。
示例:
import plotly.graph_objects as go
import numpy as np # Data to be plotted
x = np.outer(np.linspace(-2, 2, 30), np.ones(30))
y = x.copy().T
z = np.cos(x ** 2 + y ** 2) # plotting the figure
fig = go.Figure(data=[go.Surface(x=x, y=y, z=z)]) fig.show()
与绘图交互
Plotly提供了各种与绘图交互的工具,如添加下拉菜单、按钮、滑块等。这些可以使用绘图布局的更新菜单属性创建。让我们来看看如何做这些。
在Plotly中创建下拉菜单
下拉菜单是菜单按钮的一部分,始终显示在屏幕上。每个菜单按钮都与一个菜单小部件相关联,当点击它时,它可以显示该菜单按钮的选项。在plotly中,有4种方法可以通过使用更新菜单方法来修改图表。
- restyle:修改数据或数据属性
- relayout:修改布局属性
- update:修改数据和布局属性
- animate:开始或暂停动画
示例:
import plotly.graph_objects as px
import numpy as np
# creating random data through randomint
# function of numpy.random
np.random.seed(42)# Data to be Plotted
random_x = np.random.randint(1, 101, 100)
random_y = np.random.randint(1, 101, 100)plot = px.Figure(data=[px.Scatter(x=random_x,y=random_y,mode='markers',)
])# Add dropdown
plot.update_layout(updatemenus=[dict(buttons=list([dict(args=["type", "scatter"],label="Scatter Plot",method="restyle"),dict(args=["type", "bar"],label="Bar Chart",method="restyle")]),direction="down",),]
)plot.show()
在上面的例子中,我们为相同的数据创建了两个图表。这些图可以使用菜单访问。
为绘图创建滑块和选择器
在plotly中,范围滑块是一个自定义范围类型的输入控件。它允许在指定的最小和最大范围之间选择一个值或一个值范围。范围选择器是用于选择要在图表中显示的范围的工具。它提供了用于选择图表中预配置范围的按钮。它还提供了输入框,可以手动输入最小和最大日期。
示例:
import plotly.graph_objects as px
import plotly.express as go
import numpy as np df = go.data.tips() x = df['total_bill']
y = df['day'] plot = px.Figure(data=[px.Scatter( x=x, y=y, mode='lines',)
]) plot.update_layout( xaxis=dict( rangeselector=dict( buttons=list([ dict(count=1, step="day", stepmode="backward"), ]) ), rangeslider=dict( visible=True), )
) plot.show()