Vispy may indeed have some relevant offerings and is likely worth
examining; there are other consequences of using it, but it may fit the
bill nicely here.

J, if you can provide a representative matrix of the spectrogram and
associated frequencies, I may be able to try and tinker with rescaling and
send the code back (no promises!).

Ogi

On Wed, Jan 25, 2023 at 5:07 AM [email protected] <[email protected]>
wrote:

> I should have asked--is this a real-time application, i.e. how fast does
> the display need to be? If it's a one-and-done, then you can just re-map
> the image...though if your algorithm is outputting spectral density in
> linear space, are you sure you should be plotting it on a log axis?
>
> On Wednesday, January 25, 2023 at 8:01:19 AM UTC-5 [email protected]
> wrote:
>
>> It would be fairly easy using a vertex shader in vispy...but I don't know
>> if they've made any progress in integrating that with QUI toolkits...
>>
>> -Jim
>>
>> On Tuesday, January 24, 2023 at 8:01:35 PM UTC-5 [email protected] wrote:
>>
>>> Thanks everyone
>>>
>>> This is surprisingly difficult.   I played around with matplotlib's
>>> pcolormesh, and it does work with log scales, but of course it's slow.
>>>
>>> I'll have to think about how to "rescale the spectrogram in log-space",
>>> seems like the best solution, but it's not immediately obvious to me how to
>>> do that.
>>>
>>>
>>>
>>> On Tuesday, January 24, 2023 at 8:38:49 AM UTC-7 [email protected]
>>> wrote:
>>> Only PlotCurveItem and ScatterPlotItem (maybe a few other GraphicsItems)
>>> support stretching/repositioning for log mode.  None of the suggestions
>>> here will support stretching out image-like data. In all cases you will
>>> need to compute the respective coordinates in log-space yourself.
>>>
>>> PColorMeahItem and NonUniformImage will effectively do the same thing in
>>> this case, but with different kinds of input arguments. Easiest would
>>> likely be to rescale the spectrogram in log-space, but you will no doubt
>>> lose resolution in higher frequencies.  The other solutions will likely
>>> work better if you want to be able to zoom in/out and don’t want to lose
>>> the detail/resolution from the spectrogram calculation (but more
>>> complicated to implement).
>>>
>>> On Tue, Jan 24, 2023 at 05:22 [email protected] <[email protected]>
>>> wrote:
>>> Sorry, meant to say I had a look at the PColorMeshItem *source code*...
>>>
>>> On Tuesday, January 24, 2023 at 8:20:49 AM UTC-5 [email protected]
>>> wrote:
>>> I just had a quick look at the PColorMeshItem, and I don't think it
>>> deals with nonlinear transforms either.
>>>
>>> On Monday, January 23, 2023 at 9:16:53 PM UTC-5 Patrick wrote:
>>> Hi,
>>>
>>> I might be wrong, but I don't think ImageItems work with logarithmic
>>> axes. They are simple a bitmap image that gets drawn over a rectangular
>>> area, and the QTransform (
>>> https://doc.qt.io/qtforpython/PySide6/QtGui/QTransform.html) which is
>>> applied is a simple affine transform that won't apply logarithmic
>>> stretching.
>>> Perhaps you could try rendering with a PColorMeshItem (
>>> https://pyqtgraph.readthedocs.io/en/latest/api_reference/graphicsItems/pcolormeshitem.html)
>>> instead? It might be a little more complex and slower to render, but since
>>> it renders as a series of polygons, I think it may respect the logarithmic
>>> coordinates.
>>>
>>> Patrick
>>> On Tuesday, 24 January 2023 at 5:44:34 am UTC+10:30 [email protected]
>>> wrote:
>>> (pyqtgraph vers 0.13.1)
>>>
>>> I have an application that generates a spectrogram.  I use scipys
>>> spectrogram method, and generate the plot with...
>>>
>>> my_plotitem = pg.PlotItem()
>>>
>>> f, t, Sxx = scipy.signal.spectrogram( data, Fs=fs)
>>> my_transform = QtGui.QTransform()
>>> yscale = f[-1]/Sxx.shape[1]
>>> xscale = t[-1]/Sxx.shape[0]
>>> my_transform.scale(xscale, yscale)
>>>
>>> my_image = pg.ImageItem()
>>> my_image.setTransform(my_transform)
>>>
>>> my_image.setImage(Sxx)
>>> my_plotitem.addItem(my_image)
>>>
>>> my_plotitem.setLogMode(x=False, y=True)
>>>
>>> This works great, but I would like to have the y-axis (the frequencies)
>>> to be a log scale.  I tried using the plotitems setLogMode method... but it
>>> just changes the tick labels (incorrectly) and doesn't change the plot at
>>> all.  the image on the left is with a linear y-axis, the one on the right
>>> is after setting same image to setLogMode(x=False, y=True).  Note that the
>>> correct range for the y-axis is 0 to 50.
>>>
>>> [image: linear.png][image: log.png]
>>>
>>> I've searched around and can't find anything. What is the correct way to
>>> do this?
>>>
>>> J
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "pyqtgraph" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to [email protected].
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/pyqtgraph/779632c0-591a-4ce2-96ee-1f003c1ffc69n%40googlegroups.com
>>> <https://groups.google.com/d/msgid/pyqtgraph/779632c0-591a-4ce2-96ee-1f003c1ffc69n%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>> --
> You received this message because you are subscribed to the Google Groups
> "pyqtgraph" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/pyqtgraph/42f0dc94-e526-4851-afac-709b0a85958fn%40googlegroups.com
> <https://groups.google.com/d/msgid/pyqtgraph/42f0dc94-e526-4851-afac-709b0a85958fn%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>

-- 
You received this message because you are subscribed to the Google Groups 
"pyqtgraph" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/pyqtgraph/CA%2BnduTGGGWhwHUw3btd2%3DTKMGUf3U-CD6OG5hHq8G8%2Bgw%2Bj_FQ%40mail.gmail.com.

Reply via email to