By David Gershlick with help from numerous sources on the internet. Based on an imageJ macro written during my PhD at the University of Leeds
In [3]:
import Image
from PIL import Image, ImageDraw
import numpy as np
from pylab import *
#from ggplot import *
import pandas as pd
import prettyplotlib as ppl
import numpy as np
# prettyplotlib imports
import matplotlib.pyplot as plt
import matplotlib as mpl
from prettyplotlib import brewer2mpl
%matplotlib inline
#change the file here to your file localtion to load it
Imageinput=r'/Volumes/PassportDG/Scatterplot.tif'
orig=Image.open(Imageinput, 'r').convert("RGBA")
slice1=Image.open(Imageinput, 'r').convert("RGBA")
slice2=Image.open(Imageinput, 'r').convert("RGBA")
slice3=Image.open(Imageinput, 'r').convert("RGBA")
slice4=Image.open(Imageinput, 'r').convert("RGBA")
slice5=Image.open(Imageinput, 'r').convert("RGBA")
slice6=Image.open(Imageinput, 'r').convert("RGBA")
slice7=Image.open(Imageinput, 'r').convert("RGBA")
slice8=Image.open(Imageinput, 'r').convert("RGBA")
slice9=Image.open(Imageinput, 'r').convert("RGBA")
slice10=Image.open(Imageinput, 'r').convert("RGBA")
slice11=Image.open(Imageinput, 'r').convert("RGBA")
slice12=Image.open(Imageinput, 'r').convert("RGBA")
slice13=Image.open(Imageinput, 'r').convert("RGBA")
slice14=Image.open(Imageinput, 'r').convert("RGBA")
slice15=Image.open(Imageinput, 'r').convert("RGBA")
slice16=Image.open(Imageinput, 'r').convert("RGBA")
Draw a segement of the image
In [2]:
draw = ImageDraw.Draw(slice1)
draw.polygon([(16,0),(0,256),(256,256),(256,0)],
fill=(0,0,0,0),outline=(0,0,0,0))
del draw
pixels1 = slice1.load()
data1 = []
for x in range(256):
for y in range(256):
cpixel1 = pixels1[x, y]
data1.append(cpixel1)
r1 = 0
g1 = 0
counter1 = 0
for x in range(len(data1)):
if data1[x][3] > 0:
r1+=data1[x][0]
g1+=data1[x][1]
counter1+=1;
rAvg1 = r1/counter1
gAvg1 = g1/counter1
In [2]:
In [3]:
draw = ImageDraw.Draw(slice2)
draw.polygon([(64,0),(0,256),(256,256),(256,0)],
fill=(0,0,0,0),outline=(0,0,0,0))
del draw
draw = ImageDraw.Draw(slice2)
draw.polygon([(0,0),(0,256),(32,0)],
fill=(0,0,0,0),outline=(0,0,0,0))
del draw
pixels2 = slice2.load()
data2 = []
for x in range(256):
for y in range(256):
cpixel2 = pixels2[x, y]
data2.append(cpixel2)
r2 = 0
g2 = 0
counter2 = 0
for x in range(len(data2)):
if data2[x][3] > 0:
r2+=data2[x][0]
g2+=data2[x][1]
counter2+=1;
rAvg2 = r2/counter2
gAvg2 = g2/counter2
In [3]:
In [4]:
draw = ImageDraw.Draw(slice3)
draw.polygon([(96,0),(0,256),(256,256),(256,0)],
fill=(0,0,0,0),outline=(0,0,0,0))
del draw
draw = ImageDraw.Draw(slice3)
draw.polygon([(0,0),(0,256),(64,0)],
fill=(0,0,0,0),outline=(0,0,0,0))
del draw
pixels3 = slice3.load()
data3 = []
for x in range(256):
for y in range(256):
cpixel3 = pixels3[x, y]
data3.append(cpixel3)
r3 = 0
g3 = 0
counter3 = 0
for x in range(len(data3)):
if data3[x][3] > 0:
r3+=data3[x][0]
g3+=data3[x][1]
counter3+=1;
rAvg3 = r3/counter3
gAvg3 = g3/counter3
In [4]:
In [5]:
draw = ImageDraw.Draw(slice4)
draw.polygon([(128,0),(0,256),(256,256),(256,0)],
fill=(0,0,0,0),outline=(0,0,0,0))
del draw
draw = ImageDraw.Draw(slice4)
draw.polygon([(0,0),(0,256),(96,0)],
fill=(0,0,0,0),outline=(0,0,0,0))
del draw
pixels4 = slice4.load()
data4 = []
for x in range(256):
for y in range(256):
cpixel4 = pixels4[x, y]
data4.append(cpixel4)
r4 = 0
g4 = 0
counter4 = 0
for x in range(len(data4)):
if data4[x][3] > 0:
r4+=data4[x][0]
g4+=data4[x][1]
counter4+=1;
rAvg4 = r4/counter4
gAvg4 = g4/counter4
In [5]:
In [6]:
draw = ImageDraw.Draw(slice5)
draw.polygon([(160,0),(0,256),(256,256),(256,0)],
fill=(0,0,0,0),outline=(0,0,0,0))
del draw
draw = ImageDraw.Draw(slice5)
draw.polygon([(0,0),(0,256),(128,0)],
fill=(0,0,0,0),outline=(0,0,0,0))
del draw
pixels5 = slice5.load()
data5 = []
for x in range(256):
for y in range(256):
cpixel5 = pixels5[x, y]
data5.append(cpixel5)
r5 = 0
g5 = 0
counter5 = 0
for x in range(len(data5)):
if data5[x][3] > 0:
r5+=data5[x][0]
g5+=data5[x][1]
counter5+=1;
rAvg5 = r5/counter5
gAvg5 = g5/counter5
In [6]:
In [7]:
draw = ImageDraw.Draw(slice6)
draw.polygon([(192,0),(0,256),(256,256),(256,0)],
fill=(0,0,0,0),outline=(0,0,0,0))
del draw
draw = ImageDraw.Draw(slice6)
draw.polygon([(0,0),(0,256),(160,0)],
fill=(0,0,0,0),outline=(0,0,0,0))
del draw
pixels6 = slice6.load()
data6 = []
for x in range(256):
for y in range(256):
cpixel6 = pixels6[x, y]
data6.append(cpixel6)
r6 = 0
g6 = 0
counter6 = 0
for x in range(len(data6)):
if data6[x][3] > 0:
r6+=data6[x][0]
g6+=data6[x][1]
counter6+=1;
rAvg6 = r6/counter6
gAvg6 = g6/counter6
In [7]:
In [8]:
draw = ImageDraw.Draw(slice7)
draw.polygon([(228,0),(0,256),(256,256),(256,0)],
fill=(0,0,0,0),outline=(0,0,0,0))
del draw
draw = ImageDraw.Draw(slice7)
draw.polygon([(0,0),(0,256),(192,0)],
fill=(0,0,0,0),outline=(0,0,0,0))
del draw
pixels7 = slice7.load()
data7 = []
for x in range(256):
for y in range(256):
cpixel7 = pixels7[x, y]
data7.append(cpixel7)
r7 = 0
g7 = 0
counter7 = 0
for x in range(len(data7)):
if data7[x][3] > 0:
r7+=data7[x][0]
g7+=data7[x][1]
counter7+=1;
rAvg7 = r7/counter7
gAvg7 = g7/counter7
In [8]:
In [9]:
draw = ImageDraw.Draw(slice8)
draw.polygon([(256,0),(0,256),(256,256),(256,0)],
fill=(0,0,0,0),outline=(0,0,0,0))
del draw
draw = ImageDraw.Draw(slice8)
draw.polygon([(0,0),(0,256),(228,0)],
fill=(0,0,0,0),outline=(0,0,0,0))
del draw
pixels8 = slice8.load()
data8 = []
for x in range(256):
for y in range(256):
cpixel8 = pixels8[x, y]
data8.append(cpixel8)
r8 = 0
g8 = 0
counter8 = 0
for x in range(len(data8)):
if data8[x][3] > 0:
r8+=data8[x][0]
g8+=data8[x][1]
counter8+=1;
rAvg8 = r8/counter8
gAvg8 = g8/counter8
In [9]:
In [10]:
draw = ImageDraw.Draw(slice9)
draw.polygon([(256,32),(0,256),(256,256)],
fill=(0,0,0,0),outline=(0,0,0,0))
del draw
draw = ImageDraw.Draw(slice9)
draw.polygon([(0,0),(256,0),(0,256)],
fill=(0,0,0,0),outline=(0,0,0,0))
del draw
pixels9 = slice9.load()
data9 = []
for x in range(256):
for y in range(256):
cpixel9 = pixels9[x, y]
data9.append(cpixel9)
r9 = 0
g9 = 0
counter9 = 0
for x in range(len(data9)):
if data9[x][3] > 0:
r9+=data9[x][0]
g9+=data9[x][1]
counter9+=1;
rAvg9 = r9/counter9
gAvg9 = g9/counter9
In [10]:
In [11]:
draw = ImageDraw.Draw(slice10)
draw.polygon([(256,32),(256,0),(0,0),(0,256)],
fill=(0,0,0,0),outline=(0,0,0,0))
del draw
draw = ImageDraw.Draw(slice10)
draw.polygon([(256,64),(256,256),(0,256)],
fill=(0,0,0,0),outline=(0,0,0,0))
del draw
pixels10 = slice10.load()
data10 = []
for x in range(256):
for y in range(256):
cpixel10 = pixels10[x, y]
data10.append(cpixel10)
r10 = 0
g10 = 0
counter10 = 0
for x in range(len(data10)):
if data10[x][3] > 0:
r10+=data10[x][0]
g10+=data10[x][1]
counter10+=1;
rAvg10 = r10/counter10
gAvg10 = g10/counter10
In [11]:
In [12]:
draw = ImageDraw.Draw(slice11)
draw.polygon([(256,64),(256,0),(0,0),(0,256)],
fill=(0,0,0,0),outline=(0,0,0,0))
del draw
draw = ImageDraw.Draw(slice11)
draw.polygon([(256,96),(256,256),(0,256)],
fill=(0,0,0,0),outline=(0,0,0,0))
del draw
pixels11 = slice11.load()
data11 = []
for x in range(256):
for y in range(256):
cpixel11 = pixels11[x, y]
data11.append(cpixel11)
r11 = 0
g11 = 0
counter11 = 0
for x in range(len(data11)):
if data11[x][3] > 0:
r11+=data11[x][0]
g11+=data11[x][1]
counter11+=1;
rAvg11 = r11/counter11
gAvg11 = g11/counter11
In [12]:
In [13]:
draw = ImageDraw.Draw(slice12)
draw.polygon([(256,96),(256,0),(0,0),(0,256)],
fill=(0,0,0,0),outline=(0,0,0,0))
del draw
draw = ImageDraw.Draw(slice12)
draw.polygon([(256,128),(256,256),(0,256)],
fill=(0,0,0,0),outline=(0,0,0,0))
del draw
pixels12 = slice12.load()
data12 = []
for x in range(256):
for y in range(256):
cpixel12 = pixels12[x, y]
data12.append(cpixel12)
r12 = 0
g12 = 0
counter12 = 0
for x in range(len(data12)):
if data12[x][3] > 0:
r12+=data12[x][0]
g12+=data12[x][1]
counter12+=1;
rAvg12 = r12/counter12
gAvg12 = g12/counter12
In [13]:
In [14]:
draw = ImageDraw.Draw(slice13)
draw.polygon([(256,128),(256,0),(0,0),(0,256)],
fill=(0,0,0,0),outline=(0,0,0,0))
del draw
draw = ImageDraw.Draw(slice13)
draw.polygon([(256,160),(256,256),(0,256)],
fill=(0,0,0,0),outline=(0,0,0,0))
del draw
pixels13 = slice13.load()
data13 = []
for x in range(256):
for y in range(256):
cpixel13 = pixels13[x, y]
data13.append(cpixel13)
r13 = 0
g13 = 0
counter13 = 0
for x in range(len(data13)):
if data13[x][3] > 0:
r13+=data13[x][0]
g13+=data13[x][1]
counter13+=1;
rAvg13 = r13/counter13
gAvg13 = g13/counter13
In [14]:
In [15]:
draw = ImageDraw.Draw(slice14)
draw.polygon([(256,160),(256,0),(0,0),(0,256)],
fill=(0,0,0,0),outline=(0,0,0,0))
del draw
draw = ImageDraw.Draw(slice14)
draw.polygon([(256,192),(256,256),(0,256)],
fill=(0,0,0,0),outline=(0,0,0,0))
del draw
pixels14 = slice14.load()
data14 = []
for x in range(256):
for y in range(256):
cpixel14 = pixels14[x, y]
data14.append(cpixel14)
r14 = 0
g14 = 0
counter14 = 0
for x in range(len(data14)):
if data14[x][3] > 0:
r14+=data14[x][0]
g14+=data14[x][1]
counter14+=1;
rAvg14 = r14/counter14
gAvg14 = g14/counter14
In [15]:
In [16]:
draw = ImageDraw.Draw(slice15)
draw.polygon([(256,196),(256,0),(0,0),(0,256)],
fill=(0,0,0,0),outline=(0,0,0,0))
del draw
draw = ImageDraw.Draw(slice15)
draw.polygon([(256,228),(256,256),(0,256)],
fill=(0,0,0,0),outline=(0,0,0,0))
del draw
pixels15 = slice15.load()
data15 = []
for x in range(256):
for y in range(256):
cpixel15 = pixels15[x, y]
data15.append(cpixel15)
r15 = 0
g15 = 0
counter15 = 0
for x in range(len(data15)):
if data15[x][3] > 0:
r15+=data15[x][0]
g15+=data15[x][1]
counter15+=1;
rAvg15 = r15/counter15
gAvg15 = g15/counter15
In [16]:
In [17]:
draw = ImageDraw.Draw(slice16)
draw.polygon([(256,228),(256,0),(0,0),(0,256)],
fill=(0,0,0,0),outline=(0,0,0,0))
del draw
pixels16 = slice16.load()
data16 = []
for x in range(256):
for y in range(256):
cpixel16 = pixels16[x, y]
data16.append(cpixel16)
r16 = 0
g16 = 0
counter16 = 0
for x in range(len(data16)):
if data16[x][3] > 0:
r16+=data16[x][0]
g16+=data16[x][1]
counter16+=1;
rAvg16 = r16/counter16
gAvg16 = g16/counter16
In [17]:
Unhash the show commands below to see the slices
In [18]:
#slice1.show()
#slice2.show()
#slice3.show()
#slice4.show()
#slice5.show()
#slice6.show()
#slice7.show()
#slice8.show()
#slice9.show()
#slice10.show()
#slice11.show()
#slice12.show()
#slice13.show()
#slice14.show()
#slice15.show()
#slice16.show()
Arrays made using the slice data below
In [19]:
red_array = []
red_array.extend((rAvg1,rAvg2,rAvg3,rAvg4,rAvg5,rAvg6,rAvg7,rAvg8,
rAvg9,rAvg10,rAvg11,rAvg12,rAvg13,rAvg14,rAvg15,rAvg16))
Out[19]:
In [20]:
green_array = []
green_array.extend((gAvg1,gAvg2,gAvg3,gAvg4,gAvg5,gAvg6,gAvg7,gAvg8,
gAvg9,gAvg10,gAvg11,gAvg12,gAvg13,gAvg14,gAvg15,gAvg16))
Out[20]:
Graph the data
In [4]:
data = []
data = list(range(1, 17))
plt.plot(data, red_array, 'r+:', data, green_array, 'g+:')
plt.axis([1, 16, 0, 256])
figure_title = "Scatterplot Population Distribution"
plt.title(figure_title, y=1.08, fontsize=14)
plt.fill_between(data, 0, green_array, facecolor='green', interpolate=True, alpha=0.1)
plt.fill_between(data, 0, red_array, facecolor='red', interpolate=True, alpha=0.1)
plt.xlabel('Area of Scatterplot')
plt.ylabel('Intensity of Colour')
plt.show()
In [ ]:
n_groups = 16
fig, ax = ppl.subplots()
index = np.arange(n_groups)
bar_width = 0.35
rects1 = ppl.bar(index, pseudo_green_array, bar_width, grid='y')
rects2 = ppl.bar(index + bar_width, pseudo_red_array, bar_width,
alpha=0.5,
color='r', grid='y')
#rects3 = ppl.bar(index, sumlist, bar_width*2,
# alpha=opacity,
# color='w', annotate=False, grid='y', edgecolor='black')
plt.ylim([0, 256])
plt.xlabel('Segment of Scatterplot')
plt.ylabel('Mean Intenstity')
plt.title('Scatterplot Distribution')
plt.xticks(index + bar_width, ('1', '2', '3', '4', '5','6','7','8','9','10','11','12','13','14','15','16'))
plt.show()