Jerzy Karczmarczuk
<jerzy.karczmarczuk@...3937...> writes:
Could you provide a /working/ example with the geometry you really want?
I believe I thought more or less about it as Tony Yu did. If it is
wrong, be more precise, please.
I have a data set that looks like this:
mydata = numpy.copy([
# lambda, data
# First data row
[[5002., 0.5],
[5200., 0.34],
[5251., -1.2],
# ...
[8997., 2.4]],
# second data row
[[5002., 0.72],
[5251., 0.9],
# ...
[8997., 0.1]],
# other data rows to follow
# ...
])
where I want to put the first column (lambda) on the Y axis, which each
data row as one colorbar (like in your code), and the data as the color
of that data point -- interpolated vertically.
Unfortunately, this makes it quite a bit more complex, but it’s still doable. Part of the complexity arises because of (what I believe to be) a quirk in NonUniformImage: You can pass an extent argument, but this only rescales the data—it doesn’t clip the data. You have to manually clip the borders of each bar.
Here’s an example:
···
On Tue, Feb 14, 2012 at 12:49 PM, Olе Streicher <ole-usenet-spam@…361…> wrote:
Jerzy Karczmarczuk
<jerzy.karczmarczuk@…3937…> writes:
Could you provide a /working/ example with the geometry you really want?
I believe I thought more or less about it as Tony Yu did. If it is
wrong, be more precise, please.
I have a data set that looks like this:
mydata = numpy.copy([
lambda, data
First data row
[[5002., 0.5],
[5200., 0.34],
[5251., -1.2],
…
[8997., 2.4]],
second data row
[[5002., 0.72],
[5251., 0.9],
…
[8997., 0.1]],
other data rows to follow
…
])
where I want to put the first column (lambda) on the Y axis, which each
data row as one colorbar (like in your code), and the data as the color
of that data point – interpolated vertically.
Best regards
Ole
#—
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.image import NonUniformImage
width = 0.5
height = 10
ax = plt.gca()
for x0 in np.arange(11):
y = np.sort(np.random.uniform(high=height, size=10))
z = np.random.random(size=(10, 1))
Note NonUniformImage fails with single column; double up data
z = np.repeat(z, 2, axis=1)
x = [x0, x0]
extent = (x0-width/2., x0+width/2, y[0], y[-1])
im = NonUniformImage(ax, interpolation=‘bilinear’, extent=extent)
Not a quirk. Extent is used to define a domain for the passed in data. If none is given, one is assumed from the input data. If you want clipping, either set x and y limits or pass in a slice of the data.
Ben Root
···
On Saturday, February 18, 2012, Tony Yu wrote:
On Tue, Feb 14, 2012 at 12:49 PM, Olе Streicher <ole-usenet-spam@…361…> wrote:
Jerzy Karczmarczuk
<jerzy.karczmarczuk@…3937…> writes:
Could you provide a /working/ example with the geometry you really want?
I believe I thought more or less about it as Tony Yu did. If it is
wrong, be more precise, please.
I have a data set that looks like this:
mydata = numpy.copy([
lambda, data
First data row
[[5002., 0.5],
[5200., 0.34],
[5251., -1.2],
…
[8997., 2.4]],
second data row
[[5002., 0.72],
[5251., 0.9],
…
[8997., 0.1]],
other data rows to follow
…
])
where I want to put the first column (lambda) on the Y axis, which each
data row as one colorbar (like in your code), and the data as the color
of that data point – interpolated vertically.
Best regards
Ole
OK, I see now.
Unfortunately, this makes it quite a bit more complex, but it’s still doable. Part of the complexity arises because of (what I believe to be) a quirk in NonUniformImage: You can pass an extent argument, but this only rescales the data—it doesn’t clip the data. You have to manually clip the borders of each bar.
Here’s an example:
#—
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.image import NonUniformImage
width = 0.5
height = 10
ax = plt.gca()
for x0 in np.arange(11):
y = np.sort(np.random.uniform(high=height, size=10))
z = np.random.random(size=(10, 1))
Note NonUniformImage fails with single column; double up data
z = np.repeat(z, 2, axis=1)
x = [x0, x0]
extent = (x0-width/2., x0+width/2, y[0], y[-1])
im = NonUniformImage(ax, interpolation=‘bilinear’, extent=extent)