Plot multiple separate graphs for same data from one Python script

It is very easy to plot different kinds of maps and plots of different data using Python. One such useful library in Python is Matplotlib which is very useful for creating different types of plots using the same data.

The easiest way to install Matplotlib is by using the pip command in the command-line as shown below:

pip install matplotlib

Also, we use numpy and pandas libraries for creating and using the data sets. Therefore, installing numpy and pandas library can also be done using pip command in command-line.

pip install numpy 
pip install pandas

To make plots creative and easy to find the located data inside the graph we use the plotly and cufflinks libraries. To use these libraries the method of installation is also the same as above mentioned libraries. 

pip install chart_studio.plotly
pip install cufflinks

In this article, we will create a Plotter that enables us to create different types of plots using the same data.



In this program, we first give the option for choosing the data set required to plot the graph. There are 3 options available for that using if-elif statements. 

  • Creating random data using 100 rows and 5 columns
  • User input data set with 4 rows and 5 columns
  • Upload the CSV/JSON file

The second step is to decide the plot to be plotted with the entire data set or for specific columns. And lastly, we present different kinds of plotters users want to plot their data and plot the graph accordingly. 

Below is the implementation:

Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# importing required libraries
import numpy as np
import pandas as pd
import chart_studio.plotly as pl
import plotly.offline as po
import cufflinks as cf
po.init_notebook_mode(connected = True)
cf.go_offline()
  
# define a function for creating
# data set for plotting graph
def createdata(data):
    
    # creating random data set
    if(data == 1):
        x = np.random.rand(100,5
        df1 = pd.DataFrame(x, columns = ['A', 'B',
                                        'C', 'D',
                                        'E'])
          
    # creating user data set with input
    elif(data == 2):            
        x = [0, 0, 0, 0, 0]
        r1 = [0, 0, 0, 0, 0]
        r2 = [0, 0, 0, 0, 0]
        r3 = [0, 0, 0, 0, 0]
        r4 = [0, 0, 0, 0, 0]
          
        print('Enter the values for columns')
        i = 0
          
        for i in [0, 1, 2, 3, 4]:
            x[i] = input()
            i = i + 1
        print('Enter the values for first row')
        i = 0
          
        for i in [0, 1, 2, 3, 4]:
            r1[i] = int(input())
            i = i + 1
              
        print('Enter the values for second row')
        i = 0
          
        for i in [0, 1, 2, 3, 4]:
            r2[i] = int(input())
            i = i + 1
              
        print('Enter the values for third row')
        i = 0
          
        for i in [0, 1, 2, 3, 4]:
            r3[i] = int(input())
            i = i + 1
              
        print('Enter the values for fourth row')
        i = 0
          
        for i in [0, 1, 2, 3, 4]:
            r4[i] = int(input())
            i = i + 1
              
        df1 = pd.DataFrame([r1,r2,r3,r4] , 
                           columns = x)
    # creating data set by csv file   
    elif(data == 3):            
        file = input('Enter the file name')
        x = pd.read_csv(file)
        df1 = pd.DataFrame(x)
          
    else:
        print('DataFrame creation failed please' + 
              'enter in between 1 to 3 and try again')
          
    return df1
  
# define a function for 
# types of plotters
def plotter(plot):
    
    if(plot == 1):
        finalplot = df1.iplot(kind = 'scatter')
          
    elif(plot == 2):
        finalplot = df1.iplot(kind = 'scatter', mode = 'markers',
                              symbol = 'x', colorscale = 'paired')
    elif(plot == 3):
        finalplot = df1.iplot(kind = 'bar')
          
    elif(plot == 4):
        finalplot = df1.iplot(kind = 'hist')
          
    elif(plot == 5):
        finalplot = df1.iplot(kind = 'box')
          
    elif(plot == 6):
        finalplot = df1.iplot(kind = 'surface')
          
    else:
        finalplot = print('Select only between 1 to 7')
          
    return finalplot
  
# define a function for allowing
# to plot for specific rows and colums
def plotter2(plot):            
    
    col = input('Enter the number of columns you' +
                'want to plot by selecting only 1 , 2 or 3')
      
    col = int(col)
      
    if(col==1):
        
        colm = input('Enter the column you want to plot' +
                     'by selecting any column from dataframe head')
        if(plot == 1):
            finalplot = df1[colm].iplot(kind = 'scatter')
              
        elif(plot == 2):
            finalplot = df1[colm].iplot(kind = 'scatter', mode = 'markers',
                                        symbol = 'x', colorscale = 'paired')
        elif(plot == 3):
            finalplot = df1[colm].iplot(kind = 'bar')
              
        elif(plot == 4):
            finalplot = df1[colm].iplot(kind = 'hist')
              
        elif(plot == 5):
            finalplot = df1[colm].iplot(kind = 'box')
              
        elif(plot == 6 or plot == 7):
            finalplot = print('Bubble plot and surface plot require' + 
                              'more than one column arguments')
        else:
            finalplot = print('Select only between 1 to 7')
              
    elif(col == 2):
        
        print('Enter the columns you want to plot' +
              'by selecting from dataframe head')
          
        x = input('First column')
        y = input('Second column')
          
        if(plot == 1):
            finalplot = df1[[x,y]].iplot(kind = 'scatter')
              
        elif(plot == 2):
            finalplot = df1[[x,y]].iplot(kind = 'scatter', mode = 'markers'
                                         symbol = 'x', colorscale = 'paired')
        elif(plot == 3):
            finalplot = df1[[x,y]].iplot(kind = 'bar')
              
        elif(plot == 4):
            finalplot = df1[[x,y]].iplot(kind = 'hist')
              
        elif(plot == 5):
            finalplot = df1[[x,y]].iplot(kind = 'box')
              
        elif(plot == 6):
            finalplot = df1[[x,y]].iplot(kind = 'surface')
              
        elif(plot == 7):
            size = input('Please enter the size column for bubble plot')
            finalplot = df1.iplot(kind = 'bubble', x = x,
                                  y = y, size = size)
        else:
            finalplot = print('Select only between 1 to 7')
              
    elif(col == 3):
        
        print('Enter the columns you want to plot')
        x = input('First column')
        y = input('Second column')
        z = input('Third column')
           
        if(plot == 1):
            finalplot = df1[[x,y,z]].iplot(kind = 'scatter')
              
        elif(plot == 2):
            finalplot = df1[[x,y,z]].iplot(kind = 'scatter', mode = 'markers',
                                           symbol = 'x' ,colorscale = 'paired')
        elif(plot == 3):
            finalplot = df1[[x,y,z]].iplot(kind = 'bar')
              
        elif(plot == 4):
            finalplot = df1[[x,y,z]].iplot(kind = 'hist')
              
        elif(plot == 5):
            finalplot = df1[[x,y,z]].iplot(kind = 'box')
              
        elif(plot == 6):
            finalplot = df1[[x,y,z]].iplot(kind = 'surface')
              
        elif(plot == 7):
            size = input('Please enter the size column for bubble plot')
              
            finalplot = df1.iplot(kind = 'bubble', x = x, y = y, 
                                  z = z, size = size )
        else:
            finalplot = print('Select only between 1 to 7')
    else:
        finalplot = print('Please enter only 1 , 2 or 3')
    return finalplot
  
# define a main function 
# for asking type of plot
# and calling respective functin
def main(cat):    
    
    if(cat == 1):
        
        print('Select the type of plot you need to plot by writing 1 to 6')
        print('1.Line plot')
        print('2.Scatter plot')
        print('3.Bar plot')
        print('4.Histogram')
        print('5.Box plot')
        print('6.Surface plot')
        plot = int(input())
        output = plotter(plot)
          
    elif(cat == 2):
        
        print('Select the type of plot you need to plot by writing 1 to 7')
        print('1.Line plot')
        print('2.Scatter plot')
        print('3.Bar plot')
        print('4.Histogram')
        print('5.Box plot')
        print('6.Surface plot')
        print('7.Bubble plot')
        plot = int(input())
        output = plotter2(plot)
          
    else:
        print('Please enter 1 or 2 and try again')  
          
print('Select the type of data you need to plot(By writing 1,2 or 3)')
print('1.Random data with 100 rows and 5 columns')
print('2.Customize dataframe with 5 columns and. 4 rows')
print('3.Upload csv/json/txt file')
  
data = int(input())
df1 = createdata(data)
print('Your DataFrame head is given below check the columns to plot using cufflinks')
  
df1.head()
print('What kind of plot you need , the complete data plot or columns plot')
cat = input('Press 1 for plotting all columns or press 2 for specifying columns to plot')
cat = int(cat)
  
main(cat)

chevron_right


Output:

Scatter plot:

 Scatter graph plot

 Scatter graph plot

Histogram plot:

Histogram plot

Histogram plot 

Boxplot:

Box plot

Boxplot 




My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.


Article Tags :

Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.