[打补丁]plotly常见问题

前言

之前写过一篇plotly的通用教程,简单介绍了一下plotly各个子库的区别,各等级API的区别,还写了一些关于新冠病毒的简单用例。见下面的链接:
[数据科学]001.新冠病毒全球疫情-数据可视化-plotly-完整详尽教程

话说 本以为plotly即将变成我最常用的Data Viz 的库, 结果出现了一堆小问题!就是感觉用着不顺手。。。所以 我在这里总结一下遇到的各个问题,说不定可以对你有帮助!

常见问题:

问题 01: plotly.express 库 添加多条曲线

问题描述: 想用express高级API,就不能在已有的Figure上作图。也就是说 无法通过一行代码实现同时画出DataFrame中多列数据。

解决办法: 如果输入数据为下面这种形式 :

from pandas_datareader import get_data_yahoo
import yfinance as yf
# 让下载速度更快一点
yf.pdr_override() # <== that's all it takes :-)

START = "2015-01-01"
END = "2020-05-01"

def download_data(stock_symbol):
    return get_data_yahoo(stock_symbol, start=START, end=END)
   
# 使用雅虎财经api下载特斯拉的股票走势
df = download_data('TSLA')
df

output:
[打补丁]plotly常见问题_第1张图片

当我们想同时画出一个DataFrame中的多个Columns,就需要一个小技巧:

# pandas.melt 函数 与 pandas.pivot_table函数互为反函数
pd.melt(df, id_vars='Date')

melt 函数将DataFrame 每个columns 的值都折叠起来,列名存储在variable中,每行每列对应的原数据存储在value中,这样我们就可以通过给定的 Date 和 column name 二次查找确定原数据的值。输出如下图:
[打补丁]plotly常见问题_第2张图片

我们就可以通过下列代码实现一行语句画出多条曲线啦

from plotly import express as px

fig = px.line(data_frame=pd.melt(df, id_vars='Date'), x='Date', y='value', color='variable')
fig.show()

[打补丁]plotly常见问题_第3张图片
What’s More :
进一步思考:

  • 问:我们为什么要同时画出多个columns?
    答:为了相对清晰的表现出每个交易日的走势,例如是否高开低走。。?

这种情况下,我们可以画出相对更优秀的传统股票数据图像:

  • Candlestick —— 蜡烛图
  • 周/月/季度/年 平均收盘价K线图
from plotly import graph_objects as go

fig = go.Figure(layout=dict(title=u'特斯拉股价 K线图', width=1200, height=800))

fig.add_trace(go.Candlestick(
    x=df.index,
    close=df.Close,open=df.Open,
    low=df.Low, high=df.High,
    name='每日蜡烛图')
)

fig.add_trace(go.Scatter(
    x=df.index,
    y=df.Close.rolling(5).mean(),
    name='Average_close/week')
)
fig.add_trace(go.Scatter(
    x=df.index,
    y=df.Close.rolling(30).mean(),
    name='Average_close/month')
)
fig.add_trace(go.Scatter(
    x=df.index,
    y=df.Close.rolling(90).mean(),
    name='Average_close/3month')
)
fig.add_trace(go.Scatter(
    x=df.index,
    y=df.Close.rolling(360).mean(),
    name='Average_close/year')
)

fig.show()

[打补丁]plotly常见问题_第4张图片
画出图像之后,还可以通过下方的缩略图,选择可视窗口长度!

C‘est parfait!

----------------------分割线------------------




连载中。。。

你可能感兴趣的:(Data,Talk,数据可视化,python,数据挖掘)