在情节中,如何创建链接的 X 轴?
Posted
技术标签:
【中文标题】在情节中,如何创建链接的 X 轴?【英文标题】:In plotly, how do I create a linked X axis? 【发布时间】:2015-02-04 17:26:31 【问题描述】:import matplotlib.pyplot as plt
import numpy as np
import plotly.plotly as py
from plotly.graph_objs import *
py.sign_in('uname', 'pass')
trace1 = Scatter(
x=[1,2,3,4,5,6,7,8],
y=[24,25,30,21,33,31,30,29],
mode='lines',
xaxis='x1',
)
layout = Layout(
title="My first plot",
yaxis=YAxis(
title = "y1"
),
xaxis=XAxis(
title= 'x1',
anchor = 'x2'
),
xaxis2=XAxis(
title= 'x2',
side = 'top',
overlaying = 'y'
),
)
data = [trace1]
fig = Figure(data=data, layout=layout)
plot_url = py.plot(fig)
我正在尝试在绘图顶部创建第二个 X 轴(我们称之为 x2)。我希望它使用公式 x2=x1*0.3 链接到 x1 值。在 matplotlib 中,我只需定义另一个轴并重新定义其范围,即使我放大/缩小比例也会保持:
ax2 = ax1.twiny()
start, end = ax1.get_xlim()
ax2.set_xlim(start*0.3, end*0.3)
所以效果应该是这样的:
如何在plotly中达到同样的效果?
【问题讨论】:
【参考方案1】:非常接近!下面是 Plotly 中多个 x 轴的简单示例,改编自 this example of multiple y-axes in Plotly with Python
import plotly.plotly as py
from plotly.graph_objs import *
trace1 = Scatter(
x=[1,2,3],
y=[24,30,25],
mode='lines',
xaxis='x1',
)
trace2 = Scatter(
x=[10,20,30],
y=[24,25,30],
mode='lines',
xaxis='x2',
)
layout = Layout(
title="Multiple X-Axes",
yaxis=YAxis(
title = "y1"
),
xaxis=XAxis(
title= 'x-axis 1'
),
xaxis2=XAxis(
title= 'x-axis 2',
side = 'top',
overlaying='x1'
)
)
data = [trace1, trace2]
fig = Figure(data=data, layout=layout)
py.plot(fig, filename='multiple x axes')
创建此图:(交互式版本:https://plot.ly/~chris/3285)
请注意,您可以在各个轴上进行缩放和平移:
您可以使用Range
parameter 手动指定这些轴的范围,这将在您使用滚动放大和缩小时保持比例。这是一个简单的例子:
import plotly.plotly as py
from plotly.graph_objs import *
trace1 = Scatter(
x=[1,2,3],
y=[24,30,25],
mode='lines',
xaxis='x1',
)
trace2 = Scatter(
x=[10,20,30],
y=[24,25,30],
mode='lines',
xaxis='x2',
)
layout = Layout(
title="Multiple X-Axes",
yaxis=YAxis(
title = "y1"
),
xaxis=XAxis(
title= 'x-axis 1',
range=[1, 3]
),
xaxis2=XAxis(
title= 'x-axis 2',
side = 'top',
overlaying='x1',
range=[10, 30]
)
)
data = [trace1, trace2]
fig = Figure(data=data, layout=layout)
py.plot(fig, filename='multiple x axes with custom range')
And here is the graph
【讨论】:
@Chris_P 感谢您的回复,但您正在使用两个跟踪。如果我只想绘制一条轨迹,有没有办法创建具有不同缩放比例的两个轴? 哦,我明白了。不可以,每条轨迹只能链接到一个轴。因此,您可以创建 2 条具有相同数据的迹线,并将每条迹线附加到具有不同范围的不同轴上。只是好奇,2轴单迹的动机是什么? 但即使我创建了 2 条轨迹,轴也不会被链接(即一个不会放大,而另一个不会放大)。有很多应用:两个温标(一个是°C,另一个是°F),光谱学(一个是波长,另一个是波数/能量),我的例子(一个是电流,电流密度 - 这取决于样品的几何形状 - 另一方面)等。 我明白了 - 这是 2 个 x 轴上的 2 个轨迹(不同的 x 数据,相同的 y 数据)的示例:plot.ly/~chris/3289。只要一条迹线的 x 数据只是另一条迹线上 x 数据的线性变换,它们就会重叠。这行得通吗? 不是真的,抱歉。关键是轴应该是“链接的”,即一个轴应该在另一个轴时平移/缩放,就像我问题底部的动画一样。这将是一个很好的功能。以上是关于在情节中,如何创建链接的 X 轴?的主要内容,如果未能解决你的问题,请参考以下文章