20000字深度讲解 Python 数据可视化神器 Plotly

本文深入探讨Plotly的graph_objs和express绘图原理,通过柱形图、折线图、散点图、热力图、直方图的实例,展示Plotly在机器学习中的应用,并提供技术交流。
摘要由CSDN通过智能技术生成

本文我们按照如下3 part来深入浅出地讲解plotly的使用方法。 喜欢记得收藏、关注、点赞

  • part1: 深入原理, 本文第一节和第二节,分别介绍 go和px 的设计思想和绘图原理。

  • part2: 浅出范例, 本文第三节和第四节,对比性地展示 go和px 的五种绘图范例(柱形图、折线图、散点图、热力图、直方图)

  • part3: 深入实践, 本文第五节,展示一些plotly和机器学习相结合的综合应用范例。

注:完整代码、资料、技术交流,文末提供

一,plotly.graph_objs绘图原理

plotly的Figure是由data(数据,数据包括图表类型(Line,Scatter,Area,Pie)和具体数据取值信息)和 layout(布局,包括xaxis,yaxis,title,legend等) 组成的对象。

Figure对象就像一个透明的嵌套的Python dict 一样,可以通过修改元素值而改变其形态。

import numpy as np 
import plotly.graph_objs as go

epoches = np.arange(20)
accs = 1-0.9/(epoches+1)

data = go.Scatter(x = epoches, y=accs, mode = "lines+markers",name = "acc",
                    marker = dict(size=8,color="blue"),
                    line= dict(width=2,color="blue",dash="dash"))

layout = {
 "title":"accuracy via epoch",
          "xaxis.title":"epoch",
          "yaxis.title":"accuracy",
          "font.size":15}

fig = go.Figure(data = data,layout=layout)
fig.show()

如果要把图表的颜色改成红色实线怎么办呢?很简单,我们先print(fig)一下,观察它的结构,找到线的颜色和线型的属性获取方法,然后直接对相应属性赋值就可以了。

print(fig.data)  #如果想获取fig更详细结构信息,可以直接 fig.to_dict()
(Scatter({
 
'line': {
 'color': 'blue', 'dash': 'dash', 'width': 2},
'marker': {
 'color': 'blue', 'size': 8},
'mode': 'lines+markers',
'name': 'acc',
'x': array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,
18, 19]),
'y': array([0.1       , 0.55      , 0.7       , 0.775     , 0.82      , 0.85      ,
0.87142857, 0.8875    , 0.9       , 0.91      , 0.91818182, 0.925     ,
0.93076923, 0.93571429, 0.94      , 0.94375   , 0.94705882, 0.95      ,
0.95263158, 0.955     ])
}),)
fig.data[0].line.color = "red"
fig.data[0].line.dash = "solid"
fig

怎么样,plotly是不是一个当之无愧的小透明。

以上这种直接对一个Figure对象的属性的值的修改方法多少显得有些粗暴,不够尊重小透明。

实际上,plotly的Figure对象提供了 fig.update_layout 和 fig.update_data 这样的方法来让 小透明面对突如其来的修改时候显得更加体面一些。

import numpy as np 
import plotly.graph_objs as go
epoches = np.arange(20)
accs = 1-0.9/(epoches+1)
fig = go.Figure(data = go.Scatter(x = epoches, y=accs, mode = "lines+markers",name = "acc",
                    marker = dict(size=8,color="blue"),
                    line= dict(width=2,color="blue",dash="dash")))
fig.show()

fig.update_traces(patch={
 "line.color":"red","line.dash":"solid"},selector=dict(name="acc"))
fig.update_layout({
 "title":"accuracy via epoch",
          "xaxis.title":"epoch",
          "yaxis.title":"accuracy",
          "font.size":15})
fig.show()

二,plotly.express绘图原理

使用 import plotly.graph_objs as go 的go接口来绘制图表实际上已经非常简单了,一般类型的图表三五行代码就可以搞定。

但我还是想偷懒,能否一行代码就搞定大部分常用图表呢。

当然可以,plotly.express就是为你准备的。英文单词express 意为 快线,特快列车。就像营养快线的英文,Nutri-express.

plotly.express的原理非常简单,Figure不是主要由 data(traces)和layout组成嘛。

data部分传入一个pandas的DataFrame,而layout部分可以用模板template指定嘛,一行代码搞定。

当然有时候template的一些微观形态可能与用户想要的还不完全一样,将生成的Figure当做小透明直接修改属性即可。

import plotly.express as px 
import numpy as np 
import pandas as pd 

dfdata = pd.DataFrame({
 "epoch":np.arange(20),"accuracy":1-0.9/(np.arange(20)+1)})
fig = px.line(data_frame=dfdata,x="epoch",y="accuracy",title="accuracy via epoch")
fig.show()

可以看到,plotly.express已经帮我们把坐标轴标题什么的都设置好了。

但是整体看起来还是有些不太美观,多大的事呀,分分钟修改小透明!

fig.update_traces(patch=dict(mode = "lines+markers",
                    marker = dict(size=8,color="blue"),
                    line= dict(width=2,color="red",dash="solid")),
                  selector=dict(type="scatter")) #用patch指定补丁,用selector指定对那个数据打补丁
fig.update_layout({
 "font.size":15})
fig.show()

除了精细地修改Figure属性的话,我们想改变Figure样貌的更加快捷的方式是换一个模板(template)

import plotly 
print(plotly.io.templates) 
fig.layout.template = "seaborn" 
fig
Templates configuration
-----------------------
    Default template: 'plotly'
    Available templates:
        ['ggplot2', 'seaborn', 'simple_w
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值