之前写过一篇plotly的通用教程,简单介绍了一下plotly各个子库的区别,各等级API的区别,还写了一些关于新冠病毒的简单用例。见下面的链接:
[数据科学]001.新冠病毒全球疫情-数据可视化-plotly-完整详尽教程
话说 本以为plotly即将变成我最常用的Data Viz 的库, 结果出现了一堆小问题!就是感觉用着不顺手。。。所以 我在这里总结一下遇到的各个问题,说不定可以对你有帮助!
问题描述: 想用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
当我们想同时画出一个DataFrame中的多个Columns,就需要一个小技巧:
# pandas.melt 函数 与 pandas.pivot_table函数互为反函数
pd.melt(df, id_vars='Date')
melt 函数将DataFrame 每个columns 的值都折叠起来,列名存储在variable中,每行每列对应的原数据存储在value中,这样我们就可以通过给定的 Date 和 column name 二次查找确定原数据的值。输出如下图:
我们就可以通过下列代码实现一行语句画出多条曲线啦
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()
这种情况下,我们可以画出相对更优秀的传统股票数据图像:
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()
C‘est parfait!
----------------------分割线------------------
。
。
。
连载中。。。