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.