2014-12-06 6 views
2
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). Я хочу, чтобы он был связан с значениями x1 с помощью формулы x2 = x1 * 0,3. В Matplotlib, я бы просто определить другую ось, и пересмотреть свой диапазон, и отношение будет сохраняться, даже если увеличить в/из:Как я могу создать связанную ось X?

ax2 = ax1.twiny() 
start, end = ax1.get_xlim() 
ax2.set_xlim(start*0.3, end*0.3) 

Так что эффект должен выглядеть следующим образом: Scaled axes in matplotlib

Как Я получаю такой же эффект в сюжете?

ответ

1

Довольно близко! Вот простой пример из множества х осей в Plotly, адаптировано из 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') 

который создает этот график: Graph with multiple x-axes (Интерактивная версия: https://plot.ly/~chris/3285)

Обратите внимание, что вы можете увеличивать и перемещаться по отдельным осям : Interactivity of a Plotly graph with multiple x-axes

Вы можете указать диапазон этих осей вручную, используя 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

+0

@Chris_P Спасибо за ответ, но вы используете два следа. Есть ли способ создать две оси с различным масштабированием, если я хочу только построить одну трассировку? – alkamid

+0

Ох, я вижу. Нет, каждая трасса может быть привязана только к одной оси. Таким образом, вы можете создать 2 трассировки с одинаковыми данными и прикрепить каждую трассировку к другой оси с другим диапазоном. Любопытно, какая мотивация для двух осей, один след? –

+0

, но даже если я создам 2 следа, оси не будут связаны (т. Е. Один не будет увеличивать масштаб, если другой делает). Существует множество приложений: две температурные шкалы (° C на одной, ° F на другой), спектроскопия (длина волны на одном, волновое число/энергия на другом), мой пример (ток на один, плотность тока - который зависит от геометрия образца - с другой) и т. д. – alkamid

Смежные вопросы