两种使用plotly的方法:
- 低阶API:Plotly Graph Objects(
go
)- 高阶API:Plotly Express(
px
)
导入语句为:
import plotly.express as px
import plotly.graph_objects as go
go.Table函数,指定header对应的列名和cells对应的数据,填充的颜色用fill_color
指定。
fig = go.Figure(data=[go.Table(header=dict(values=views_top.columns,
fill_color='yellow',
),
cells=dict(values=[views_top['event'],views_top['views']],
fill_color='paleturquoise',
))
])
fig.show()# 显示图
density_heatmap函数,热力图的颜色根据z轴的值进行集聚计算得到。
fig = px.density_heatmap(df, x="published_year", y="views",z="comments")
fig.show()
在散点图中用size
参数指定点的大小参考字段,即变为气泡图。
fig = px.scatter(df,x='comments',y='views',size='duration',color='num_speaker', log_x=True, size_max=60)
fig.show()
饼图函数中设置hole
参数值的大小,决定环图的孔的大小,即将饼图变为环图。
fig = go.Figure(
data=[
go.Pie(labels=labels, values=values, hole=0.2)
])
fig.show()
orientation='h'
参数指定柱状图为横向。
fig = px.bar(views_top, x='views', y='event',orientation='h')
fig.show()
通过animation_frame
参数设置数据变化的依据的字段,据此可设置为随时间变化、随区域变化等效果。
px.scatter(df, x="duration", y="comments",animation_frame="published_year", size="duration", color="published_day")
px.bar_polar
绘制玫瑰风型图,r
对应半径长度,theta
为角度。
fig = px.bar_polar(df, r="frequency", theta="direction",
color="strength", template="plotly_dark",
color_discrete_sequence= px.colors.sequential.Plasma_r)
fig.show()
import plotly.graph_objects as go
fig = go.Figure()
fig.add_trace(go.Barpolar(
r=[77.5, 72.5, 70.0, 45.0, 22.5],
name='A',
marker_color='rgb(106,81,163)'
))
fig.add_trace(go.Barpolar(
r=[57.5, 50.0, 45.0, 35.0, 20.0],
name='B',
marker_color='rgb(158,154,200)'
))
fig.add_trace(go.Barpolar(
r=[40.0, 30.0, 30.0, 35.0, 7.5],
name='C',
marker_color='rgb(203,201,226)'
))
fig.update_traces(text=['A', 'B', 'C', 'D', 'E'])
fig.update_layout(
title='A Test',
#font_size=16,
legend_font_size=16,
# polar_radialaxis_ticksuffix='%',
polar_angularaxis_rotation=90,
)
fig.show()
旭日图的作用是显示层级关系的饼状图,对应px.sunburst
函数。
path
指定的多个字段来区分内外对应的层级关系。color_continuous_midpoint
指定了色带的取值中点为按人口数加权平均的人口寿命,即人均寿命。fig = px.sunburst(df, path=['continent', 'country'], values='pop',
color='lifeExp', hover_data=['iso_alpha'],
color_continuous_scale='RdBu',
color_continuous_midpoint=np.average(df['lifeExp'], weights=df['pop']))
branchvalues
设置内外关系。data = dict(
character=["Eve", "Cain", "Seth", "Enos", "Noam", "Abel", "Awan", "Enoch", "Azura"],
parent=["", "Eve", "Eve", "Seth", "Seth", "Eve", "Eve", "Awan", "Eve" ],
value=[42, 14, 12, 10, 2, 6, 6, 4, 4]) # 这里的value对应上面的character
fig =px.sunburst(
data,
names='character',
parents='parent',
values='value',
branchvalues='total',
color = 'value'
)
fig.update_layout(showlegend=True)
fig.show()
px.scatter_3d
指定x、y、z轴参考的数据,color指定颜色深浅参考的字段值。
fig = px.scatter_3d(df,x='comments',y='views',z='duration',color='views')
fig.show()
传入三维数据给go.Surface
函数。
fig = go.Figure(data=[go.Surface(z=df[['duration','views','comments']].values)])
fig.update_layout(title='3D Surface', autosize=False,
width=500, height=500,
margin=dict(l=65, r=50, b=65, t=90))
fig.show()
fig.update_layout
用于布局参数的设置,适用于一开始图表未设置布局参数的情况。
导出html:
fig.write_html("3d.html")
根据facet_col
指定列,按列对应的字段来分为多个子图显示。
px.scatter(df, x="duration", y="comments",
animation_frame="published_month", animation_group="event",
facet_col="published_day",width=1500, height=500,
size="views", color="published_day",
)
error_y
指定误差棒对应的误差值
。
fig = go.Figure(
data=[
go.Bar(
x=views_top['event'], y=views_top['views'],
error_y=dict(type='data', array=views_top['error'].values)
)
])
fig.show()
hover_name
设置悬停时显示的内容,hover_data
设置悬停时显示的数据。
px.scatter(gapminder2002, x='gdpPercap', y='lifeExp',
color='continent', size='pop', size_max=60,
hover_name="country", # 悬停显示的内容
hover_data=["year","continent","gdpPercap","lifeExp"],
facet_col='continent',
title="Mathpretty")
基于mapbox绘图,首先需要在mapbox网站注册并设置自己的API,然后在绘图前用px.set_mapbox_access_token('YOURTOKEN')
命令设置调用的API。
scatter_mapbox
函数px.set_mapbox_access_token('YOURTOKEN')
fig = px.scatter_mapbox(df, lat="lat", lon="lon",
color="region",
size="views",
color_continuous_scale=
px.colors.cyclical.IceFire, size_max=15)
fig.show()
Plotly配色是给了三套配色(大类), 分别是:
层次渐变 Sequential Color scales
强烈的对比渐变, Diverging Color scales
循环渐变, Cyclical Color scales
https://zhuanlan.zhihu.com/p/138789325
https://plotly.com/python/map-subplots-and-small-multiples/
需要安装node.js
和插件。
https://www.jianshu.com/p/9cb9dbff06d1
https://neptune.ai/blog/plotly-python-tutorial-for-machine-learning-specialists
https://mathpretty.com/11919.html