Thank you for your enthusiastic guidance. I have learned a lot. As you said, we all like pyqtgraph and think it is a perfect productivity tool, so many of my projects are done using pyqtgraph. I checked through Google All the professional tools and modules you mentioned, but they don’t seem to meet my expectations. And I only know python, and I am not very good at English. Forum posts are all with the help of Google Translate, so I learn the use of new tools or new Technology is more difficult for me, I think you can confirm for me: memory usage is objective and cannot be solved, right? If only pyqt5 and pyqtgraph are used?
在2020年11月27日星期五 UTC+8 上午9:08:31<Patrick> 写道: > Hi, > > I know these are the pyqtgraph forums, and we all love pyqtgraph here, but > have you looked at some other options? For example, a dedicated time series > database (InfluxDB <https://www.influxdata.com/>, Prometheus > <https://prometheus.io/>) and Grafana <https://grafana.com/> for the > plotting interface. > I've used InfluxDB and Grafana with a home-made temperature logger which > communicates over a serial port. The Grafana web interface lets you select > time and date ranges and zoom into the regions of data. It's accessible > over the network and works really well! > You'll still need to write some code to actually log your data and put it > into the database, but that's relatively easy. The program I wrote got a > little out of hand, and I ended up releasing it publicly here > <https://datalogd.readthedocs.io/en/latest/>. You'd just need to write > your own data source plugin. Even if you don't use that framework there's a > lot of instructions for setting up the database etc. > > If you want to stay with writing your own plotting program, then what > Ognyan is saying above about resampling your data is correct. Trying to > load 1+ GB of raw data and plot all of it will be slow and run into memory > limits. You need to load only specific data from disk depending on the zoom > level and range of your plot. As your view changes, you'll need to load > different parts of the data from disk (this is what Grafana does when > accessing its database). In this case a MongoDB database might not be a > good choice, and why a time series database would be better. Another > alternative that might work is a memory-mapped array --- I was looking at > using zarr <https://zarr.readthedocs.io/en/stable/> for a project I'm > working on at the moment where the size of the collected data may be larger > than the computer's RAM size. > > Patrick > > On Friday, 27 November 2020 at 10:56:57 am UTC+10:30 [email protected] > wrote: > >> I want to do some experimentation, can you give the shape of the array >> you're plotting? Not sure it helps with memory issue but you can also try >> using pyqtgraph's plotting downsample methods. >> >> On Thu, Nov 26, 2020 at 4:23 PM xiangyu ning <[email protected]> wrote: >> >>> 谢谢你的回答,我的项目基于python >>> 实现一个直流分析仪的功能,所以需要呈现所有的数据,然后通过鼠标拖拽的方式使用"LinearRegionItem"功能去选择感兴趣的区间,然后进一步分析区间内的数据.另外我也降低我的采样率,但是这只能缓解内存占用过大的问题,而不能从根本上解决,实验的时间延长以后,还是会出现内存不足的情况,另外如楼上所说,内存复制的机制是QT底层的原因还是pyqtgraph的原因呢,选择python实现是因为python模块很多,避免了重复制造轮子的问题,但是如果内存不够的问题解决不了,我能选用QT直接去做吗?会有这个问题吗? >>> Thank you for your answer. My project is based on python to implement >>> the function of a DC analyzer, so all the data needs to be presented, and >>> then use the "LinearRegionItem" function to select the interval of interest >>> by dragging the mouse, and then further analyze the interval Data. In >>> addition, I also reduce my sampling rate, but this can only alleviate the >>> problem of excessive memory usage, but cannot solve it fundamentally. After >>> the experiment time is extended, there will still be insufficient memory. >>> In addition, as mentioned above , The mechanism of memory copy is the >>> underlying reason of QT or the reason of pyqtgraph. The python >>> implementation is chosen because there are many python modules, which >>> avoids the problem of repetitive manufacturing of wheels, but if the >>> problem of insufficient memory cannot be solved, can I use QT to do it >>> directly? ? Will there be this problem? >>> 在2020年11月27日星期五 UTC+8 上午1:49:03<[email protected]> 写道: >>> >>>> When dealing with lots of data like that, consider if you need to plot >>>> all that data, or if you can subsample to get the total data down to >>>> something more manageable. >>>> >>>> On Thu, Nov 26, 2020 at 9:12 AM xiangyu ning <[email protected]> wrote: >>>> >>>>> 谢谢你,请问你后来是怎么解决问题的?我现在的情况是mongdb里面有1.5GB的数据,如果使用pyqtgraph全部显示在界面上,会占用我电脑90%的内存,约超过90%*24GB >>>>> >>>>> =21.6GB的内存,这太恐怖了,而且这仅仅是三天的数据量,我的计划是挂测10天以上,这样数据,可能达到十几个GB,如果目前来看,这个想法不能实现 >>>>> Thank you, how did you solve the problem later? My current situation >>>>> is that there is 1.5GB of data in mongdb. If you use pyqtgraph to display >>>>> all on the interface, it will occupy 90% of my computer's memory, about >>>>> 90%*24GB = 21.6GB of memory, which is horrible, and this is only three >>>>> days >>>>> of data. My plan is to test for more than 10 days, so the data may reach >>>>> more than a dozen GB. If you look at it now, this idea cannot be realized. >>>>> >>>>> 在2020年11月26日星期四 UTC+8 下午11:57:18<Magne Lauritzen> 写道: >>>>> >>>>>> Also remember that when you provide data to plot, internal copies are >>>>>> made. So plotting 1GB of data will result if several GB of memory being >>>>>> consumed. This has previously caused problems for me. >>>>>> >>>>>> On Thu, Nov 26, 2020, 15:14 xiangyu ning <[email protected]> wrote: >>>>>> >>>>>>> >>>>>>> Thank you for your answer, because it takes a few days to get a >>>>>>> large amount of data, so I have modified the code to test according to >>>>>>> your >>>>>>> suggestions, and the results may be produced in a few days >>>>>>> >>>>>> 在2020年11月26日星期四 UTC+8 上午10:14:36<Patrick> 写道: >>>>>>> >>>>>> Hi, >>>>>>>> >>>>>>>> I'm guessing you are calling self.plotWidget.plot(x, y) a lot, >>>>>>>> which creates a new plot item each time. You should instead make one >>>>>>>> plot, >>>>>>>> and then use .setData(x, y) to update the existing plot with the new >>>>>>>> data. >>>>>>>> >>>>>>>> self.plot = self.plotWidget.plot() >>>>>>>> # .... later, when data is received >>>>>>>> self.plot.setData(x, y) >>>>>>>> >>>>>>>> Patrick >>>>>>>> >>>>>>>> On Thursday, 26 November 2020 at 12:07:46 pm UTC+10:30 >>>>>>>> [email protected] wrote: >>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> <https://fanyi.baidu.com/translate?aldtype=16047&query=%E4%B8%BA%E4%BB%80%E4%B9%88%E4%BD%BF%E7%94%A8pyqtgrph%E7%94%BB%E5%9B%BE%E7%9A%84%E6%97%B6%E5%80%99%2C%E7%94%B5%E8%84%91%E7%9A%84%E5%86%85%E5%AD%98%E4%BC%9A%E9%9A%8F%E7%9D%80%E6%95%B0%E6%8D%AE%E9%87%8F%E7%9A%84%E5%A2%9E%E5%8A%A0%E8%80%8C%E5%A2%9E%E5%8A%A0.%3F&keyfrom=baidu&smartresult=dict&lang=auto2zh#%23%23> >>>>>>>>> 最近使用pyqtgraph遇到问题了,问题表现在,我写了个上位机记录单片机通过串口发给电脑的数据,并将数据存入数据库,问题就在于当我用上位机从数据库中读取保存的数据,并且用pyqtgraph显示出来的时候,随着数据量的增多,电脑内存占用会逐渐加大,直到最后爆掉,我试过屏蔽掉self.plotWidget_ted.plot(y=b, >>>>>>>>> >>>>>>>>> x=a, >>>>>>>>> pen='b')这句话,也就是说不画图,内存就不会有变化了,请问是什么原因导致的呢,是画图的时候,把那些点写入到系统内存里了吗,我上位机在读取数据的时候是循环读取,循环加载,加载完成,会清除掉已经读取的数据, >>>>>>>>> >>>>>>>>> <https://fanyi.baidu.com/translate?aldtype=16047&query=%E4%B8%BA%E4%BB%80%E4%B9%88%E4%BD%BF%E7%94%A8pyqtgrph%E7%94%BB%E5%9B%BE%E7%9A%84%E6%97%B6%E5%80%99%2C%E7%94%B5%E8%84%91%E7%9A%84%E5%86%85%E5%AD%98%E4%BC%9A%E9%9A%8F%E7%9D%80%E6%95%B0%E6%8D%AE%E9%87%8F%E7%9A%84%E5%A2%9E%E5%8A%A0%E8%80%8C%E5%A2%9E%E5%8A%A0.%3F&keyfrom=baidu&smartresult=dict&lang=auto2zh#%23%23> >>>>>>>>> >>>>>>>>> Recently, I encountered a problem in using pyqtgraph. The problem >>>>>>>>> is that I wrote a PC to record the data sent to the computer by the >>>>>>>>> MCU >>>>>>>>> through the serial port, and stored the data in the database. The >>>>>>>>> problem >>>>>>>>> is that when I use the upper computer to read the saved data from the >>>>>>>>> database and display it with pyqtgraph, with the increase of the >>>>>>>>> amount of >>>>>>>>> data, the computer memory occupation will gradually increase, until >>>>>>>>> it >>>>>>>>> finally bursts, I tried to block it self.plotWidget_ ted.plot (y = B, >>>>>>>>> x = >>>>>>>>> a, pen'b '), that is to say, without drawing, the memory will not be >>>>>>>>> changed. What is the reason for that? When drawing, did those points >>>>>>>>> be >>>>>>>>> written into the system memory? When reading the data, my upper >>>>>>>>> computer >>>>>>>>> would read the data circularly. After loading, the data would be >>>>>>>>> cleared, >>>>>>>>> >>>>>>>> -- >>>>>>> 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/5d5aac83-10c2-4235-b016-41e0b347aec4n%40googlegroups.com >>>>>>> >>>>>>> <https://groups.google.com/d/msgid/pyqtgraph/5d5aac83-10c2-4235-b016-41e0b347aec4n%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/8432922a-2ccd-4e36-b554-ce17d6a2ca11n%40googlegroups.com >>>>> >>>>> <https://groups.google.com/d/msgid/pyqtgraph/8432922a-2ccd-4e36-b554-ce17d6a2ca11n%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/9cf303c9-487e-4479-94c5-4abe032806ean%40googlegroups.com >>> >>> <https://groups.google.com/d/msgid/pyqtgraph/9cf303c9-487e-4479-94c5-4abe032806ean%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/ea8cb43f-55fd-4c29-9fcd-1fd0ef74a2edn%40googlegroups.com.
