How to plot multiple density plots on the same figure in python

2024/10/13 22:25:32

I know this is going to end up being a really messy plot, but I am curious to know what the most efficient way to do this is. I have some data that looks like this in a csv file:

    ROI          Band   Min         Max         Mean        Stdev
1   red_2        Band 1 0.032262    0.124425    0.078073    0.028031
2   red_2        Band 2 0.021072    0.064156    0.037923    0.012178
3   red_2        Band 3 0.013404    0.066043    0.036316    0.014787
4   red_2        Band 4 0.005162    0.055781    0.015526    0.013255
5   red_3        Band 1 0.037488    0.10783     0.057892    0.018964
6   red_3        Band 2 0.02814     0.07237     0.04534     0.014507
7   red_3        Band 3 0.01496     0.112973    0.032751    0.026575
8   red_3        Band 4 0.006566    0.029133    0.018201    0.006897
9   red_4        Band 1 0.022841    0.148666    0.065844    0.0336
10  red_4        Band 2 0.018651    0.175298    0.046383    0.042339
11  red_4        Band 3 0.012256    0.045111    0.024035    0.009711
12  red_4        Band 4 0.001493    0.033822    0.014678    0.007788
13  red_5        Band 1 0.030513    0.18098     0.090056    0.044456
37  bcs_1        Band 1 0.013059    0.076753    0.037674    0.023172
38  bcs_1        Band 2 0.035227    0.08826     0.057672    0.015005
39  bcs_1        Band 3 0.005223    0.028459    0.010836    0.006003
40  bcs_1        Band 4 0.009804    0.031457    0.018094    0.007136
41  bcs_2        Band 1 0.018134    0.083854    0.040654    0.018333
42  bcs_2        Band 2 0.016123    0.088613    0.045742    0.020168
43  bcs_2        Band 3 0.008065    0.030557    0.014596    0.007435
44  bcs_2        Band 4 0.004789    0.016514    0.009815    0.003241
45  bcs_3        Band 1 0.021092    0.077993    0.037246    0.013696
46  bcs_3        Band 2 0.011918    0.068825    0.028775    0.013758
47  bcs_3        Band 3 0.003969    0.021714    0.011336    0.004964
48  bcs_3        Band 4 0.003053    0.015763    0.006283    0.002425
49  bcs_4        Band 1 0.024466    0.079989    0.049291    0.018032
50  bcs_4        Band 2 0.009274    0.093137    0.041979    0.019347
51  bcs_4        Band 3 0.006874    0.027214    0.014386    0.005386
52  bcs_4        Band 4 0.005679    0.026662    0.014529    0.006505

And I want to create one probability density plot with 8 lines: 4 of which the 4 bands for "red" and the other will be the 4 bands for "black".So far I have this for just Band 1 in both red and black ROIs. But my code outputs two different plots. I have tried using subplot but that has not worked for me.

Help? I know my approach is verbose and clunky, so smarter solutions much appreciated!

Load packages

import csv 
import numpy as np
import pandas as pd
import matplotlib.pyplot as pltfiles = ['example.csv']

Organize the data

for f in files:fn = f.split('.')[0]dat = pd.read_csv(f)df0 = dat.loc[:, ['ROI', 'Band', 'Mean']]# parse by soil typered = df0[df0['ROI'].str.contains("red")]black = df0[df0['ROI'].str.contains("bcs")]# parse by band red.b1 = red[red['Band'].str.contains("Band 1")]red.b2 = red[red['Band'].str.contains("Band 2")]red.b3 = red[red['Band'].str.contains("Band 3")]red.b4 = red[red['Band'].str.contains("Band 4")]black.b1 = black[black['Band'].str.contains("Band 1")]black.b2 = black[black['Band'].str.contains("Band 2")]black.b3 = black[black['Band'].str.contains("Band 3")]black.b4 = black[black['Band'].str.contains("Band 4")]

Plot the figure

pd.DataFrame(black.b1).plot(kind="density")
pd.DataFrame(red.b1).plot(kind="density")
plt.show()

enter image description here

I'd like for the figure to have 8 lines on it.

Answer

groupby + str.split

df.groupby([df.ROI.str.split('_').str[0], 'Band']).Mean.plot.kde();

enter image description here

If you want a legend

df.groupby([df.ROI.str.split('_').str[0], 'Band']).Mean.plot.kde()
plt.legend();

enter image description here

https://en.xdnf.cn/q/69485.html

Related Q&A

Running Tkinter on Mac

I am an absolute newbie. Im trying to make Python GUI for my school project so I decided to use Tkinter. When I try to import Tkinter it throws this message: >>> import tkinter Traceback (most…

Object-based default value in SQLAlchemy declarative

With SQLAlchemy, it is possible to add a default value to every function. As I understand it, this may also be a callable (either without any arguments or with an optional ExecutionContext argument).No…

High Resolution Image of a Graph using NetworkX and Matplotlib

I have a python code to generate a random graph of 300 nodes and 200 edges and display itimport networkx as nx import matplotlib.pyplot as pltG = nx.gnm_random_graph(300,200) graph_pos = nx.spring_layo…

how to read an outputted fortran binary NxNxN matrix into Python

I wrote out a matrix in Fortran as follows:real(kind=kind(0.0d0)), dimension(256,256,256) :: dense[...CALCULATION...]inquire(iolength=reclen)dense open(unit=8,file=fname,& form=unformatted,access=d…

python argparse subcommand with dependency and conflict

I want to use argparse to build a tool with subcommand. The possible syntax could be/tool.py download --from 1234 --interval 60 /tool.py download --build 1432 /tool.py clean --numbers 10So I want to us…

Running django project without django installation

I have developed a project with Django framework(python and mysql DB) in Linux OS(Ubuntu 12.04), I want to run this project in localhost in another machine with Linux(Ubuntu 12.04) without installing D…

redefine __and__ operator

Why I cant redefine the __and__ operator?class Cut(object):def __init__(self, cut):self.cut = cutdef __and__(self, other):return Cut("(" + self.cut + ") && (" + other.cut +…

How to find class of bound method during class construction in Python 3.1?

i want to write a decorator that enables methods of classes to become visible to other parties; the problem i am describing is, however, independent of that detail. the code will look roughly like this…

Multi-Threaded NLP with Spacy pipe

Im trying to apply Spacy NLP (Natural Language Processing) pipline to a big text file like Wikipedia Dump. Here is my code based on Spacys documentation example:from spacy.en import Englishinput = open…

Django Tastypie throws a maximum recursion depth exceeded when full=True on reverse relation.

I get a maximum recursion depth exceeded if a run the code below: from tastypie import fields, utils from tastypie.resources import ModelResource from core.models import Project, Clientclass ClientReso…