我有一个时间序列的数据框图以及一个数值列表,我想在其中绘制垂直线。该图是使用 cufflinks 包创建的交互式图。这是一个包含 1000 个时间值的三个时间序列的示例,我想在 500 和 800 处绘制垂直线。我使用“axvlinee”的尝试是基于我在类似帖子中看到的建议:
import numpy as np
import pandas as pd
import cufflinks
np.random.seed(123)
X = np.random.randn(1000,3)
df=pd.DataFrame(X, columns=['a','b','c'])
fig=df.iplot(asFigure=True,xTitle='time',yTitle='values',title='Time Series Plot')
fig.axvline([500,800], linewidth=5,color="black", linestyle="--")
fig.show()
Run Code Online (Sandbox Code Playgroud)
错误消息指出“Figure”对象没有属性“axvline”。
我不确定这条消息是由于我对基本图缺乏了解还是源于使用 igraph 的限制。
对于每个子图,我有 3 条单独的线:2017 年、2018 年和 2019 年有 3 次“go.Scatter”,每个子图都代表一个国家(25 个国家),并且始终是这 3 年。我可以使用 subplot 示例代码,但是所有 75 个图例(25 X 3)都将使用不同的颜色放在一起,而且很乱。
我不需要在不同的子图上使用不同的颜色,我可以在所有子图的 3 年中只使用 3 种不同的颜色和 3 个图例,如果我点击例如 2017 年所有 2017 年的曲线/线消失在 25子图。
任何人都可以分享示例代码吗?出于说明目的,它可以是 2 而不是 25。我在 Plotly 网站上找不到这个示例代码。
编辑:这是一个示例代码:
from plotly.subplots import make_subplots
import plotly.graph_objects as go
from plotly import offline
fig = make_subplots(rows=3, cols=1)
fig.add_trace(go.Scatter(
x=[3, 4, 5],
y=[1000, 1100, 1200],name="2017",
), row=1, col=1)
fig.add_trace(go.Scatter(
x=[2, 3, 4],
y=[1200, 1100, 1000],name="2018",
), row=1, col=1)
fig.append_trace(go.Scatter(
x=[2, 3, 4],
y=[100, 110, 120],name="2017", …Run Code Online (Sandbox Code Playgroud) 我创建了一个子图,老实说,在情节文档中并不清楚如何使这些标题更大。
\nhttps://plotly.com/python-api-reference/ generated/plotly.subplots.make_subplots.html
\n这是供参考的文档,他们谈论设置 x_axis 标题和 y_axis 标题。我做到了,但我似乎找不到修改它的方法。
\n\nfig = make_subplots(\n rows=6, cols=4,\n subplot_titles=subplot_titles,\n y_title=\'Distance (\xc3\x85)\',\n x_title=\'Resid ID\'\n)\n\npositions = [\n [1, 1], [1, 2], [1, 3], [1, 4],\n [2, 1], [2, 2], [2, 3], [2, 4],\n [3, 1], [3, 2], [3, 3], [3, 4],\n [4, 1], [4, 2], [4, 3], [4, 4],\n [5, 1], [5, 2], [5, 3], [5, 4],\n [6, 1], [6, 2], [6, 3], [6, 4],\n ]\n\n\nfor i in range(0, len(segids)):\n \n fig.add_trace(\n go.Scattergl(\n x=resid_titles,\n …Run Code Online (Sandbox Code Playgroud) 金融时间序列通常充满了缺失的数据。并且开箱即用,只需显示如下所示的一行即可直观地处理一系列缺少时间戳的序列。但这里的挑战是将时间戳解释为一个值,并在图中插入所有缺失的日期。
大多数时候,我发现完全省略这些日期会使情节看起来更好。https://plotly.com/python/time-series/#hiding-weekends-and-holidays下的plotly 文档中的示例显示了如何使用以下方法处理某些日期类别(例如周末或假期)的缺失日期:
fig.update_xaxes(
rangebreaks=[
dict(bounds=["sat", "mon"]), #hide weekends
dict(values=["2015-12-25", "2016-01-01"]) # hide Christmas and New Year's
]
)
Run Code Online (Sandbox Code Playgroud)
这里的缺点是您的数据集可能会丢失任何其他工作日的一些数据。当然,您必须指定不同国家的假期日期,那么还有其他方法吗?
import pandas as pd
import numpy as np
import plotly.graph_objects as go
# data
np.random.seed(1234)
n_obs = 15
frequency = 'D'
daterange = pd.date_range('2020', freq=frequency, periods=n_obs)
values = np.random.randint(low=-5, high=6, size=n_obs).tolist()
df = pd.DataFrame({'time':daterange, 'value':values})
df = df.set_index('time')
df.iloc[0]=100; df['value']=df.value.cumsum()
# Missing timestamps
df.iloc[2:5] = np.nan; df.iloc[8:13] = np.nan
df.dropna(inplace = True)
# plotly figure …Run Code Online (Sandbox Code Playgroud) 是否可以在破折号中的图形底部有一个文本字段,以显示它们所在点的文本(将悬停数据显示为纯文本)。因此,当用户将鼠标悬停在某个点上时,文本框将能够进行更改。我已经定义了一个 dcc.Graph 组件和应用程序布局,但我不确定如何为 hoverdata 定义回调函数。
我使用下面的代码来定义 dcc.Graph 和 app.layout
fig = go.Figure(data=plot_data, layout=plot_layout)
app.layout = html.Div([
dcc.Graph(figure=fig),
html.Div([
dcc.Markdown(id='mpg-metrics')
],style={'width':'20%','display':'inline-block'})
])
Run Code Online (Sandbox Code Playgroud)
任何有关回调的帮助都会很棒。提前致谢
我正在使用 Plotly 在 Python 中生成一些线图。使用这样的示例代码:
from plotly import offline as plot, subplots as subplot, graph_objects as go
fig = subplot.make_subplots(rows=2, cols=1, shared_xaxes=True, vertical_spacing=0.01)
trace1 = go.Scatter(x = [1, 2, 3], y = [1, 2, 3])
trace2 = go.Scatter(x = [1, 2, 3], y = [4, 5, 6])
fig.append_trace(trace1, 1, 1)
fig.append_trace(trace2, 2, 1)
config_test_plot = {'displaylogo': False, 'displayModeBar': False, 'scrollZoom': True}
test_plot_html = plot.plot(fig, output_type='div', include_plotlyjs=False, config= config_test_plot)
Run Code Online (Sandbox Code Playgroud)
我能够获得所需的图。但是,我希望能够以灰度方式获取所有绘图。我看到 Plotly 默认主题都不是这种类型。无论如何我可以做到这一点吗?
语境
我目前正在创建一个数据可视化网络应用程序。我正在使用 Plotly 创建时间序列。我对传说有疑问。
我希望图例保留在底部,因为数据的标签很长,因此会干扰数据的整体尺寸。我选择的方向是水平的。
但当我添加更多数据时,图例会向上移动而不是保持在固定位置,以便可以向下添加新数据。相反,随着新数据添加到图表中,整个图例都会上升。
我的代码如下:
plotly_fig = px.line(data_frame=dataframe_cols1,x=dataframe_cols1.index,y=Columns_select1,
width=780, height=730) # Get data from the dataframe with selected columns, choose the x axis as the index of the dataframe, y axis is the data that will be multiselected
# Legend settings
plotly_fig.update_layout(showlegend=True)
plotly_fig.update_layout(legend=dict(
orientation = "h",
yanchor="bottom",
y=-.50,
xanchor="right",
x=1
))
Run Code Online (Sandbox Code Playgroud)
问题
添加新数据时如何防止图例向上移动?换句话说,如何将图例固定在其位置以防止其与图表“混合”?
是否可以为烛台定义自定义颜色?我们希望根据我们自己的业务规则为它们着色,而不是 Plotly 默认应用的“增加”和“减少”规则。
我有一个graph在回调时触发的组件。这是我从回调函数绘制直方图的代码。
xtup = np.random.lognormal(90, 3, size=1000)
xtup = list(map('{:.0f}'.format,xtup[0]))
xarr = np.asarray(xtup).astype(np.float)
data = [go.Histogram(
x = xarr,
nbinsx=50,
marker=dict(color="rgb(105,105,105)",
opacity=0.5
),
)]
layout = {
"xaxis": {'title': 'Values',
'tickformat': '${:,.0f}'
#'range': [xarr.min(), xarr.max()]
},
"title": "Distribution",
"width": 650,
"height": 400,
"autosize": True
}
return{'data':data, 'layout':layout}
Run Code Online (Sandbox Code Playgroud)
我想在分布的平均值处添加一条垂直虚线。
我正在尝试使用plotly 绘制三个不同的时间序列数据帧(每个数据帧大约有60000 条记录),同时使用不同的背景颜色突出显示周末(和工作时间)。
有没有一种方法可以在不循环遍历整个数据集的情况下完成此解决方案中提到的操作。虽然此方法可能有效,但在大型数据集上性能可能较差
plotly ×10
python ×10
plotly-dash ×3
python-3.x ×2
cufflinks ×1
jupyterdash ×1
legend ×1
matplotlib ×1
pandas ×1
plotly.js ×1
subplot ×1
time-series ×1