python - Plotly:如何更改子图的 y 轴范围?
问题描述
我有以下代码:
from plotly.subplots import make_subplots
import requests
import json
import datetime as dt
import pandas as pd
import plotly.graph_objects as go
def get_candles(symbol, window, interval='1h'):
url = "https://api.binance.com/api/v1/klines"
end_time = dt.datetime.utcnow()
delta = dt.timedelta(hours = window)
start_time = end_time - delta
start_date = str(int(start_time.timestamp() * 1000))
end_date = str(int(end_time.timestamp() * 1000))
limit = '1000'
market = symbol + 'BUSD'
req_param = {"symbol": market, "interval": interval, "startTime": start_date, "endTime": end_date, "limit": limit}
text = requests.get(url, params = req_param).text
data = json.loads(text)
df = pd.DataFrame(data)
df.columns = ['open_time',
'o', 'h', 'l', 'c', 'v',
'close_time', 'qav', 'num_trades',
'taker_base_vol', 'taker_quote_vol', 'ignore']
df.index = [dt.datetime.fromtimestamp(x/1000.0) for x in df.close_time]
return df
def chart(symbol, interval='1h'):
windows = {'1m': 1, '5m': 5, '15m': 15, '30m': 30, '1h': 60, '2h': 120, '4h': 240, '6h': 360, '12h': 720, '1d': 1440}
chart = get_candles(symbol.upper(), windows[interval], interval)
fig = make_subplots(specs=[[{"secondary_y": True}]])
print(chart['v'].max())
fig.add_trace(go.Candlestick(x=chart.index,
open=chart['o'],
high=chart['h'],
low=chart['l'],
close=chart['c'],
name="yaxis1 data",
yaxis='y1'), secondary_y=True)
fig.add_trace(go.Bar(x=chart.index, y=chart['v'], name="yaxis2 data", yaxis="y2"), secondary_y=False)
fig.layout.yaxis2.showgrid=False
fig.update_yaxes(type="linear")
fig.update_layout(xaxis_rangeslider_visible=False)
# fig.show()
fig.write_image("figure.png", engine="kaleido")
chart('bnb')
现在我想要它,以便音量条只达到图表总高度的 1/3,我尝试这样做:
fig.update_layout(yaxis1=dict(title="bars", domain=[0, int(2* chart['v'].max())]))
但这无济于事。
如何给某个 y 轴命名并更改其范围?
解决方案
这是这样的:
fig.update_layout(yaxis2 = dict(range=[<from_value>, <to_value>]))
您的代码示例对我不起作用。但在此示例中,以下设置:
fig.update_layout(yaxis2 = dict(range=[0, 300*10**6]))
...将变成这样:
...进入这个:
完整代码:
import plotly.graph_objects as go
from plotly.subplots import make_subplots
import pandas as pd
# data
df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv')
# Create figure with secondary y-axis
fig = make_subplots(specs=[[{"secondary_y": True}]])
# include candlestick with rangeselector
fig.add_trace(go.Candlestick(x=df['Date'],
open=df['AAPL.Open'], high=df['AAPL.High'],
low=df['AAPL.Low'], close=df['AAPL.Close']),
secondary_y=False)
# include a go.Bar trace for volumes
fig.add_trace(go.Bar(x=df['Date'], y=df['AAPL.Volume']),
secondary_y=True)
f = fig.full_figure_for_development(warn=False)
fig.layout.yaxis2.showgrid=False
fig.update_layout(yaxis2 = dict(range=[0, 300*10**6]))
fig.show()
推荐阅读
- java - 为什么我的代码可以在某些网站上运行,但在 NetBeans 中却不行?
- mysql - 在 MySQL 5.7.29 中创建触发器以在更改的行上设置时间戳
- javascript - 使用 jquery/js 打开和关闭表单
- mysql - 如何在 MySQL 中合并结果
- powershell - 为来宾用户使用 New-AzureADMSInvitation 时,用于 InviteRedirectUrl 的 URL 是什么?
- vue.js - [Vue 警告]:客户端渲染的虚拟 DOM 树与服务器渲染的内容不匹配( Nuxt / Vue / lerna monorepo )
- angular - 茉莉花测试失败 - 但日志表明并非如此
- c - 从 C 中的 C 样式字符串中获取位序列?
- reactjs - 在输出中看不到值
- flutter - Flutter 的设备日历插件