Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

The line

import matplotlib.pyplot as plt

is "magic", each pandas plot will go "into plt".

So we are using a pandas plot in the line with ir3.plot(x="TIME", y="Value"). This is not related to sage at all. (The construction of ir3 depends on some internet page that i needed to visit, in order to save some files with a specified name, in order to pick some specified locations from it. However, there are no TIME and no Value strings inside. So the OP can not be reconstructed on my machine... The effort to get some start is much bigger then typing the lines to answer the question.) The "ticks" are unclear in the context, i suppose they correspond to the lines in the file i do not have.

Anyways. Just apply a filter on these lines to isolate a subset.

I am answering this post only to show some problems that my occur when pandas intersects sage.

Here is a minimal example with data that it is easy to see and understand:

import pandas as pd
from io import StringIO

data = """TIME;Value
2019-03-01;234.32489
2019-04-11;231.23
2019-04-22;233.11
2019-06-03;235.965
2019-07-11;234.118456
2020-01-06;220.3782"""

ir3 = pd.read_csv(StringIO(data), sep=';')
ir3

This gives in the sage ipython console:

sage: ir3                                                                                                                     
                                        TIME                     Value
0  Integer(2019)-Integer('03')-Integer('01')   RealNumber('234.32489')
1    Integer(2019)-Integer('04')-Integer(11)      RealNumber('231.23')
2    Integer(2019)-Integer('04')-Integer(22)      RealNumber('233.11')
3  Integer(2019)-Integer('06')-Integer('03')     RealNumber('235.965')
4    Integer(2019)-Integer('07')-Integer(11)  RealNumber('234.118456')
5  Integer(2020)-Integer('01')-Integer('06')    RealNumber('220.3782')

While in a native **ipython3** console we have rather:

In [2]: ir3                                                                                                        
Out[2]: 
         TIME       Value
0  2019-03-01  234.324890
1  2019-04-11  231.230000
2  2019-04-22  233.110000
3  2019-06-03  235.965000
4  2019-07-11  234.118456
5  2020-01-06  220.378200

There are clear differences. At any rate, if we want to pick (in ipyhton3) the entries in the locations $1,3,4$, then we just ask for:

In [11]: ir3.loc[ [1,3,4] ]                                                                                        
Out[11]: 
         TIME       Value
1  2019-04-11  231.230000
3  2019-06-03  235.965000
4  2019-07-11  234.118456

Same extraction works also in the sage interpreter. But note how strange it is, the "integers" starting with a zero are converted to strings...

sage: ir3.loc[[1,3,4]]                                                                                                        
                                        TIME                     Value
1    Integer(2019)-Integer('04')-Integer(11)      RealNumber('231.23')
3  Integer(2019)-Integer('06')-Integer('03')     RealNumber('235.965')
4    Integer(2019)-Integer('07')-Integer(11)  RealNumber('234.118456')
sage:

We may want to make the first column explicitly a date time column...

In [36]: ir3                                                                                                       
Out[36]: 
         TIME       Value
0  2019-03-01  234.324890
1  2019-04-11  231.230000
2  2019-04-22  233.110000
3  2019-06-03  235.965000
4  2019-07-11  234.118456
5  2020-01-06  220.378200

In [37]: ir3.dtypes                                                                                                
Out[37]: 
TIME      object
Value    float64
dtype: object

In [38]: ir3['TIME'] = pd.to_datetime(ir3['TIME'], format='%Y-%m-%d')                                              

In [39]: ir3                                                                                                       
Out[39]: 
        TIME       Value
0 2019-03-01  234.324890
1 2019-04-11  231.230000
2 2019-04-22  233.110000
3 2019-06-03  235.965000
4 2019-07-11  234.118456
5 2020-01-06  220.378200

In [40]: ir3.dtypes                                                                                                
Out[40]: 
TIME     datetime64[ns]
Value           float64
dtype: object

Now we want to plot. In the ipython3 world the entries YYYY-MM-DD are now datetimes and the plot works.

In [42]: import matplotlib.pyplot as plt                                                                           

In [43]: ir3.plot(x='TIME', y='Value')                                                                             
Out[43]: <matplotlib.axes._subplots.AxesSubplot at 0x7fb0ceeae850>

In [44]: plt.show()

and some image pop-up shows the data as wanted. In general, it is not a good idea to implement an own selection when the data is large. One can let pandas do the job. (Aggregate.) There are many tutorial showing how to do this on the net, for instance:

https://geo-python.github.io/2017/lessons/L7/pandas-plotting.html

They show for instance how to set the TIME as index column, well, ir3.set_index('TIME'), and how to resample(). (Subgraphs are also shown.)

Note: Please give next time(s) a minimal example, mention what is the connection to sage, and try to share the effort in solving the problem. Please mention in detail all steps needed to get started. In this case, i could not found any "huge" downloadable file on the site, this is irritating. If some pieces of code involve "programming magic", please take time to explain it, people on this site have a rather mathematical background. You would maybe take some time to answer some questions on this site, thus also contributing to the community also from the other side. It would be a fair share of experience after years of questions.