WebHU - Programozási kérdések és válaszok

Plotly: Hogyan állítsunk be egyéni xticket

A plotly dokumentumból:

elrendezés > xaxis > tickvals:

Beállítja azokat az értékeket, amelyeknél a pipák jelenjenek meg ezen a tengelyen. Csak akkor van hatása, ha a tickmode értéke "tömb". ticktext-val együtt használva.

elrendezés > xaxis > ticktext:

Beállítja a pipák pozíciójában megjelenő szöveget a tickvals segítségével. Csak akkor van hatása, ha a tickmode értéke "tömb". tickvals-el együtt használva.

Példa:

import pandas as pd
import numpy as np

np.random.seed(42)
feature = pd.DataFrame({'ds': pd.date_range('20200101', periods=100*24, freq='H'), 
                        'y': np.random.randint(0,20, 100*24) , 
                        'yhat': np.random.randint(0,20, 100*24) , 
                        'price': np.random.choice([6600, 7000, 5500, 7800], 100*24)})


import plotly.graph_objects as go
import plotly.offline as py
import plotly.express as px
from plotly.offline import init_notebook_mode

init_notebook_mode(connected=True)


y = feature.set_index('ds').resample('D')['y'].sum()

fig = go.Figure()
fig.add_trace(go.Scatter(x=y.index, y=y))


x_dates = y.index.to_series().dt.strftime('%Y-%m-%d').sort_values().unique()


layout = dict(
    xaxis=dict(
        tickmode="array",
        tickvals=np.arange(0, x_dates.shape[0],2).astype(int),
        ticktext=x_dates[::2],
        tickformat='%Y-%m-%d',
        tickangle=45,
    )
)

fig.update_layout(layout)
fig.show()

Eredmény:

adja meg itt a kép leírását

Mivel a x_dates[::2] hossza 50, a tickszám egyáltalán nem egyezik. Hogyan oldjam meg??


  • Nem tudom, mi a kérdés célja, de azt akarod mondani, hogy minden 100 adathoz 50 x-tengely címkét szeretne? 18.05.2020
  • @r-beginners Csak a costom xticks-t szeretném beállítani. Tudom, hogy a nticks hasonlót tud ebben az esetben, de a probléma az, hogy a tickmode="array" miért nem működik. 18.05.2020
  • Létrehoz egy layout dict. De nem adja át a fig objektumnak. 18.05.2020

Válaszok:


1

Általában az alábbi módszert használom. Tudnia kell, hogy az tickvals pozíciós argumentumnak tekintendő, és a legjobban (talán csak) számértékekkel működik, és nem dátumokkal. A dátumok kívánt formátumban való megjelenítéséhez használja a ticktext gombot.

1. részlet:

fig.update_xaxes(tickangle=45,
                 tickmode = 'array',
                 tickvals = df_tips['date'][0::40],
                 ticktext= [d.strftime('%Y-%m-%d') for d in datelist])

1. cselekmény:

adja meg itt a kép leírását

Most megváltoztathatja a tickvals=np.arange(0, y.shape[0]).astype(int)[0::40]-et tickvals=np.arange(0, y.shape[0]).astype(int)[0::80]-re, és megkaphatja:

2. cselekmény:

telk2

Akkor miért nem működött ez az első alkalommal? Számos ok:

  1. Az újramintavételezett panda sorozat y indexként dátumokat tartalmazott, így a y.index értéket x tengely értékként állította be.
  2. A y.index dátumokat ad vissza
  3. Ha a pozíciók jelölőnégyzetet fig.update_xaxes(tickvals) értékig állítja be, ez jobban működik az egész értékekkel.

És mit tettem, hogy megjavítsam?

  1. Újramintavétel után visszaállítom az indexet, hogy a y.index ne adjon vissza dátumokat.
  2. y adatkeretre változott a .to_frame használatával.
  3. fig.add_trace(go.Scatter(x=y.index, y=y.y))-re módosult, ami egyébként meghiúsult volna, mivel ez most egy adatkeret, és nem egy sorozat.
  4. A dátumok lekérése mostantól x_dates = y.ds

Tudom, hogy a y=y.y igazán furcsán néz ki, de csak baráti emlékeztetőül hagytam így, hogy adjon értelmesebb nevet a pandák sorozatának vagy adatkereteinek, mint egyetlen olyan betűnél, mint a y, amelyet nagyobb valószínűséggel összetévesztenek egyetlen betűvel. , indexmentes, tömb vagy lista.

Teljes kód:

import pandas as pd
import numpy as np
import plotly.graph_objects as go
import plotly.offline as py
import plotly.express as px
from plotly.offline import init_notebook_mode

# data
np.random.seed(42)
feature = pd.DataFrame({'ds': pd.date_range('20200101', periods=100*24, freq='H'), 
                        'y': np.random.randint(0,20, 100*24) , 
                        'yhat': np.random.randint(0,20, 100*24) , 
                        'price': np.random.choice([6600, 7000, 5500, 7800], 100*24)})

# resampling
y = feature.set_index('ds').resample('D')['y'].sum()#.to_frame()
y=y.to_frame()
y.reset_index(inplace=True)

# plotly setup
fig = go.Figure()
fig.add_trace(go.Scatter(x=y.index, y=y.y))

# x-ticks preparations
x_dates = y.ds
tickvals=np.arange(0, y.shape[0]).astype(int)[0::40]
ticktext=x_dates

# update tickmarks
fig.update_xaxes(tickangle=45,
                 tickmode = 'array',
                 tickvals = tickvals,
                 ticktext=[d.strftime('%Y-%m-%d') for d in ticktext])

fig.show()
18.05.2020
  • Furcsa, a kód helyes az env-ben, a kódom továbbra is rossz xticket mutat, le tudnád futtatni a kódomat teszteléshez? 18.05.2020
  • Adja meg az egész értékeket a x és tickvals pontokhoz, ez a megfelelő pont. Ezt nem próbáltam ki, mert hasonló kód működött a matplotlibben. Tehát úgy tűnik, hogy a plotly-nak vannak problémái a dtype { 'x' : date, tickvals: int } és dtype { 'x' : date, tickvals: date } kezelésénél, később az egyik sem működött, így nem próbáltam ki a { 'x' : int, tickvals: int } -t. Szerintem fárasztanám a plotly fejlesztőket :) . Köszönöm , hogy erre rámutatott . 19.05.2020
  • Új anyagok

    A rádiógomb ellenőrzött eseményének használata a jQueryben
    Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

    Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
    Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

    Miért érdemes elkezdeni a kódolást 2023-ban?
    01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

    🎙 Random Noise #2  – Örökbefogadás és hit
    az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

    A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
    A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

    5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
    Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

    Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
    A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..