PHPFixing
  • Privacy Policy
  • TOS
  • Ask Question
  • Contact Us
  • Home
  • PHP
  • Programming
  • SQL Injection
  • Web3.0

Friday, July 29, 2022

[FIXED] how to display results as titles on multiple plots in one image output (python matplotlib)?

 July 29, 2022     image, matplotlib, numpy, plot, title     No comments   

Issue

What i have done: I am plotting mean values of a distribution of 'v' values on an x-y grid. I choose only those cells in the grid that have mean>2 and I plot them and make them appear as a single image on my console (jupyter notebook).

What I want to do: I want the mean value of each plot to appear as the title of that particular plot in image. Any ideas on how to do that? Thanks!

The full code is:

import matplotlib.pyplot as plt
import numpy as np

x=np.array([11,12,12,13,21,14])
y=np.array([28,5,15,16,12,4])
v=np.array([10,5,2,10,6,7])

x = x // 4 
y = y // 4 
k=10
cells = [[[] for y in range(k)] for x in range(k)] #creating cells or pixels on x-y plane

#letting v values to fall into the grid cells
for ycell in range(k):
    for xcell in range(k):
        cells[ycell][xcell] = v[(y  == ycell) & (x  == xcell)]
        
for ycell in range(k):
     for xcell in range(k):
        this = cells[ycell][xcell] 
        
#getting mean from velocity values in each cell
mean_v = [[[] for y in range(k)] for x in range(k)]
to_plot = []

for ycell in range(k):
    for xcell in range(k):
        cells[ycell][xcell] = v[(y== ycell) & (x== xcell)]
        mean_v[ycell][xcell] = np.mean(cells[ycell][xcell])
        #h3_pixel=h3[ycell][xcell]
        if mean_v[ycell][xcell]>2:
            to_plot.append(cells[ycell][xcell])
            
plt.rcParams["figure.figsize"] = (20, 10)

SIZE = 5   
f, ax = plt.subplots(SIZE,SIZE)

for idx, data in enumerate(to_plot):
    x = idx % SIZE
    y = idx // SIZE
    ax[y, x].hist(data)
plt.show()           


Solution

In your list to_plot, you can hold tuples of (cell, title) and then use set_title to set the title of each subplot.

for ycell in range(k):
    for xcell in range(k):
        cells[ycell][xcell] = v[(y== ycell) & (x== xcell)]
        mean_v[ycell][xcell] = np.mean(cells[ycell][xcell])
        if mean_v[ycell][xcell]>2:
            to_plot.append((cells[ycell][xcell], mean_v[ycell][xcell]))
            
plt.rcParams["figure.figsize"] = (20, 10)

SIZE = 5   
f, ax = plt.subplots(SIZE,SIZE)

for idx, data in enumerate(to_plot):
    x = idx % SIZE
    y = idx // SIZE
    ax[y, x].hist(data[0])
    ax[y, x].set_title(f'Mean = {data[1]}')

enter image description here



Answered By - Stef
Answer Checked By - Robin (PHPFixing Admin)
  • Share This:  
  •  Facebook
  •  Twitter
  •  Stumble
  •  Digg
Newer Post Older Post Home

0 Comments:

Post a Comment

Note: Only a member of this blog may post a comment.

Total Pageviews

Featured Post

Why Learn PHP Programming

Why Learn PHP Programming A widely-used open source scripting language PHP is one of the most popular programming languages in the world. It...

Subscribe To

Posts
Atom
Posts
Comments
Atom
Comments

Copyright © PHPFixing