簡體   English   中英

顯示繪圖數據的 Switch-case 語句

[英]Switch-case statement to show plotted data

我開發了一個軟件,可以顯示 csv 文件中的繪圖數據。

現在我創建了一些東西,允許用戶選擇要查看的 plot。

我一直在尋找如何執行 switch-case 並嘗試了它,但出了點問題,因為實際上我的程序打開了錯誤的圖表。

我該如何解決?

我的代碼:

from Signals_Plotter import Plot_data

FILE_NAME = 'Signals_informations.csv'

plot_csv_obj = Plot_data()

user_choice = input("Which chart do you want?:\n"
               "1: Line plot (all signals in same chart)\n"
               "2: Bar subplots (signals in sublotted charts)\n"
               "3: Markers plot (all signals in same chart)\n"
               "4: Line subplots (signals in sublotted chart)\n"
               "5: Stacked plot (all signals in same chart with stacked Y axes)\n"
               )

def switch_demo(user_choice):
    switcher = {
        1: plot_csv_obj.line_plot_from_csv(FILE_NAME),
        2: plot_csv_obj.bar_plot_from_csv(FILE_NAME),
        3: plot_csv_obj.scatter_plot_from_csv(FILE_NAME),
        4: plot_csv_obj.subplots_from_csv(FILE_NAME),
        5: plot_csv_obj.stacked_plot_from_csv(FILE_NAME)
    }
    return switcher.get(user_choice, "Invalid choice")

switch_demo(user_choice)

繪圖數據 class:

from plotly.offline import plot
import pandas as pd
import plotly.graph_objects as go
from plotly.subplots import make_subplots
import random

class Plot_data:
    
    def line_plot_from_csv(self, file_name):
        
        df = pd.read_csv(file_name, delimiter = ';') 
        fig = go.Figure()
        
        for i in range(1, len(df.columns)):
            fig.add_trace(go.Scatter(x=df.iloc[:,0], y=df.iloc[:,i], mode='lines', name=df.columns[i]))
        
        fig.update_layout(title_text="Line plots", yaxis={'title':'Values [unit]'}, xaxis={'title':'DateTime'}) 
        plot(fig) 
        
    
    def bar_plot_from_csv(self, file_name):
        df = pd.read_csv(file_name, delimiter = ';') 
        fig = make_subplots(rows=1, cols=df.shape[1]-1)
        
        for i in range(1, len(df.columns)):
            fig.add_trace(go.Bar(x=df.iloc[:,0], y=df.iloc[:,i], name=df.columns[i]),row=1, col=i)

        fig.update_layout(height=600, width=1000, title_text="Bar Subplots", yaxis={'title':'Values [unit]'}, xaxis={'title':'DateTime'})        
        plot(fig)
        
    def scatter_plot_from_csv(self, file_name):
        df = pd.read_csv(file_name, delimiter = ';') 
        fig = go.Figure()
        
        for i in range(1, len(df.columns)):
            fig.add_trace(go.Scatter(x=df.iloc[:,0], y=df.iloc[:,i], mode='markers', name=df.columns[i]))
        
        fig.update_layout(title_text="Markers plot", yaxis={'title':'Values [unit]'}, xaxis={'title':'DateTime'})
        plot(fig) 
        
    def subplots_from_csv(self, file_name):
        df = pd.read_csv(file_name, delimiter = ';') 
        fig = make_subplots(rows=1, cols=df.shape[1]-1)
        
        for i in range(1, len(df.columns)):
            fig.add_trace(go.Scatter(x=df.iloc[:,0], y=df.iloc[:,i], name=df.columns[i]),row=1, col=i)
        
        fig.update_layout(height=600, width=1000, title_text="Scatter line Subplots", yaxis={'title':'Values [unit]'}, xaxis={'title':'DateTime'})
        plot(fig) 
       
    def stacked_plot_from_csv(self, file_name):
        df = pd.read_csv(file_name, delimiter = ';') 
        fig = go.Figure()

        colors=[]
        
        axes = {
            'xaxis': dict(domain=[0.3, 0.7])
        }
        for i in range(1, len(df.columns)):       
            fig.add_trace(go.Scatter(x=df.iloc[:,0], y=df.iloc[:,i], name=df.columns[i], yaxis='y'+str(i)))
            
            s = 'yaxis'
            colors.append("#{:06x}".format(random.randint(0, 0xFFFFFF)))
            if i > 1:
                s = s + str(i)
            axes[s] = dict(
                title=f"S{i}",
                titlefont=dict(color=colors[i-1]),
                tickfont=dict(color=colors[i-1])
            )
            
            if i > 1:
                axes[s]['anchor'] = 'free'
                axes[s]['overlaying'] = 'y'
                
            if i > len(df.columns) / 2:
                axes[s]['side'] = 'right'
                axes[s]['position'] = 0.3 + 0.1*i
            else:
                axes[s]['side'] = 'left'
                axes[s]['position'] = 0.1*i
                          
        fig.update_layout(**axes)
        fig.update_layout(
            title_text="Stacked y-axes",
            yaxis={'title':'Values [unit]'}, 
            xaxis={'title':'DateTime'},
            height=600, 
            width=1500
        )        
        
        plot(fig)

將您的輸入轉換為 integer 或將您的字典鍵轉換為字符串:

def switch_demo(user_choice):
    switcher = {
        "1": plot_csv_obj.line_plot_from_csv(FILE_NAME),
        "2": plot_csv_obj.bar_plot_from_csv(FILE_NAME),
        "3": plot_csv_obj.scatter_plot_from_csv(FILE_NAME),
        "4": plot_csv_obj.subplots_from_csv(FILE_NAME),
        "5": plot_csv_obj.stacked_plot_from_csv(FILE_NAME)
    }
    return switcher.get(user_choice, "Invalid choice")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM