简体   繁体   English

显示绘图数据的 Switch-case 语句

[英]Switch-case statement to show plotted data

I've developed a software that shows plotted data from csv file.我开发了一个软件,可以显示 csv 文件中的绘图数据。

Now I've created something that allows to the user to choose which plot to see.现在我创建了一些东西,允许用户选择要查看的 plot。

I was looking how to do switch-case and I try it but something is wrong because actually my program opens wrong charts.我一直在寻找如何执行 switch-case 并尝试了它,但出了点问题,因为实际上我的程序打开了错误的图表。

How can I solve it?我该如何解决?

My code:我的代码:

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)

Plot_Data class:绘图数据 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)

Either cast your input to an integer or cast your dict keys to strings:将您的输入转换为 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