赞
踩
Plotly是一个数据可视化和数据分析的开源Python库。它提供了各种绘图类型,如线图、散点图、条形图、箱型图、热力图等,具有交互性和可定制性。它还提供了一个在线编辑器,可以在web上创建、分享和发布交互式图形。使用Plotly,用户可以快速轻松地制作出漂亮、高质量的可视化图表。
Plotly支持多种绘图方式,包括静态图和交互式图。静态图适合在报告和出版物中使用,而交互式图则更适合在web应用程序和数据仪表板中使用。Plotly还支持在jupyter notebook中使用,方便进行数据分析和交互式数据可视化。
Plotly的一个重要特性是其美观的外观和可定制性。用户可以使用Plotly提供的各种颜色方案,或者使用自己的颜色方案,以满足自己的需求。用户还可以通过修改布局和样式表来自定义图表的外观。
Plotly提供了Python、R和JavaScript的接口,用户可以在这些语言中使用Plotly来创建图表。此外,Plotly还提供了一些数据分析和统计工具,如回归分析、聚类分析等。
总之,Plotly是一个功能强大、易于使用和高度可定制的数据可视化工具,适合数据分析师、数据科学家、研究人员和开发人员等各种数据相关领域的使用。
Plotly支持绘制各种交互式可视化图形,包括但不限于:
此外,Plotly还支持绘制地图可视化,包括散点地图、热力地图、轮廓地图、线路地图等。同时,Plotly还提供了丰富的交互式功能,例如缩放、平移、鼠标悬停提示、选择区域、自定义工具栏等。
绘制散点图可以使用 plotly.graph_objects 中的 Scatter 类或者使用 plotly.express 中的 scatter 函数。
下面是使用 plotly.express 绘制散点图的示例代码:
import plotly.express as px
import pandas as pd
# 创建示例数据
data = pd.DataFrame({
'x': [1, 2, 3, 4, 5],
'y': [5, 4, 3, 2, 1]
})
# 使用 plotly.express 绘制散点图
fig = px.scatter(data, x='x', y='y', title='Scatter plot')
fig.show()
可以通过设置参数来自定义散点图的样式,例如修改颜色、大小、透明度等。
更多关于绘制散点图的示例和参数说明可以参考官方文档:
https://plotly.com/python/scatter-plots/
以下是几个绘制散点图的示例:
import plotly.graph_objs as go
import numpy as np
# 创建随机数据
np.random.seed(123)
x = np.random.randn(100)
y = np.random.randn(100)
# 创建散点图
fig = go.Figure(data=go.Scatter(x=x, y=y, mode='markers'))
# 设置图表标题和轴标签
fig.update_layout(title='Random Scatter Plot',
xaxis_title='X Axis',
yaxis_title='Y Axis')
# 显示图表
fig.show()
此代码将生成一个简单的散点图,显示100个随机生成的数据点。
解释代码:
您可以根据需要对此代码进行调整和修改,以生成您需要的二维散点图。
这里列举的只是几个散点图的示例,plotly还支持许多其他类型的图表,比如柱状图、线图、箱线图等等。
plotly绘制散点图时常用的参数说明如下:
除了上述参数外,还可以通过layout函数设置散点图的布局、标题、轴标签等属性。
要绘制折线图,可以使用plotly的go.Scatter对象。以下是一个简单的例子:
import plotly.graph_objs as go
x = [1, 2, 3, 4, 5]
y = [2, 1, 3, 2.5, 4]
trace = go.Scatter(x=x, y=y, mode='lines+markers')
data = [trace]
layout = go.Layout(title='My Line Chart')
fig = go.Figure(data=data, layout=layout)
fig.show()
在这个例子中,我们创建了一个包含x和y坐标的列表。然后,我们创建一个go.Scatter对象,并指定它的x和y属性,以及绘制模式为’lines+markers’,这将绘制折线图和数据点。
接下来,我们将go.Scatter对象添加到一个列表中,并将其分配给变量data。然后,我们定义一个布局,其中包括一个标题,并将其与数据列表一起传递给go.Figure对象。最后,我们使用fig.show()方法显示图形。
在实际应用中,我们可以根据需要更改线条的颜色、宽度、样式等属性,以及添加注释、调整布局等操作。
以下是一些折线图的示例:
import plotly.graph_objs as go
x_data = [1, 2, 3, 4, 5]
y_data = [1, 4, 9, 16, 25]
fig = go.Figure()
fig.add_trace(go.Scatter(x=x_data, y=y_data, mode='lines', name='line'))
fig.show()
import plotly.graph_objs as go
x_data = [1, 2, 3, 4, 5]
y_data = [1, 4, 9, 16, 25]
fig = go.Figure()
fig.add_trace(go.Scatter(x=x_data, y=y_data, mode='lines+markers', name='line'))
fig.show()
import plotly.graph_objs as go
x_data = [1, 2, 3, 4, 5]
y1_data = [1, 4, 9, 16, 25]
y2_data = [1, 2, 3, 4, 5]
fig = go.Figure()
fig.add_trace(go.Scatter(x=x_data, y=y1_data, mode='lines', name='line1'))
fig.add_trace(go.Scatter(x=x_data, y=y2_data, mode='lines', name='line2'))
fig.show()
import plotly.graph_objs as go
import numpy as np
x_data = np.arange(0, 2*np.pi, 0.1)
y_data = np.sin(x_data)
error = 0.1 * np.abs(y_data)
fig = go.Figure()
fig.add_trace(go.Scatter(
x=x_data,
y=y_data,
mode='lines',
name='sin(x)'
))
fig.add_trace(go.Scatter(
x=x_data,
y=y_data + error,
mode='lines',
line=dict(width=0),
showlegend=False
))
fig.add_trace(go.Scatter(
x=x_data,
y=y_data - error,
mode='lines',
line=dict(width=0),
fillcolor='rgba(68, 68, 68, 0.3)',
fill='tonexty',
showlegend=False
))
fig.show()
import plotly.graph_objs as go
from plotly.subplots import make_subplots
import numpy as np
x_data = np.arange(0, 2*np.pi, 0.1)
y1_data = np.sin(x_data)
y2_data = np.cos(x_data)
fig = make_subplots(rows=2, cols=1)
fig.add_trace(go.Scatter(x=x_data, y=y1_data, mode='lines', name='sin(x)'), row=1, col=1)
fig.add_trace(go.Scatter(x=x_data, y=y2_data, mode='lines', name='cos(x)'), row=2, col=1)
fig.show()
以上是一些折线图的示例,您可以根据需要进行修改和定制。
plotly 绘制折线图的常用参数如下:
另外还有一些常用的布局参数,用于控制图表的大小、标题、轴标签等。例如,width、height、title、xaxis_title、yaxis_title 等。
可以使用plotly.express中的bar函数绘制条形图。下面是一个简单的例子:
import plotly.express as px
data = {
'fruit': ['apple', 'banana', 'orange', 'kiwi'],
'count': [3, 2, 4, 1]
}
fig = px.bar(data, x='fruit', y='count')
fig.show()
这将绘制一个简单的条形图,其中水果名称在X轴上显示,计数在Y轴上显示。
您可以使用color参数指定一个列名,使每个条形的颜色根据该列的不同值而变化:
import plotly.express as px
data = {
'fruit': ['apple', 'banana', 'orange', 'kiwi'],
'count': [3, 2, 4, 1],
'color': ['red', 'yellow', 'orange', 'green']
}
fig = px.bar(data, x='fruit', y='count', color='color')
fig.show()
您还可以使用其他参数自定义图表的外观,例如:
import plotly.express as px
data = {
'fruit': ['apple', 'banana', 'orange', 'kiwi'],
'count': [3, 2, 4, 1],
'color': ['red', 'yellow', 'orange', 'green']
}
fig = px.bar(data, x='fruit', y='count', color='color')
fig.update_layout(
title='Fruit Counts',
xaxis_title='Fruit',
yaxis_title='Count',
font=dict(size=18)
)
fig.show()
这将设置图表的标题,X轴和Y轴的标题,以及字体大小。
以下是一些常见的条形图示例:
在使用plotly绘制条形图时,可以通过传递不同的参数来实现这些不同类型的条形图,如barmode、orientation、stackgroup等等。具体使用方法和参数说明可以参考官方文档。
簇状条形图(Grouped Bar Chart)是用于显示两个或更多组之间比较的一种图表类型。在簇状条形图中,每个组有自己的条形,条形并排排列在同一水平线上,便于直接比较组之间的值。
使用Plotly绘制簇状条形图需要指定barmode参数为group,并使用color参数指定组的颜色。以下是一个使用Plotly绘制簇状条形图的例子:
import plotly.graph_objs as go
# 准备数据
data = [
{'category': 'A', 'value': 10, 'group': 'Group1'},
{'category': 'B', 'value': 20, 'group': 'Group1'},
{'category': 'C', 'value': 30, 'group': 'Group1'},
{'category': 'A', 'value': 15, 'group': 'Group2'},
{'category': 'B', 'value': 25, 'group': 'Group2'},
{'category': 'C', 'value': 35, 'group': 'Group2'},
]
# 创建图表
fig = go.Figure()
# 添加簇状条形图
fig.add_trace(
go.Bar(x=[d['category'] for d in data if d['group'] == 'Group1'],
y=[d['value'] for d in data if d['group'] == 'Group1'],
name='Group1', marker_color='blue')
)
fig.add_trace(
go.Bar(x=[d['category'] for d in data if d['group'] == 'Group2'],
y=[d['value'] for d in data if d['group'] == 'Group2'],
name='Group2', marker_color='red')
)
# 设置布局
fig.update_layout(title='Grouped Bar Chart', barmode='group')
# 显示图表
fig.show()
该例子中,我们首先准备了一个包含两个组、三个类别的数据集。然后,我们使用Plotly创建了一个空的图表,接着分别添加了两组簇状条形图,并设置barmode为group,color为不同的颜色。最后,我们使用update_layout()方法设置了图表标题和布局,并使用show()方法显示图表。
堆叠条形图(Stacked Bar Chart)是一种用于比较多个项目不同部分之间相对比例的图表。它将多个条形图堆叠在一起,并且每个条形图的值都会被分成几个部分,每个部分用不同的颜色表示。
下面是使用 Plotly 绘制堆叠条形图的示例代码:
import plotly.express as px
import pandas as pd
# 创建示例数据
data = {'year': [2016, 2016, 2017, 2017],
'quarter': ['Q1', 'Q2', 'Q1', 'Q2'],
'revenue': [100, 150, 200, 250],
'cost': [50, 75, 100, 125]}
df = pd.DataFrame(data)
# 绘制堆叠条形图
fig = px.bar(df, x='year', y=['revenue', 'cost'], color_discrete_sequence=['#636EFA', '#EF553B'],
barmode='stack')
fig.show()
这个示例代码中,我们使用了 px.bar() 函数来绘制堆叠条形图。x 参数指定了用于分组的变量,y 参数指定了需要绘制的数值变量,color_discrete_sequence 参数指定了每个分组的颜色,barmode 参数指定了堆叠模式。
运行这个代码后,你应该会看到一张堆叠条形图,其中每个条形图的值被分成两个部分,分别用蓝色和红色表示。
水平条形图(Horizontal Bar Chart)是一种将数据以水平方向展示的条形图,适合于展示类别之间的大小比较。在Plotly中,可以使用px.bar()函数创建水平条形图,并通过设置参数实现不同的效果。
以下是一个绘制水平条形图的简单示例:
import plotly.express as px
import pandas as pd
df = pd.DataFrame({'category': ['A', 'B', 'C', 'D'], 'value': [25, 32, 18, 35]})
fig = px.bar(df, x='value', y='category', orientation='h')
fig.show()
解释一下上述代码:
首先,创建了一个包含两列数据的数据框df,其中一列是类别category,另一列是对应类别的数值value。然后,使用px.bar()函数创建水平条形图。x参数指定了数值数据所在的列,y参数指定了类别数据所在的列,orientation参数设置为’h’表示绘制水平条形图。最后,使用fig.show()函数显示图形。
除了px.bar()函数,也可以使用go.Bar()函数创建水平条形图。示例如下:
import plotly.graph_objects as go
import pandas as pd
df = pd.DataFrame({'category': ['A', 'B', 'C', 'D'], 'value': [25, 32, 18, 35]})
fig = go.Figure(go.Bar(x=df['value'], y=df['category'], orientation='h'))
fig.show()
其中,go.Bar()函数创建条形图,x参数和y参数分别指定了水平和垂直方向的数据。
plotly中没有内置的“百分比堆叠条形图”(Percentage Stacked Bar Chart)类型,但是可以通过一些数据处理和布局设置来实现该类型的图表。
首先,需要将数据转换成百分比形式,以确保每个组内的条形高度之和为100%。假设有以下示例数据:
import pandas as pd
data = {
'category': ['A', 'B', 'C', 'D'],
'group1': [20, 30, 25, 15],
'group2': [40, 25, 20, 15],
'group3': [10, 30, 25, 35],
}
df = pd.DataFrame(data)
将各组数据转换成百分比形式:
df_pct = df.set_index('category').apply(lambda x: x / x.sum(), axis=1).reset_index()
此时的df_pct数据如下:
category group1 group2 group3
0 A 0.285714 0.571429 0.142857
1 B 0.375000 0.312500 0.312500
2 C 0.357143 0.285714 0.357143
3 D 0.214286 0.214286 0.571429
然后,可以使用plotly.express库的bar函数绘制水平条形图,并设置barmode参数为stack,同时设置orientation参数为h(表示水平方向)。为了使每个组内的条形高度之和为100%,还需要设置base参数为group1列的负值。
import plotly.express as px
fig = px.bar(df_pct, x='group1', y='category', orientation='h',
barmode='stack', base=df_pct['group1'] * -1,
color_discrete_sequence=['#1f77b4', '#ff7f0e', '#2ca02c'])
fig.show()
在上述代码中,color_discrete_sequence参数用于设置不同组的条形颜色。
以下是使用 Plotly 绘制分组水平条形图的示例代码:
import plotly.graph_objects as go
import pandas as pd
# 创建数据
df = pd.DataFrame({
'Gender': ['Female', 'Male', 'Female', 'Male', 'Female', 'Male'],
'Class': ['Class A', 'Class A', 'Class B', 'Class B', 'Class C', 'Class C'],
'Score': [60, 70, 80, 85, 90, 95]
})
# 绘制水平条形图
fig = go.Figure(go.Bar(
x=df['Score'],
y=df['Class'],
orientation='h',
marker=dict(
color=df['Gender'].map({'Female': 'red', 'Male': 'blue'})
),
text=df['Score'],
textposition='inside',
))
# 添加图例
fig.update_layout(
legend_title_text='Gender',
legend=dict(
orientation='h',
yanchor='bottom',
y=1.02,
xanchor='right',
x=1
)
)
# 显示图像
fig.show()
这个例子展示了一个分组水平条形图,其中每个班级的男女学生得分进行了比较。在这个图表中,每个班级在 y 轴上对齐,学生的得分在 x 轴上表示。不同颜色的条形代表不同的性别。此外,还通过在条形中间添加分数标签来进一步说明数据。最后,添加了一个水平图例,以方便解释性别与颜色之间的关系。
plotly交错条形图(Diverging Bar Chart)可以用于比较两组数据,将它们放在一起,以便更直观地显示它们之间的差异。下面是一个简单的示例,展示如何使用plotly绘制交错条形图:
import plotly.graph_objs as go
# 创建数据
x = ['A', 'B', 'C', 'D', 'E']
y1 = [3, 2, 1, 1, 2]
y2 = [-3, -2, -1, -1, -2]
# 创建交错条形图
fig = go.Figure(data=[
go.Bar(name='Group 1', x=x, y=y1),
go.Bar(name='Group 2', x=x, y=y2)
])
# 设定布局
fig.update_layout(
title='Diverging Bar Chart Example',
xaxis_title='Category',
yaxis_title='Value',
barmode='relative',
bargap=0.1, # 每个小组之间的间隔
bargroupgap=0.1 # 不同组之间的间隔
)
# 显示图表
fig.show()
在上面的代码中,我们首先创建了两组数据y1和y2,然后使用go.Bar()方法创建两组条形图,分别对应两组数据。在创建图表时,我们将barmode参数设置为relative,这样就能够创建交错条形图。bargap和bargroupgap参数分别用于调整小组内和小组间的间距。最后,我们使用fig.show()方法显示图表。
绘制条形图时,plotly提供了许多可调整的参数,可以对图形进行自定义设置。下面是一些常用的参数:
以上只是一些常见的参数,plotly还提供了许多其他的参数可供使用。
要使用 Plotly 绘制面积图,可以使用 plotly.graph_objects 模块中的 Scatter 类,将 mode 参数设置为 ‘lines’ 和 ‘lines+markers’,并将 fill 参数设置为 ‘tozeroy’,表示将面积填充到 x 轴之间的区域。
以下是一个绘制简单面积图的示例代码:
import plotly.graph_objects as go
import pandas as pd
# 创建数据
x = [1, 2, 3, 4, 5]
y = [1, 3, 2, 4, 3]
# 创建面积图
fig = go.Figure(go.Scatter(x=x, y=y, mode='lines', fill='tozeroy'))
# 设置布局
fig.update_layout(title='Area Chart')
# 显示图形
fig.show()
运行上述代码将绘制一个简单的面积图,其中 x 和 y 分别是 x 轴和 y 轴的数据。您还可以使用 title 方法设置图表标题。
如果您的数据包含多个线路,则可以在 Scatter 类中传递一个列表,并在 mode 中指定 ‘lines’ 和 ‘lines+markers’,以分别绘制线和点。以下是一个绘制多条线路面积图的示例代码:
import plotly.graph_objects as go
import pandas as pd
# 创建数据
x = [1, 2, 3, 4, 5]
y1 = [1, 3, 2, 4, 3]
y2 = [2, 4, 3, 1, 5]
y3 = [3, 1, 4, 2, 6]
# 创建面积图
fig = go.Figure()
fig.add_trace(go.Scatter(x=x, y=y1, mode='lines', name='line1', fill='tozeroy'))
fig.add_trace(go.Scatter(x=x, y=y2, mode='lines+markers', name='line2', fill='tozeroy'))
fig.add_trace(go.Scatter(x=x, y=y3, mode='lines+markers', name='line3', fill='tozeroy'))
# 设置布局
fig.update_layout(title='Area Chart with Multiple Lines')
# 显示图形
fig.show()
运行上述代码将绘制一个多条线路的面积图,其中 x 和 y1、y2、y3 分别是 x 轴和 y 轴的数据。每个线路都可以使用 name 方法指定名称,并在图例中显示。
以下是几个绘制面积图的例子:
import plotly.express as px
df = px.data.gapminder().query("continent=='Europe'")
fig = px.area(df, x="year", y="pop", color="country", line_group="country")
fig.show()
import plotly.express as px
df = px.data.gapminder()
fig = px.area(df, x="year", y="pop", color="continent", line_group="country",
hover_name="country", color_discrete_sequence=px.colors.qualitative.Pastel)
fig.update_traces(opacity=0.5)
fig.show()
plotly 绘制面积图的主要参数如下:
这些参数的具体用法可以参考 plotly 官方文档。
使用 Plotly 绘制直方图,需要使用 px.histogram() 函数,该函数的输入参数包括数据集、X 轴和 Y 轴的名称等。
下面是一个简单的例子,绘制了一个直方图:
import plotly.express as px
import pandas as pd
# 生成随机数据
df = pd.DataFrame({'value': np.random.randn(500)})
# 绘制直方图
fig = px.histogram(df, x="value")
# 显示图表
fig.show()
你可以在 px.histogram() 函数中设置很多参数,包括:
更多关于 px.histogram() 函数的参数和使用方法,请参考 Plotly 官方文档。
以下是一些使用Plotly绘制直方图的示例:
import plotly.express as px
import numpy as np
# 生成数据
np.random.seed(123)
x = np.random.normal(size=500)
# 绘制直方图
fig = px.histogram(x)
fig.show()
import plotly.express as px
import numpy as np
# 生成数据
np.random.seed(123)
x = np.random.normal(size=500)
# 指定bin个数为30
fig = px.histogram(x, nbins=30)
fig.show()
import plotly.express as px
import numpy as np
# 生成数据
np.random.seed(123)
x = np.random.normal(size=500)
# 指定bin范围为[-3, 3]
fig = px.histogram(x, range_x=[-3, 3])
fig.show()
import plotly.express as px
import numpy as np
# 生成数据
np.random.seed(123)
x1 = np.random.normal(loc=-2, size=500)
x2 = np.random.normal(loc=2, size=500)
# 绘制直方图,并添加密度曲线
fig = px.histogram(x=[x1, x2], opacity=0.75, nbins=30, histnorm='probability density')
fig.update_traces(alignmentgroup='group1')
fig.show()
下面是 plotly 绘制直方图时常用的一些参数:
更多详细参数可以参考 Plotly 官方文档。
可以使用 Plotly 绘制箱型图,下面是一个简单的例子:
import plotly.express as px
import seaborn as sns
tips = sns.load_dataset('tips')
fig = px.box(tips, x='day', y='total_bill')
fig.show()
这个例子使用 Seaborn 加载了一个名为 tips 的数据集,然后使用 Plotly 绘制了一个箱型图。在 px.box() 函数中,tips 是数据集,x=‘day’ 表示将箱型图按 day 分组,y=‘total_bill’ 表示箱型图的数据来源于 total_bill 列。
除了这些基本参数之外,px.box() 还有其他可选参数。下面是一些常用参数的说明:
具体参数可以参考 Plotly 官方文档。
以下是一些绘制箱型图的示例:
import plotly.express as px
df = px.data.tips()
fig = px.box(df, y="total_bill")
fig.show()
import plotly.express as px
df = px.data.tips()
fig = px.box(df, x="day", y="total_bill", color="smoker")
fig.show()
import plotly.express as px
df = px.data.tips()
fig = px.box(df, x="total_bill", orientation="h")
fig.show()
import plotly.express as px
import numpy as np
x = np.random.randn(1000)
fig = px.box(x=x)
fig.show()
import plotly.express as px
import pandas as pd
df = pd.DataFrame({
"day": ["Mon", "Tues", "Wed", "Thurs", "Fri", "Sat", "Sun"],
"value1": [1, 3, 2, 5, 7, 8, 4],
"value2": [4, 6, 5, 3, 2, 3, 6],
"value3": [7, 4, 5, 6, 5, 2, 4]
})
fig = px.box(df, x="day", y=["value1", "value2", "value3"])
fig.show()
import plotly.graph_objs as go
data = [go.Box(
y=[0, 1, 1, 2, 3, 5, 8, 13, 21],
name='Custom box',
boxpoints='all',
jitter=0.3,
pointpos=-1.8,
whiskerwidth=0.2,
fillcolor='rgb(93, 164, 214)',
marker=dict(
size=2,
),
line=dict(width=1),
)]
layout = go.Layout(
title='Customized Box Plot',
yaxis=dict(
title='Value',
zeroline=False
),
boxmode='group'
)
fig = go.Figure(data=data, layout=layout)
fig.show()
以下是plotly绘制箱型图常用参数的说明:
注意,有些参数只适用于水平箱型图或竖直箱型图,具体适用范围请参考官方文档。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。