Plotly深入浅出

可视化工具--Plotly 随着信息技术的发展和硬件设备成本的降低,当今的互联网存在海量的数据,要想快速从这些数据中获取更多有效的信息,数据可视化是重要的一环。对于Python语言来说,比较传统的数据可视化模块是Matplotlib,但它存在不够美观、静态性、不易分享等缺点,限制了Python在数据可视化方面的发展。   为了解决这个问题,新型的动态可视化开源模块Plotly应运而生。由于Plotly具有动态、美观、易用、种类丰富等特性,所以一经问世就受到开发人员的喜爱。 阅读详情

作为Python的新一代数据可视化绘图库,和matplotlib等传统绘图库相比,plotly具有以下优点:

  • 简洁易用: 作为一只小透明,plotly的图表对象就像一个嵌套dict, 可以通过直接修改对象属性而改变图表形态。学习难度远远小于matplotlib.

  • 动态交互: plotly绘制的图都是可以交互的图表,可以点击查看数据,拖拽放大,隐藏某些数据列等等,也可以导出成静态图,灵活性大大增加。

  • 前端能力: 基于plotly和React开发的Dash号称是 The front end for ML and data science models,可以基于它用Python轻松构建机器学习应用App.

通常,plotly有两种常用的绘图接口:

  • 第一种是面向对象的绘图接口:plotly.graph_objs(简称go),也是最基础的绘图接口,

  • 第二种是面向函数式的快速绘图接口: plotly.express(简称px),是在go基础上封装的一种更方便的绘图接口。

本文我们按照如下3 part来深入浅出地讲解plotly的使用方法。

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

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

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

参考文档:

plotly: https://plotly.com/python/

dash: https://dash.plotly.com/

dash机器学习应用:https://plotly.com/building-machine-learning-web-apps-in-python/

公众号后台回复关键词:plotly,获取本文教程jupyter notebook源码。

一,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()

e2970d40892de0ad1e402d6d7872c034.png

如果要把图表的颜色改成红色实线怎么办呢?很简单,我们先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

a2f9a2a3f5253c41a0d15389aaeabc35.png

怎么样,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()

b25032a9cba535798a829bb5edc2e85f.png

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()

159a66a059370f8179542dc539b4184c.png

二,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()

741a6269e85c18a27682d793b9fbfbe0.png

可以看到,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()

71676ae6748cd2c0d954100015a4c059.png

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

import plotly 
print(plotly.io.templates) 
fig.layout.template = "seaborn" 
fig
Templates configuration
-----------------------
    Default template: 'plotly'
    Available templates:
        ['ggplot2', 'seaborn', 'simple_white', 'plotly',
         'plotly_white', 'plotly_dark', 'presentation', 'xgridoff',
         'ygridoff', 'gridon', 'none']

cb0ce13bf48856fc05dc823635d6ec8a.png

三,常用图表go绘图范例

plotly支持的图表类型非常丰富,包括各种基础图表,统计图表,金融图表,机器学习图表,地图图表,and more.

详情参考 https://plotly.com/python/ 中的gallery范例。

此处只介绍最基础最常用的5种基础图表类型:柱形图、折线图、散点图、热力图、直方图。

我们先用go接口展示绘图范例,然后作为比较,用px接口再实现一遍。

1,柱形图

柱形图适合表现几组数据之间的对比关系,柱形图的数据的数量一般不宜太多。

import pandas as pd 
import plotly.graph_objs as go

x = ["f1", "f2", "f3", "f4", "f5"]
y1 = [5, 20, 36, 10, 75]
y2 = [10, 25, 8, 60, 20]

traceA = go.Bar(x=x,y=y1,name="模型A")
traceB = go.Bar(x=x,y=y2,name="模型B")
layout = go.Layout(title="特征重要性分析",xaxis={"title":"特征"},
    yaxis={"title":"重要性"},barmode="group") #barmode is one of "relative","overlay","group"

fig = go.Figure(data = [traceA,traceB],layout=layout)
fig.show()

235460f768d00244e3b213a6d05c4e21.png

# 互换 x轴 和 y轴含义,orientation设置为horizontal,变成水平条形图
import pandas as pd 
import plotly.graph_objs as go

x = ["f1", "f2", "f3", "f4", "f5"]
y1 = [5, 20, 36, 10, 75]
y2 = [10, 25, 8, 60, 20]

traceA = go.Bar(x=y1,y=x,name="模型A",orientation='h')
traceB = go.Bar(x=y2,y=x,name="模型B",orientation='h')
layout = go.Layout(title="特征重要性分析",xaxis={"title":"重要性"},
    yaxis={"title":"特征"},barmode="group") #barmode is one of "relative","overlay","group"

fig = go.Figure(data = [traceA,traceB],layout=layout)
fig.show()

518facfe9644fadc65de49c9905b0476.png

2,折线图

折线图适合描述两个变量之间的函数关系,例如常用它来描述一个变量随时间的变化趋势。

import pandas as pd 
import plotly.graph_objs as go

dates = ['2021-{:0>2d}'.format(s) for s in range(1,13)]
acc = [70,72,80,65,76,80,60,67,80,90,94,82]
recall = [65,42,35,25,67,54,34,45,38,46,64,34]

fig = go.Figure()
fig.add_trace(go.Scatter(x=dates,y=acc,name="准确率",mode = "lines+markers"))
fig.add_trace(go.Scatter(x=dates,y=recall,name="召回率",mode = "lines+markers"))
fig.update_layout({"title":"线上模型表现变化趋势","xaxis.title":"月份","yaxis.title":"指标"})
fig.update_layout({"font":{"size":15}})
fig.show()

397e52d149894f01b496bed6ae74ed2e.png

#以上图表中的x轴刻度被自动换成了英文时间,不是很方便识别,使用如下设置直接指定刻度位置和刻度显示内容。
fig.update_layout(
    xaxis = dict(tickmode='array', 
                 tickvals = x,    
                 ticktext = x,     
                 tickangle = 60
    )
)
fig.show()

c06205ce0b2ee913aad509f37b802b02.png

3,散点图

散点图适合表现大量样本的多个属性的分布规律。散点图的每个点表示一个样本,每个坐标维度表示一个属性。

当样本属性维度多于2个时,可以使用点的颜色或大小等方式来表达更多属性维度。

import pandas as pd 
import plotly.graph_objs as go

dfboy = pd.DataFrame()
dfboy['weight'] = [56,67,65,70,57,60,80,85,76,64]
dfboy['height'] = [162,170,168,172,168,172,180,176,178,170]
dfboy["BMI"] =  dfboy["weight"]/(dfboy["height"]**2)

dfgirl = pd.DataFrame()
dfgirl['weight'] = [50,62,60,70,57,45,62,65,70,56]
dfgirl['height'] = [155,162,165,170,166,158,160,170,172,165]
dfgirl["gender"] = "female"
dfgirl["BMI"] = dfgirl["weight"]/(dfgirl["height"]**2)


trace1 = go.Scatter(x=dfboy["weight"],y=dfboy["height"],mode="markers",name="male",
                     marker = dict(color="blue",size=3e5*dfboy["BMI"],sizemode='area'))

trace2 = go.Scatter(x=dfgirl["weight"],y=dfgirl["height"],mode="markers",name="female",
                   marker = dict(color="red",size=3e5*dfgirl["BMI"],
                                 sizemode='area'))

layout = go.Layout({"title":"height & weight",
                    "xaxis.title":"weight",
                    "yaxis.title":"height",
                    "legend.title":"gender",
                    "font.size":15})

fig = go.Figure(data=[trace1,trace2],layout=layout)
fig.show()

6294e60dcf809a53c15c14a6a6bdd998.png

4,热力图

热力图可以直观地展示一个二维矩阵的取值,它将一个矩阵的每个元素取值对应到热力图上的一个像素颜色取值。

import numpy as np 
import plotly.graph_objs as go

arr = np.random.normal(loc = 0,scale = 1,size = [10,10])
trace = go.Heatmap(x=np.arange(10),y=np.arange(10),z=arr,
                   colorscale='Viridis',showscale=True,reversescale = False)
layout = go.Layout(width=600, height=600)
fig = go.Figure(data=trace,layout=layout) 
fig.show()

bc3bc3ed15632014a12a62150054fa40.png

5,直方图

直方图适合呈现一组数据的统计分布规律,它计算这组数据落在各个小的分段区间的样本个数并用类似柱状图的方式展示出来。

import numpy as np 
import plotly.graph_objs as go 
scores = np.random.randint(low=0,high=100,size = 1000)

trace = go.Histogram(x=scores,histnorm = 'density',nbinsx=60)
fig = go.Figure(trace)
fig.update_layout({"title":"Score Distribution","xaxis.title":"score","yaxis.title":"frequency","template":"seaborn"})
fig.show()

00785b6cf202d1df1781be93a890307c.png

四,常用图表px绘图范例

作为对比,下面使用plotly.express接口绘制5种最常用的基础图表:

柱形图、折线图、散点图、热力图、直方图。

1,柱形图

柱形图适合表现几组数据之间的对比关系,柱形图的数据的数量一般不宜太多。

import pandas as pd 
import plotly.express as px 

x = ["f1", "f2", "f3", "f4", "f5"]
y1 = [5, 20, 36, 10, 75]
y2 = [10, 25, 8, 60, 20]
df=pd.DataFrame({"特征": x, "模型A": y1, "模型B": y2})

fig = px.bar(data_frame= df, x = "特征",y= ["模型A","模型B"],
       title = "特征重要性分析",barmode = "group") #barmode is one of "relative","overlay","group"
fig.layout.yaxis.title = "重要性"
fig.show()
# 互换 x轴 和 y轴含义,变成水平条形图
import pandas as pd 
import plotly.express as px 

x = ["f1", "f2", "f3", "f4", "f5"]
y1 = [5, 20, 36, 10, 75]
y2 = [10, 25, 8, 60, 20]
df=pd.DataFrame({"特征": x, "模型A": y1, "模型B": y2})

fig = px.bar(data_frame= df, x = ["模型A","模型B"], y= "特征",
       title = "特征重要性分析",barmode = "relative") #barmode is one of "relative","overlay","group"
fig.layout.xaxis.title = "重要性"
fig.show()

5ff3999c88e9bd55ed35d5dc7cd991a7.png

2,折线图

折线图适合描述两个变量之间的函数关系,例如常用它来描述一个变量随时间的变化趋势。

import pandas as pd 
import plotly.express as px 

x = ['2021-{:0>2d}'.format(s) for s in range(1,13)]
y1 = [70,72,80,65,76,80,60,67,80,90,94,82]
y2 = [65,42,35,25,67,54,34,45,38,46,64,34]

dfdata = {"月份":x, "召回率": y1, "准确率": y2}

fig = px.line(data_frame=dfdata, x="月份", y = ["召回率","准确率"], title ="线上模型表现变化趋势")
fig.layout.yaxis.title = "指标"
fig.update_layout({"font":{"size":15}})
fig.show()

以上图表中的x轴刻度被自动换成了英文时间,不是很方便识别,使用如下设置直接指定刻度位置和刻度显示内容。

fig.update_layout(
    xaxis = dict(tickmode='array', 
                 tickvals = x,    
                 ticktext = x,     
                 tickangle = 60
    )
)
fig

e8acc158189c0bfe82617c61b952ccf3.png

3,散点图

散点图适合表现大量样本的多个属性的分布规律。散点图的每个点表示一个样本,每个坐标维度表示一个属性。

当样本属性维度多于2个时,可以使用点的颜色或大小等方式来表达更多属性维度。

import pandas as pd 
import plotly.express as px 

dfboy = pd.DataFrame()
dfboy['weight'] = [56,67,65,70,57,60,80,85,76,64]
dfboy['height'] = [162,170,168,172,168,172,180,176,178,170]
dfboy["gender"] = "male"

dfgirl = pd.DataFrame()
dfgirl['weight'] = [50,62,60,70,57,45,62,65,70,56]
dfgirl['height'] = [155,162,165,170,166,158,160,170,172,165]
dfgirl["gender"] = "female"

dftotal = pd.concat([dfboy,dfgirl])
dftotal["BMI"] = dftotal["weight"]/(dftotal["height"]**2)

fig = px.scatter(data_frame=dftotal,x="weight",y="height",color="gender",size = "BMI",
                 color_discrete_map = {"male":"blue","female":"red"},
                 title="height & weight")
fig.update_layout({"font":{"size":15}})

fig

602f68a4806f5585169488a6ae69d7b5.png

4,热力图

热力图可以直观地展示一个二维矩阵的取值,它将一个矩阵的每个元素取值对应到热力图上的一个像素颜色取值。

import numpy as np 
import plotly.express as px 

arr = np.random.normal(loc = 0,scale = 1,size = [10,10])
px.imshow(arr,color_continuous_scale="blues")

6aeb6e44eb5aed5179638775f7233de6.png

5,直方图

直方图适合呈现一组数据的统计分布规律,它计算这组数据落在各个小的分段区间的样本个数并用类似柱状图的方式展示出来。

import numpy as np 
import plotly.express as px 
scores = np.random.randint(low=0,high=100,size = 1000)
fig = px.histogram(x = scores,histnorm = 'density',nbins=60)
fig.update_layout({"xaxis.title":"score"})
fig
import plotly 
plotly.io.write_html(fig,"score_distribution.html")

0f2f4e8fc57217e5f619a7160e56aa86.png

五,在机器学习中应用plotly

本例将使用plotly辅助进行catboost二分类建模的一些可视化分析。

from IPython.display import display 

import datetime,json
import numpy as np
import pandas as pd
import catboost as cb 
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.model_selection import StratifiedKFold

from sklearn.metrics import f1_score,roc_auc_score,roc_curve,accuracy_score,precision_recall_curve,auc
import plotly.graph_objs as go 
import plotly.express as px 
from plotly.subplots import make_subplots 


def printlog(info):
    nowtime = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    print("\n"+"=========="*8 + "%s"%nowtime)
    print(info+'...\n\n')
     
#================================================================================
# 一,准备数据
#================================================================================
printlog("step1: preparing data...")

dfdata = pd.read_csv("../data/titanic/train.csv")
dftest = pd.read_csv("../data/titanic/test.csv")


label_col = "Survived"

# 填充空值特征
dfnull = pd.DataFrame(dfdata.isnull().sum(axis=0),columns = ["null_cnt"]).query("null_cnt>0")

dfdata.fillna(-9999, inplace=True)
dftest.fillna(-9999, inplace=True)


# 刷选类别特征
cate_cols = [x for x in dfdata.columns 
             if dfdata[x].dtype not in [np.float32,np.float64] and x!=label_col]
for col in cate_cols:
    dfdata[col] = pd.Categorical(dfdata[col]) 
    dftest[col] = pd.Categorical(dftest[col]) 

# 分割数据集
dftrain,dfvalid = train_test_split(dfdata, train_size=0.75, random_state=42)
Xtrain,Ytrain = dftrain.drop(label_col,axis = 1),dftrain[label_col]
Xvalid,Yvalid = dfvalid.drop(label_col,axis = 1),dfvalid[label_col]


# 整理成Pool
pool_train = cb.Pool(data = Xtrain, label = Ytrain, cat_features=cate_cols)
pool_valid = cb.Pool(data = Xvalid, label = Yvalid, cat_features=cate_cols)


#================================================================================
# 二,设置参数
#================================================================================
printlog("step2: setting parameters...")
                               
iterations = 1000
early_stopping_rounds = 200

params = {
    'learning_rate': 0.05,
    'loss_function': cb.metrics.Logloss(),
    'eval_metric': "AUC",
    'depth': 6,
    'min_data_in_leaf': 20,
    'random_seed': 42,
    'logging_level': 'Silent',
    'use_best_model': True,
    'boosting_type':"Ordered",
    'nan_mode': 'Min'
}


#================================================================================
# 三,训练模型
#================================================================================
printlog("step3: training model...")


model = cb.CatBoostClassifier(
    iterations = iterations,
    early_stopping_rounds = early_stopping_rounds,
    train_dir='catboost_info/',
    **params
)


model.fit(
    pool_train,
    eval_set=pool_valid,
    plot=True
)


#================================================================================
# 四,评估模型
#================================================================================
printlog("step4: evaluating model ...")


y_pred_train = model.predict(Xtrain)
y_pred_valid = model.predict(Xvalid)

train_score = f1_score(Ytrain,y_pred_train)
valid_score = f1_score(Yvalid,y_pred_valid)


print('train f1_score: {:.5} '.format(train_score))
print('valid f1_score: {:.5} \n'.format(valid_score))   


#feature importance 
dfimportance = model.get_feature_importance(prettified=True) 
dfimportance = dfimportance.sort_values(by = "Importances").iloc[-20:]
fig_importance = px.bar(dfimportance,x="Importances",y="Feature Id",title="Feature Importance")

fig_importance.show() 


#score distribution
y_test_prob = model.predict_proba(dftest.drop(label_col,axis = 1))[:,-1]
fig_hist = px.histogram(
    x=y_test_prob,color =dftest[label_col],  nbins=50,
    title = "Score Distribution",
    labels=dict(color='True Labels', x='Score')
)
fig_hist.show() 


#ROC-AUC & PR-AUC
fpr, tpr, thresholds_roc = roc_curve(dftest[label_col], y_test_prob)
precision, recall, thresholds_pr = precision_recall_curve(dftest[label_col], y_test_prob)

fig = make_subplots(rows=1, cols=2,horizontal_spacing=0.1,vertical_spacing=0.1,
                    start_cell= 'top-left', # 'bottom-left' 'bottom-left',
                    subplot_titles=[
                    f'ROC Curve (ROC-AUC={auc(fpr, tpr):.4f})',
                    f'PR Curve (PR-AUC={auc(recall, precision):.4f})',] 
                   )
#ROC-curve
fig.add_trace(go.Scatter(x=fpr,y=tpr,mode='lines',stackgroup= '1',name="roc_curve"),row=1,col=1)
fig.add_shape(type='line', line=dict(dash='dash'),x0=0, x1=1, y0=0, y1=1,row=1,col=1)
fig.update_xaxes(title_text="False Positive Rate", row=1, col=1)
fig.update_yaxes(title_text="True Positive Rate", row=1, col=1)

#PR-curve
fig.add_trace(go.Scatter(x=recall,y=precision,mode='lines',stackgroup= '1',name="pr_curve"),row=1,col=2)
fig.add_shape(type='line', line=dict(dash='dash'),x0=0, x1=1, y0=1, y1=0,row=1,col=2)
fig.update_xaxes(title_text="Recall", row=1, col=2)
fig.update_yaxes(title_text="Precision", row=1, col=2)

fig.update_layout({"height":500,"width":1000,"showlegend":False})
fig.show() 


#================================================================================
# 五,使用模型
#================================================================================
printlog("step5: using model ...")

y_pred_test = model.predict(dftest.drop(label_col,axis = 1))
y_pred_test_prob = model.predict_proba(dftest.drop(label_col,axis = 1))



#================================================================================
# 六,保存模型
#================================================================================
printlog("step6: saving model ...")

model_dir = 'catboost_model'
model.save_model(model_dir)
model_loaded = cb.CatBoostClassifier()
model.load_model(model_dir)

892f5e2079938e6ebdaa92022cc0d977.png

2bfdfbdb8663f438796d61be60e7654d.png

b962f8ad87f92365acdfe4d76cc4f277.png

以上。

万水千山总是情,点个在看行不行?

公众号后台回复关键词:plotly,获取本文教程jupyter源码。

Python可视化工具——Plotly的使用 Plotly介绍 Plotly是一个强大的开源数据可视化框架,它通过构建web形式的可交互图表展示信息,可创建精美的图表和地图。我是在jupyter notebook里使用的。 官网:Plotly: The front end for ML and data science models 一般有两种使用Plotly的方式,一是在线输入导入数据操作(Chart-Studio);二是编程操作,这篇文章主要介绍的是一些编程操作。 Plotly安装 输入命令行:pip install plotly 散点 阅读详情

相关推荐

Python库Plotly学习笔记

Plotly是一个用于创建交互式图形的Python库。它提供了丰富的图表类型,包括散点图、线图、柱状图、热力图、饼图等,以及高级的可视化功能,如动画、交互、数据缩放和拖动等。

python收藏家的博客 2601

Plotly:最强Python可视化库,没有之一

之前一直使用 matplotlib,这也导致我花费了不知多少个深夜,在 StackOverflow 上搜索如何“格式化日期”或“增加第二个Y轴”,使用 matplotlib 画张图使用了太多的时间。 今天我要给大家分享一篇可视化干货,介绍的是功能强大的开源 Python 绘图库 Plotly,教你如何用超简单的(甚至只要一行)代码,绘制出更棒的图表。喜欢本文记得收藏、点赞、关注。 注:完整版代码、数据、技术交流文末获取 Plotly 概述 plotly 的 Python 软件包是一个开源的代码库,它基于 p

Python学习与数据挖掘 6万+

plotly和R

20150301 今天翻r-Bloggers时不小心点了plotly的广告,无心插柳进入了plotly的新天地(plotly首页:https://plot.ly/feed/ )。 plotly本身是一款独立的web版数据可视化工具,界面友好,不需要编译器就能完成高自由度的绘图。 同时plotly有api接口,用户可以通过Phyton,MATLAB,R等来辅助绘图。 当然对于

菜鸟的R语言学习树 9499

详解Python可视化神器Plotly,用简单代码,绘制出更好的图表。

学习Python是做数分析的最基础的一步,数据分析离不开数据可视化。Python第三方库中我们最常用的可视化库是 pandas,matplotlib,pyecharts, 当然还有 Tableau,另外最近在学习过程中发现另一款可视化神器-Plotly,它是一款用来做数据分析和可视化的在线平台,功能非常强大, 可以在线绘制很多图形比如条形图、散点图、饼图、直方图等等。除此之外,它还支持在线编辑,以及多种语言 python、javascript、matlab、R等许多API。

python03011的博客 4773

plotly包安装_Plotly(一)安装指南

plotly,是一个快速完善并崛起的交互式的、开源的绘图库库,Python库则是它的一个重要分支。现已支持超过40种独特的图表类型,涵盖了广泛的统计、金融、地理、科学和三维用例。Plotly 通过JavaScript构建,能基于Web显示实现交互式的可视化效果(Plotly最强大之处之一)。所以它的图形呈现可以方便的显示于Jupyter notebook(基于html)、独立的html中(直接显示...

weixin_35907189的博客 3471

游戏资源解包神器NSCB实战:手把手教你提取Switch游戏视频(nsm转MP4)

本文详细介绍了如何使用NSCB工具链从Switch游戏中提取nsm视频和hca音频资源,并将其转换为可编辑的MP4和MP3格式。通过NSC Builder、CriPakTools等工具的分步操作指南,帮助内容创作者高效获取游戏资源,同时提供音视频同步合成、批量处理等高级技巧,为创意素材制作提供完整解决方案。

weixin_29197835的博客 885

【plotly】ImportError: The plotly.plotly module is deprecated, please install the chart-studio package

报错: ImportError: The plotly.plotly module is deprecated, please install the chart-studio package and use the chart_studio.plotly module instead. 解决方案: 这个问题是因为Plotly更新到4.0+之后,弃用了plotly.plotly。 解决...

ysugarr 1万+

步进电机选型避雷手册:为什么你的42HS电机总丢步?从相数、电流到散热全面拆解

本文深入剖析了42HS步进电机在高速或重载下易出现丢步问题的根本原因。文章指出,选型时不应仅关注静态保持转矩,而需重点分析动态矩频曲线、合理匹配驱动器电流与细分数、进行准确的机械传动惯量计算,并有效管理系统共振与散热。通过全面拆解这些关键因素,为工程师提供了实用的选型避雷指南与系统优化方案。

weixin_29275257的博客 97

python可视化库plotly生态简介(plotly, plotly_express, dash)

python可视化 plotly, plotly_express, dash介绍安装plotlyplotly_expressdash绘制地图总结 介绍 plotly python是python的绘图工具,是plotly.js的python封装。plotly有很多子项目,官网为https://plot.ly/。目前工作中接触到的有3个小项目: plotly: 是绘图基础库,它可以非常细致的调整绘图...

weixin_42460920的博客 8884

LangGraph实战训练营-从零构建AI驱动的wiki知识库

本文深入解析 LangChain 团队开源的 Deep Agents 框架核心示例——LLM Wiki,一个基于大语言模型自动构建和维护持久化知识库的生产级 AI Agent 系统。文章从项目架构、环境搭建、核心原理到实战操作全面展开:详解 CompositeBackend 组合后端与细粒度权限控制的安全设计、四种工作模式(初始化/摄取/查询/质量检查)的完整流程、LangSmith 远程沙箱的隔离执行机制,以及人机协同审核(HITL)的实践应用。

program哲学 197

【部署】OpenClaw版本降级实操(含全量卸载)

本文详细介绍了OpenClaw工具的降级与卸载方法。主要内容包括:1)通过npm安装指定版本的核心命令及国内镜像加速方案;2)两种卸载路径:CLI工具存在时的简易一键卸载(含交互式与非交互式命令)和手动分步卸载流程;3)CLI已删除但服务仍在运行时,针对macOS(launchd)、Linux(systemd)和Windows(计划任务)系统的具体清理步骤。文章特别强调了卸载前备份的重要性,并提供了不同安装方式(常规安装与源码克隆)的额外说明,确保用户能彻底清理所有组件。

海兰 3171

plotly绘图原理

目录   1、plotly库的相关介绍   2、导入相关库   3、plotly绘图原理   4、保存图形的两种方式   5、绘制双y轴图   6、绘制多子图:一个画布上绘制多个图形 1、plotly库的相关介绍 1)相关说明 plotly是一个基于javascript的绘图库,plotly绘图种类丰富,效果美观; 易于保存与分享plotly的绘图结果,并且可以与Web无缝集成; ploty默认...

数据分析与统计学之美 8975

Ceres&OpenCV 单目相机标定(论文复现)

Ceres&OpenCV 单目相机标定(论文复现)

dayuhaitang1的博客 368

如何在Matlab中使用Plotly绘图

Plotly是一款适用于Phython、Java、Matlab等平台的在线绘图程序,其强大的制图能力,被广泛应用在学术。。。。等领域。 下面,我们从零开始,看看如何用Plotly美化Matlab中的图片! Step1:: 首先,在Plotly官网上注册账号。 https://plot.ly/matlab/ Step2: 注册完成后,进入账号设置,可以查看我的API

Kelaiyinping1的博客 5210

【异常】安装hermes-agent时Git克隆大仓库报错:error: RPC failed; curl 92 HTTP/2 stream 5 was not closed cleanly: CAN

摘要:本文分析了Ubuntu服务器执行Git递归克隆时出现的网络传输中断错误(HTTP/2流异常关闭、数据截断)。主要原因是网络限制、协议兼容问题和缓冲区不足。提供了四种解决方案:1)扩大Git HTTP缓冲区;2)切换为HTTP/1.1协议;3)采用浅克隆+分步拉取子模块;4)网络优化措施。重点推荐浅克隆分步拉取作为最有效方案,所有方法无需重启即可生效,可快速解决大仓库递归克隆失败问题。

奶爸的编程之路,也就一周冷个三天 668

增益调度控制 —— 理论、案例与交互式 GUI 实现

本文详细介绍了增益调度控制的基本原理、数学模型及公式推导,探讨了该方法在适应非线性系统和大范围工作条件下的优势与局限。通过航空飞行控制、发动机推力控制以及化工过程控制三个典型案例,我们展示了如何利用调度变量动态调整控制增益,从而使得控制系统在各个工作点均能达到优良性能。为帮助工程师和研究者更直观地理解并验证增益调度控制的实际效果,本文提供了一套基于 Python 与 PyQt6 的交互式 GUI 控制系统代码。用户不仅可以实时查看仿真数据,还能通过在线调节参数直观体验调度控制的优势。

闲人编程的博客 1480

可视化神器 Plotly Express 合并到 Plotly,安装过程有点小尴尬

点击上方“Python数据之道”,选择“星标公众号”收藏文章的同时,不要忘记「在看」作者| Lemonbit出品 | Python数据之道可视化神器 Plotly Ex...

Python数据之道 7287

基于Simulink的四足机器人楼梯攀爬仿真模型

构建一个基于Simulink的四足机器人楼梯攀爬仿真模型,旨在模拟四足机器人在面对楼梯等障碍时的运动控制和稳定性调整。以下是一个详细的步骤指南,帮助你从零开始创建这样一个仿真模型。

xiaoheshang_123的博客 247

Plotly Express

一、关于 Plotly Express 高级功能 Dash 中的 Plotly Express 关于 Dash 安装 二、画廊 1、Scatter, Line, Area and Bar Charts 2、Part to Whole Charts 3、Distributions 4、Images and Heatmaps 5、Tile Maps 6、Outline Maps 7、Polar Coordinates 8、3D Coordinates 9、Ternary Coordinates

AI工程化、开源分享、文档翻译、代码笔记 3223

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Plotly.py 教程:将 cmocean 海洋学 Colormap 转换为 Plotly Colorscale 的完整实践

cmocean 是一套面向海洋学常用变量的感知均匀(perceptually uniform)colormap 集合。本教程基于 Plotly.py 仓库中的官方示例文档 [doc/unconverted/python/cmocean-colorscales.md](https://link.gitcode.com/i/fc1bf8cef68149d071fd885527baeb93),完整讲解如

gitblog_00184的博客 927

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

python安装plotly教程_python plotly 使用教程

1、plotly介绍lotly的Python图形库使互动的出版质量图表成为在线。 如何制作线图,散点图,面积图,条形图,误差线,箱形图,直方图,热图,子图,多轴,极坐标图和气泡图的示例。推荐最好使用jupyter notebook,使用pycharm的话不是很方便。2、安装pip install plotly2、使用1)在线使用在setting里找到用户名和api key image.png...

weixin_39611308的博客 5688

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Plotly图表全面使用指南 -- Getting Started with Plotly in Python

Plotly Python 库是一个交互式的、开源绘图库,支持超过40种独特的图表类型,涵盖广泛的统计、金融、地理、科学和三维用例。

船长Q的博客 2243

Jupyter添加Plotly插件

文章目录写在前面STEP 1.NodeJSSTEP 2.安装PlotlySTEP 3.安装Jupyter插件,支持Plotly结束 写在前面 使用Python做数据分析,最常用的IDE应该是Jupyter和Pycharm。 使用Python做报表展示,最常用的是Maplotlib,很方便,也很强大。但是如果要做的好看,那么用Plotly来代替Maplotlib应该是一个省时高效的方式。 本篇文章主...

Hyw 6650

python中plotly_Python绘图工具Plotly的简单使用

1、Plotly被称为史上最好的绘图工具之一,为了更好的展示金融数据的复杂性。Plotly的官方网站为:https://plot.ly/python量化的关键是金融数据可视化,无论是传统的K线图,还是现在的互动策略分析,都需要大量的可视化图表。具体到编程代码,就是各种python绘图模块库,传统的python绘图模块有,Matplotlib、Ggplot、Seaborn等。Plotly 绘图底层使...

weixin_42292183的博客 7720

plotly包安装_plotly的安装以及基本的绘图教程

众所周知 plotly是一个简易的数据可视化绘图工具 可以使用 jupyter(直接运行)或者pychram(需要生成html文件)等开发工具 因为我在学数据分析时先学习的matplotlib来作图,之后又学习plot发现plot相对更加简单效率 因此推荐plotlyplotly的安装 直接使用pip安装pip install plotlyplotly的使用 可以用来绘制 折线图 条形图 比例...

weixin_42299391的博客 4440

Plotly学习笔记

Plotly介绍 Plotly是一个基于JavaScript的绘图库,Plotly绘图种类丰富,效果美观。 易于保存和分享,Plotly的绘图结果可以与Web无缝集成。 Plotly默认的绘图结果是一个HTML网页文件,通过浏览器可以查看。 Plotly绘图命令 在真实项目中,使用Plotly绘图魔魁啊进行绘图的完整流程包括: 添加图轨数据 trace 设置画图布局,使用plotly.gra...

Zing的博客 4181
上一篇: 30分钟学会CatBoost
下一篇: 60分钟吃掉FM算法
算法美食屋
博客等级 码龄9年 2万+粉丝 154原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值