看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
Plotly 的 Python 图形库制作交互式、出版物质量的图形。可以制作线图、散点图、面积图、条形图、误差条、方框图、直方图、热图、子图、多轴、极坐标图和气泡图等。它可以和 Pandas 深入配合,输出精美的互动式可视化网页图表。
Plotly 在使用前,需要先进行安装:
# 安装 plotly
pip install plotly
在使用时,只需要将 Pandas 的绘图引擎指定为 plotly,如下配置后,可以直接使用 Pandas 的 .plot() 方法:
import pandas as pd
# 以下两个方法其中之一都可以
pd.options.plotting.backend = "plotly"
pd.set_option('plotting.backend', 'plotly')
# 折线图
df.plot()
可传入下文中关于 plotly.express 中 px.line 的各种参数,其他图形同样。有两种方法,可以使用 Plotly:
plotly.express
进行简易方法绘图第一种方法和教程之前介绍过的绘制图形方法没有什么区别,下边将重点介绍一下第二种方法。
plotly.express
模块(通常作为 px 导入)包含可以一次创建整个图形的函数,称为 plotly express 或 px。Plotly Express 是Plotly 库的内置部分,是创建最常见图形的推荐起点。每个 Plotly Express 函数在内部使用图形对象,并返回 plotly.graph_objects.Figure
实例。在整个 Plotly 文档中,在相关的介绍页面的顶部找到构建图形的 plotly Express 方式,然后是关于如何使用图形对象构建类似图形的部分。使用 Plotly Express 在单个函数调用中创建的任何图形都可以单独使用图形对象创建,但代码要多 5 到 100 倍。
以下是使用方法和示例:
import pandas as pd
import plotly.express as px
# 折线图
df.pipe(px.line, 'time', 'data')
# 绘制一个横向条形图,指定大小
df.pipe(px.bar, 'rate', 'label',
height=1000, width=1300,
orientation='h')
# 绘制一个饼图,指定大小,环状(中间洞的大小比例)
df.pipe(px.pie, names='label', values='rate',
height=1000, width=1300, hole=0.5)
# 复合使用
import plotly.graph_objs as go
(
df.pipe(px.line, 'name', ['Q1', 'Q2'])
.update_traces(mode='markers', marker_line_width=2, marker_size=10)
.update_layout(title='Styled Scatter',
yaxis_zeroline=False, xaxis_zeroline=False)
.add_trace(go.Scatter(x=df.name, y=df.Q3))
)
以下为日常绘图操作中各种图形的相关参数:
通用配置:
import plotly.express as px
import plotly.io as pio
pio.templates.default = "simple_white"
px.defaults.template = "ggplot2"
px.defaults.color_continuous_scale = px.colors.sequential.Blackbody
px.defaults.width = 600
px.defaults.height = 400
通用参数:
title=None # 标题
width=None # 宽
height=None # 高
color=df.Q2 # 色阶大小指示
hover_name=df.name # 鼠标悬停标题
hover_data=[df.Q1, df.team] # 鼠标悬停显示数据
# bar
barmode="group" # 柱状图并列模式
# bar 连续数据颜色刻度色系取值,需要用 color 参数指定色阶字段
color_continuous_scale=px.colors.sequential.Rainbow
# bar,指定给予不同纹理用于区分的柱子
pattern_shape='Q2'
text='Q4' # 指定列数据标注在图形上
base='Q2' # bar 从哪个值的位置处开始画柱子
hole=0.3 # 甜甜圈
animation_frame='Q1' # 每一动画帧的标记
animation_group='Q2' # 每帧的分组
# 饼图上显示值(不显示比例),字体大小
fig.update_traces(textinfo='value', textfont_size=10)
# 显示标签和值、比例
fig.update_traces(textinfo='label+value+percent')
# 将扇区从中心拉出
fig.update_traces(pull=[0, 0, 0, 0.2, 0, 0])
# line
# 绘图显示样式
template="plotly_white"
# 以下样式之一,来自 plotly.io.templates
['ggplot2', 'seaborn', 'simple_white',
'plotly', 'plotly_white', 'plotly_dark',
'presentation', 'xgridoff', 'ygridoff',
'gridon', 'none']
# y 轴的聚会范围,从 0 到 10
range_y=[0, 10]
# 简单示例,标签
px.line(x=t, y=np.cos(t), labels={'x':'t', 'y':'cos(t)'})
# 生成网页
fig.write_html("page.html")
# 导出图片WebP/SVG/PDF pip install -U kaleido
# https://plotly.com/python/static-image-export/
fig.write_image("images/img.png")
img_bytes = fig.to_image(format="png")
图形样式:
# https://plotly.com/python/styling-plotly-express/
# 添加带有箭头的文本标注
fig.add_annotation(text="below target!",
x="Oah", y=50, arrowhead=3, showarrow=True)
fig.add_shape( # 添加一条水平“目标”线
type="line", line_color="salmon", line_width=3, opacity=1,
line_dash="dot", x0=0, x1=1, xref="paper", y0=40, y1=60, yref="y"
)
fig.update_yaxes( # y轴的单位是美元
tickprefix="$", showgrid=True
)
fig.update_layout( # 自定义字体
font_family="Rockwell")
多图布局:
# https://plotly.com/python/subplots/
from plotly.subplots import make_subplots
import plotly.graph_objects as go
fig = make_subplots(rows=1, cols=2)
fig.add_trace(
go.Scatter(x=[1, 2, 3], y=[4, 5, 6]),
row=1, col=1
)
fig.add_trace(
go.Scatter(x=[20, 30, 40], y=[50, 60, 70]),
row=1, col=2
)
fig.update_layout(height=600, width=800, title_text="标题")
fig.show()
其他:
Plotly Express 目前包括以下功能:
高级功能:
Plotly Express API 通常提供以下功能:
更新时间:2021-11-02 18:48:59 标签:pandas plotly 可视化