Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to correctly use a for loop for plotting multiple lines from a csv in python?

I am in the processing of learning Python (Basic question coming) and I have lots of data that comes out of some analyses as CSV files that look like the following:

Example data table

I am trying to recreate the plot below (currently I do things like this in Excel and with the volume of data coming out and the complexity of the visualizations, I want to make things more efficient.

Plot I am trying to recreate

I tried to use the concept of For Loops to plot a line for each different "SectionName" in that column but am clearly missing something.

#read CSV
df=pd.read_csv('/Users/F/Documents/Data/LinesLoopTest.csv')

#Make Variables from dataframe columns
Value = df['Value']
Position = df['Xposition']
Section = df['SectionName']

#Setup Figure
fig = plt.figure(figsize=(6,3))
ax1 = fig.add_subplot(1,1,1)
ax1.set_title('Sections')
ax1.set_xlabel("XPosition")
ax1.set_ylabel("Value")

#plot lines by SectionName
for name in ['A', 'B', 'C']:
    plt.plot(Position, Value)

plt.show()

I realize this is a simple question, I just have not found an explanation so far where I can actually understand the process to the point that I can recreate it and then build on it.

like image 311
NightLearner Avatar asked Apr 11 '20 14:04

NightLearner


People also ask

Can we plot multiple lines using Python?

You can use the plot() DataFrame method, that is integral to the Pandas library to draw a simple multi-line chart off data in multiple DataFrame columns. You can reuse the data DataFrame that you have created in the previous section of this tutorial.


2 Answers

You can use a groupby on the SectionName and then plot the groups

fig, ax = plt.subplots()

for section, group in df.groupby('SectionName'):
    group.plot(x='Xposition', y='Value', ax=ax, label=section)

enter image description here

like image 200
Sheldore Avatar answered Sep 18 '22 05:09

Sheldore


I came late, so I did a pretty much a "copy/pastable" version of Sheldore's answer (His answer should me be approved)

import pandas as pd
import matplotlib.pyplot as plt 

# intialise data of lists. 
data = {'SectionName':['A','A','A', 'B','B','B', 'C','C','C'], 
        'Xpos':[1, 2, 3, 1, 2, 3, 1, 2, 3], 
        'Val':[0.2, 0.4, 0.5, 0.4, 1.3, 0.2, 1.2, 1.9, 1.8]} 

# Create DataFrame 
df = pd.DataFrame(data) 

fig, ax = plt.subplots()

for section, group in df.groupby('SectionName'):
    group.plot(x='Xpos', y='Val', ax=ax, label=section)
plt.show()
like image 27
Ivan Avatar answered Sep 20 '22 05:09

Ivan