在情节中,如何创建链接的 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 轴?的主要内容,如果未能解决你的问题,请参考以下文章

是否有可能实现与多个分类轴的Shiny情节交互?

快速以编程方式创建后如何在情节提要中链接 UIButton

情节时间序列中的多个X轴

如何使用 seaborn 创建多线图?

情节:如何在带有刻面的情节表达图中隐藏轴标题?

R中同一图上相同比例的两个y轴