plotly是一个基于javascript的绘图库,python语言对相关参数进行了封装,ploty默认是生成HTML网页文件,通过浏览器查看,也可以在jupyter notebook中显示。
plotly在python中绘图使用分三种:1、plotly.graph_objs; 2、plotly.express ; 3、dash。
plotly.express 对plotly进行了高级封装,已经整合到plotly中,不需要单独安装。plotly.express 也是调用plotly的绘图功能来实现。dash在使用上,可以将前面两个生成的图传给dash,也可以直接传一个配置字典。
Plotly express是官网推荐的使用入口。当快速绘制图时,优选plotly.express ,需要进行高级定制时,可以通过对Figure配置参数实现。
图表类型有:
plotly/plotly_express都是生成和返回了Figure对象,为plotly.graph_objs._figure.Figure的实例。
import plotly.graph_objects as go
go.Figure(
data=[],
layout=None,
frames=None,
skip_invalid=False,
**kwargs,
)
参数中:
data:绘图系列,如散点图、柱状图,包括数据及针对具体图的参数。
layout:x、y坐标轴、标题、图例等。
frames:动画显示时的参数配置。
分别以go和px为例看生成的数据。import时,plotly.graph_objects简写为go, plotly.express简写为px。
import plotly.graph_objects as go
import plotly.express as px
x=[1,2,3]
y=[4,5,6]
go_fig=go.Figure(
data=[
go.Scatter(
x=x,
y=y
)
]
)
px_fig=px.scatter(x=x,y=y)
#二者均为Figure对象
print(type(go_fig),type(px_fig))
#可以用print直接查看dict数据,因此也可以用修改dict的方式修改相关参数和数据。
print("【go.Figure】\n",go_fig)
print("【px.Scatter】\n",px_fig)
输出为:
【go.Figure】
Figure({
'data': [{'type': 'scatter', 'x': [1, 2, 3], 'y': [4, 5, 6]}], 'layout': {'template': '...'}
})
【px.Scatter】
Figure({
'data': [{'hovertemplate': 'x=%{x}
y=%{y} ',
'legendgroup': '',
'marker': {'color': '#636efa', 'symbol': 'circle'},
'mode': 'markers',
'name': '',
'orientation': 'v',
'showlegend': False,
'type': 'scatter',
'x': array([1, 2, 3], dtype=int64),
'xaxis': 'x',
'y': array([4, 5, 6], 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'}}}
})
由Figure的结构来看,传入的参数为data、layout等。
data
在plotly中,单个的图形对象通常用trace来表示,如:
trace0 = go.Scatter(…)
trace1 = goLine(…)
data表示的即是一个个的trace,而非x、y这样的数据,data可以是对象列表[],也可以是对象元组()。
fig0=go.Figure(
data=[
go.Scatter(...),
go.Bar(...),
go.Line()
]
)
fig1=go.Figure(
data=(trace0,trace1)
)
layout
包括注释、x/y轴、颜色轴、标题、悬停提示、滚动条等,通常都是go.Layout.*中的子类。
可设置项包括:
frames
为plotly.graph_objs.Frame的实例元组或列表,用于动画帧的定义。
Figure的更新比较灵活,可以按层次结构来改,也可以指定名称修改,也可以传入字典。详细的参数可以针对每一个图形来看。
方式一
Figure对象被组织成了树状结构,为dict字典格式,访问时也可以直接通过dict的路径访问。
如设置标题:
px_fig.layout.title.text="散点图" #或者:px_fig.layout.title="散点图"
px_fig.layout.title.font.color="red"
px_fig.show()
方式二
通过plotly的update函数。
如方式一中的修改,用方式二来实现
px_fig.update_layout(title={"text":"散点图","font":{'color':'red'}})
#或者用_连接fig路径,如:
#px_fig.update_layout(title='散点图',title_font_color='blue')
plotly_express在生成时,通常要指定的参数不多,确实是很epress。在生成时要指定的参数是比较有限的,参数包括了Figure结构的data和layout中的部分参数。生成fig后,就可以按Figure对象正常修改。
一些常见的参数有:
data_frame, x, y,symbol, range_x, range_y,color, hover_name, hover_data, labels,title等。
plotly_express的参数和默认值对比如下(如空白,表示无该参数),但plotly_express参数并没有**kwargs,所以要修改指定参数外的参数,还得通过生成的fig来进一步修改。
plotly_express的参数、调用的plotly模块和默认值一览表
应用领域包括统计、科学图表、地图、AI和机器学习等。如官网所示