使用plotly进行子绘图时如何隐藏x轴值

Ben*_*oit 4 python pandas plotly

我正在使用 plotly 绘制一个大的 csv 文件(包含大量数据)并在线(实际上有效)一些图表中进行子绘制。问题是,对于每个图表,我都会获得 x 轴上每个点的所有日期+时间,从而导致图表质量不佳。如何为第 5 个图表隐藏 x 轴的值,同时保留最后一个图表的值以更好地查看图表?

这是我的代码:有问题的部分从第 125 行开始

import os
import pandas as pd
import plotly
import plotly.graph_objs as go
from tkinter import *


window = Tk()
window.title("Interface utilisateur")

consigne=Label(window, text="Merci de remplir les champs ci-dessous avant de cliquer sur start")
consigne.grid(column = 1,row=0)

consDateDEB=Label(window, text="Date de début de sélection (format JJMMAAAA)")
consDateDEB.grid(column=0,row=1)
DateDEB = Entry(window,width=25)
DateDEB.grid(column = 2,row=1)

consDateFIN=Label(window, text="Date de fin de sélection (format JJMMAAAA)")
consDateFIN.grid(column=0,row=2)
DateFIN = Entry(window,width=25)
DateFIN.grid(column = 2,row=2)

consPathIN=Label(window, text="Chemin d'accès aux fichiers (format C://user/dossier1/dossier2/)")
consPathIN.grid(column=0,row=3)
PathIN = Entry(window,width=50)
PathIN.grid(column = 2,row=3)

consPathOUT=Label(window, text="Chemin d'écriture des fichiers (format C://user/dossier1/dossier2/)")
consPathOUT.grid(column=0,row=4)
PathOUT = Entry(window,width=50)
PathOUT.grid(column = 2,row=4)

def click():
        pathIN = PathIN.get()
        pathOUT = PathOUT.get()
        DateDebut = DateDEB.get()
        DateFin = DateFIN.get()
        tracer(DateDebut,DateFin,pathIN,pathOUT)
btn = Button(window, text='Start',command=click,width=30,height=2,activebackground='red')
btn.grid(column = 1,row=5)

window.mainloop() 
    
def tracer(DateDebut,DateFin,pathIN,pathOUT):
#    DateDebut=10052019
#    DateFin=12052019
#    pathIN='D://Clef64go/PJT/Logfiles/'
#    pathOUT='D://Clef64go/PJT/OUT/'
    Logfiles = os.listdir(pathIN)
    
    def conversion(Logfile_JJMMAAAA):
        nomFichierINT = int(Logfile_JJMMAAAA[12:16] + Logfile_JJMMAAAA[10:12] + Logfile_JJMMAAAA[8:10])
        return nomFichierINT
    
    def conversionInverse(AAAAMMJJ):
        AAAAMMJJ = str(AAAAMMJJ) 
        nomFichierSTR = "Logfile_" + AAAAMMJJ[6:8] + AAAAMMJJ[4:6] + AAAAMMJJ[0:4]+".csv"
        return nomFichierSTR
    
    DateDebut = str(DateDebut)
    DateFin = str(DateFin)
    DebTempo = DateDebut[4:8]+DateDebut[2:4]+DateDebut[0:2]
    FinTempo = DateFin[4:8]+DateFin[2:4]+DateFin[0:2]
    DateDebut=int(DebTempo)
    DateFin=int(FinTempo)
    
    L_Selection=[]
    for fichier in Logfiles:
        Tempo=conversion(fichier)
        if Tempo >= DateDebut and Tempo <= DateFin :
            L_Selection.append(Tempo)
    
    L_Selection = sorted(L_Selection)
    L_Clean=[]
    
    for fichier in L_Selection :
        Tempo = conversionInverse(fichier)
        L_Clean.append(Tempo)
    
    #L_Log = os.listdir("D://Clef64go/PJT/TEST2/")
    dfList=[]
    colnames=['No.','Date','Time','Temp1','Unit','Temp2','Unit','Lux2','Unit','BP1','Humidité Relat','Unit','CO2','Unit','Présence','Temp1_EnO','Unit','Temp2_EnO','Unit','Temp3_EnO','Unit','RH3_EnO','Unit','Chauffage','test']
    for filename in L_Clean:
        filename = pathIN + filename
        typefile=type(filename)
        df=pd.read_csv(filename, sep = ';', error_bad_lines=False, encoding="ANSI")
        dfList.append(df)
        
    concatDf=pd.concat(dfList,axis=0)
    concatDf.columns=colnames
    pathOUT = pathOUT + "/" + str(DateDebut) +" a "+ str(DateFin) + ".csv"
    concatDf.to_csv(pathOUT, sep = ';',index=False)
 
    
    df = pd.read_csv(pathOUT,decimal=",",sep = ';', error_bad_lines=False, encoding="ANSI",names=colnames)
    df['Temp1'] = [x.replace(',', '.') for x in df['Temp1']]
    df['Temp2'] = [x.replace(',', '.') for x in df['Temp2']]
    df['Temp1_EnO'] = [x.replace(',', '.') for x in df['Temp1_EnO']]
    df['Temp2_EnO'] = [x.replace(',', '.') for x in df['Temp2_EnO']]
    df['Temp3_EnO'] = [x.replace(',', '.') for x in df['Temp3_EnO']]
    
    
    date = df['Date']+df['Time']
    y1 = df['Temp1']
    y2 = df['Temp2']
    y3 = df['Temp3_EnO']
    y4 = df['Humidité Relat']
    y5 = df['CO2']
    y6 = df['Présence']
    
    
    
    #plotly.offline.plot({
    #    "data": [go.Scatter(x=x, y=y)],
    #        "layout": go.Layout(title="Température 1 en fonction du temps")
    #   }, auto_open=True)
    
    temp1 = go.Scatter(
        x=date,
        y=y1,
        name="Température 1 (°C)"
    )
    temp2 = go.Scatter(
        x=date,
        y=y2,
        name="Température 2 (°C)"
    )
    temp3 = go.Scatter(
        x=date,
        y=y3,
        name="Température 3 (°C)"
    )
    Humidite = go.Scatter(
        x=date,
        y=y4,
        name="Humidité relative (%)"
    )
    dioxyde_de_carbone = go.Scatter(
        x=date,
        y=y5,
        name="Taux C02 (ppm)"
    )
    presence = go.Scatter(
        x=date,
        y=y6,
        name="Présence"
    )
    
    
    fig = plotly.tools.make_subplots(rows=6, cols=1)
    
    fig.append_trace(temp1, 1, 1)
    fig.append_trace(temp2, 2, 1)
    fig.append_trace(temp3, 3, 1)
    fig.append_trace(Humidite, 4, 1)
    fig.append_trace(dioxyde_de_carbone, 5, 1)
    fig.append_trace(presence, 6, 1)
    
    
    
    fig['layout'].update(title='Représentation graphique des données')
    plotly.offline.plot(fig, filename=str(DateDebut) +" a "+ str(DateFin) + ".csv", auto_open=True)
Run Code Online (Sandbox Code Playgroud)

这是我得到的:

在此处输入图片说明

小智 9

你可以用这两行来修复它:

fig.update_xaxes(showticklabels=False) # hide all the xticks
fig.update_xaxes(showticklabels=True, row=6, col=1)
Run Code Online (Sandbox Code Playgroud)


Mik*_*e_H 1

我是从安卓评论开始的。但相关来源是这样的

trace0 = go.Scatter(
  x = [0,1,1,0,0,1,1,2,2,3,3,2,2,3],
  y = [0,0,1,1,3,3,2,2,3,3,1,1,0,0]
)

trace1 = go.Scatter(
  x = [0,1,2,3],
  y = [1,2,4,8],
  yaxis = "y2"
)

layout = go.Layout(
    width = 800,
    height = 500,
    title = "fixed-ratio axes",
    xaxis = dict(
      nticks = 10,
      domain = [0, 0.45],
      title = "shared X axis"
    ),
    yaxis = dict(
      scaleanchor = "x",
      domain = [0, 0.45],
      title = "1:1"
    ),
    yaxis2 = dict(
      scaleanchor = "x",
      scaleratio = 0.2,
      domain = [0.55,1],
      title = "1:5"
    ))
Run Code Online (Sandbox Code Playgroud)

解释

您需要定义一次 xaxis。对于您设置的每个其他子图scaleanchor = "x",以便每个子图共享相同的内容xaxis。所有共享一个 xasis 的图都会自动绘制为子图,因此您可以摆脱当前的结构。

需要编辑

    data = [temp1,temp2,temp3,Humidite, dioxyde_de_carbone, presence]

    layout = go.Layout(
        width = 800,
        height = 500,
        title = "fixed-ratio axes using 10 ticks",
        xaxis = dict(
        nticks = 10,
        title = "shared X axis showing DATE"
        ),
        yaxis = dict(
        scaleanchor = "x",
        title = "Temp"
        ),
        yaxis2 = dict(
        scaleanchor = "x",
        title = "Humidity"
        ),
        yaxis3 = dict(
        scaleanchor = "x",
        title = "ppm"
        ),
        yaxis4 = dict(
        scaleanchor = "x",
        title = "presence"
        ),
        showlegend= False
    )

    fig = go.Figure(data=data, layout=layout)
    plotly.offline.plot(fig, filename=str(DateDebut) +" a "+ str(DateFin) + ".csv", auto_open=True)
    fig = plotly.tools.make_subplots(rows=6, cols=1)
Run Code Online (Sandbox Code Playgroud)