 Okay, welcome to the sixth QGIS Hydro webinar that Kurt and I organized during the corona crisis, already the sixth one. Time flies when you're enjoying, and I hope you've enjoyed it as much as we are still doing that. And I hope you learned a lot making use of this time that we are all a bit grounded at home. This time we'll talk about calculating the percentage of land cover for subcatchments. It's a very thematic title, but I'll come to what you will learn during this session later. So let me, as usual, introduce myself briefly for the new people. So I'm Hans van der Krost, I'm a senior lecturer at IHE Delft Institute for Water Education. And that's a unique institute in the world where we are specialized in education on everything to do with water, going from from the diart engineering and catchment hydrology, what the book is mostly about, to water management governance, environmental sciences, and those things related all to water. And we had a unique experience yesterday. We had our first online graduation ceremony. The batch of 2018 to 2020 was graduating. And I was part of the small team of creative people to make this really good memory for the people who are graduating. And I think we succeeded. It was very exciting, very challenging also, because it can be like face-to-face completely. But I think we had an enjoyable session and you can see the video also on YouTube. We had a band live in the Garden of the Institute. Everybody respected the social distancing rules and the director and vice-director had their talks. We even did a quiz together. So if you want to have some inspiration on that for your own organization, let me know how we can help each other with those things. So I did my master's and my PhD at Utrecht University. It's the university in the center of the Netherlands Department of Physical Geography. And for my PhD, I studied how to integrate satellite information in soil moisture models using data assimilation. And I used the PC Restock Python framework for that that you can use for data assimilation, completely open source. Then I moved to the Flemish Institute for Technological Research, VITO in Belgium, where I was a researcher in spatial dynamic modeling at the Environmental Modeling Unit. And I was working on land use change models, water quality, and air quality. And it was an exciting time with a young team where we really went into open source and had a Python group to exchange knowledge on that. And then since 2012, I worked at IHE Delft, and a very nice job there. I teach a lot in GIS advocate for open source. Also modeling, remote sensing for hydrology, very important. Also with a lot of open data. In my projects, I work on spatial data infrastructures, which we already covered in one of the previous sessions and how to share and use open data. Today, we also covered a little bit because we always need open data for the exercises and tasks that we do. And as I always say, field work is an important part of our work. We are not only people behind the desk, but we also, I find that many GIS people in the world love to go out. And there are even great tools with QGIS and field work such as QField and the input app. And in that way, you can collect the data in the field. There's some tutorials that I have on it. And I know that Kurt also has some material on that art preparing. And yeah, I'm a board member of the Dutch QGIS user group, which started just in the end of last year. Yeah. If you want to be in touch with me, you can always email me, connect through LinkedIn or on social media. I give the word to Kurt to introduce him. Thanks, Hans. Yeah, it's nice. It looks like we have about 60 people here so far. And it's, I see a lot of familiar names and some new friends that I know that haven't participated recently. So I'm glad that people are coming back to this and I'm able to take some time out and join us. I'm based in Albuquerque, New Mexico, in the United States. And I run my own consulting business named Birds Eye View. I'm also part of a fairly new venture called the Q Cooperative, which is myself and several developers and trainers and documenters. And we're starting out with a mission to provide QGIS support services, especially in the US where there aren't a lot of support services available. So if people need custom plugins, new features in QGIS, that sort of thing, we're there to help. I also run a program called Community Health Maps where I try to empower public health workers with open source tools to map communities. And that's becoming more and more important, I think, right now during COVID. And I do a wide variety of things. As a self-employed person, I do, I wear a lot of hats. I do a little spatial analysis. I do some cartography. And I do quite a bit of teaching, although right now, like everyone else, they're all the face-to-face teaching has been canceled. And it's taking me a little longer than I'd hoped to kind of stand something up online, but I'm working on that. And I'm also an author. I've published six books on QGIS at this point, authored and co-authored. Obviously, we're talking about QGIS for hydrological applications during this webinar. And I've also come out in the last year with a book called Discover QGIS 3x, which is a very large workbook, which is a really thorough treatment of QGIS. And I'm a member of the QGIS US User Group and an Oz GeoCharger member. So if you want to get in touch with me, my contact information is at the bottom. And I'll be on chat during this, answering questions. So as Hans goes through this demonstration, if questions come up, you can put them in the chat and I'll try to get to those as we go through. Thanks, Kurt. So this is a series of seven free webinars. And just to remind you what we have done and what we're going to do, we started the first one with preparing data from hard copy maps, digitizing, georeferencing, a bit of styling of hydrological data. Then we imported tabular data like data from spreadsheets into QGIS. We did interpolation, spatial interpolation using two techniques and we compared them. And then we went in the third session into spatial analysis using map algebra. So we covered a lot of raster analysis. In the fourth session, an important topic for many hydrologists is how to do the stream and catchment delineation. We walked through the whole procedure. In the fifth session, we added open data to our catchment using data from web map services, but also from OpenStreetMap, which is very useful in many areas where we work, where data is available. And OpenStreetMap is a very nice community-based map that has direct access from QGIS to add factor data. Kurt also in that session covered the community, so that was last week. And that's also nice because QGIS is not only good software, great software, but also great people behind it. And you're also part of that community and you can become active. So watch that video again if you want to learn how to become active in the community and what you can do for each other there. Then in this session, we will do the calculation of percentage of land cover per subcatchments. I will explain that later. And then next week is already the last one in this series. And I already get requests from people in my mailbox about what's up next. Well, you still have to think about that, but we'll keep you posted. This has kept us quite busy amongst our other tasks, so let's see what we can come up with. But the next time Kurt will maybe be doing the demo on app design and teach you all the tips and tricks that are hidden in QGIS to make great catchment maps like the one that we see on the cover of the book. So definitely you have to join next time. The webinars are based on the chapters of the book, as said. So you can order the book at LocatePress, the link is on the screen. And with your buying the book, you contribute to a fund to allow my students from the global south to join QGIS and Phosphor G events. That's very important. We've talked about the community, but diversity is also very important. And we like to see more people from the global south become active in the open source communities such as QGIS. And I hope with the book, we can contribute to that. So for today, calculating the percentage of land cover per subcatchment, basically we start with two data sets, one open source open access data set on land use land cover that we have seen before in the previous session, but now we'll use the real data not from the web map service, but the real data, the layer is really available for calculations also. And I'll show also where you can get that. And we have here a layer with factors from subcatchments that were delineated in a similar way as in session number four, but now for many subcatchments. And the idea is that we want to have the statistics, the percentage of each land cover per subcatchment derived using vector analysis. So in the end, we want to end up with these kind of pie charts for each subcatchment, and we're going to use the data prolly plug-in for that. So vector analysis, that's a bit of a theory that will pass or we demonstrated in this session. We'll focus mostly on these kind of vector processing tools like intersections, we're going to make that, I'm not going to do union, but here you see what happens then. And we will do dissolve, that's this, when we have two features and we can merge them together and remove the border as you saw. And there's buffer, we're not going to do that, but these are the mostly used ones in geo processing for vectors. So I'm going to switch now to sharing my screen and you know that you can add indeed your questions in the chat. Here are QGIS, I always use the LTR versions, we always get a lot of questions about that, but the LTR versions, the long-term releases work best with the exercises, they are tested and newer versions are also nice, they have new features, but they can also introduce new bugs. So we have to be very careful with that operational use and with these exercises. So for this exercise, I need the catchment polygons, that's this data set. It's a simple shapefile derived with knowledge from chapter four. I'm going to style it a little bit and just use a simple outline, make it a bit thicker for later. And let's have a look at the attribute table. And we see, as we learned in the fourth session, that when we delineate the catchment, it will get automatically the end column with the value of 100. So I have here features with the value 100. You can see if I select this in the attribute table, we can see them highlighted in yellow. Now that's not very useful for our analysis, so the first step that I'm going to do is to give each subcatchment a unique value. I deviate a little bit from the book sometimes to show you other approaches to do that, because in GIS, that's a nice thing, you can do the same thing with different ways, with different approaches, but also with different buttons. So I'll show you that. So I'm going to use for that, this button, this is the field calculator. And you get this nice dialogue. And what I can do here is I can create a new field, but that's not what I want in this case. I want to update an existing field. And I want to update the DN field. And I want to update it with a function, which gives a unique value to each feature. And there's this set of functions here. So there are many functions in here, and we will use a lot today, or a few, because there are a lot. Record and attributes, I have to look at that one. And there we find a dollar ID function. And this returns the feature ID of the current row. And every feature has an internal feature ID, and that's the one I'm going to use. So if I want to use that function, I simply double click. And if it doesn't give an error here, it means it's okay. And now it will update the existing field DN with the ID. So if I do okay, you should have noticed that it automatically switched to editing mode. So that's interesting. I had one selected still, so I have to do it again. Deselect all. So because I want them all with the unique value. So let's show the other method. DN equals, and then this is the other editor. And go to dollar ID. You can also simply type it there, but to avoid typos, do this. Say okay. And then I have to say update all. And now the DN numbers are changed into unique follow up numbers that we can use further to identify the catchments. Now I also need the area of the polygons. And there are some nice internal functions for that. Let's also, let's use this main editor for that. I'm going to add a new column. Later I'll show you to do it in the other way. And I'm going to call this catch area, give a little comment and units. It will be in square meters because that's related to our projection. I'm using here UTM zone 32 north, like the example for your work. And it's not a whole number. I need a decimal number. And I need to specify a length and a position. That's length is the amount of digits for the number. And precision is the amount of decimals, two decimals. And there are a new column. And then make sure always you choose here the output column because this is an equation. Output column equals, and I'm something you want to calculate. And I'm going to use this button to do the calculation. As I said, you can also use the other dialogue. Now, since the surface area is related to the geometry of these polygons, I have to look here under the geometry. If it's lines, I can calculate the length of a line. With the polygons, you can calculate the area. And it returns the area of the feature. And it's based on the projection that you use. So simply double click, enter it, and here we see a preview. And then I do okay. And catchment equals dollar area. I do update all. And now we see the values in square meters added to this attribute table. Now, I toggle off editing. I save it. And that's the first step. We have the catchment, the subcatchment areas for each unique number here calculated. Now, let's have a look at our data for the length use, length cover. And last time we looked at the Korean data set for 2012 as a web map service. Today, we're going to use a downloaded data set from the European SDI, Copernicus, the European system for monitoring the earth. And I'm going to look in the pan-European data sets, which contains the length use, length cover. And I want the Korean length cover. And there are gifts for the different years, the European length use, length cover, data set, Korean. And I'm going to add this one for 2018. That's the newest that is available. And it will load a preview, a web map service, like we've seen last time. But in this case, I want to download the data because I want to process it, do a factor analysis with that. So I go to the download tab. And I see other different data types that are available. So there's a 100 meter spatial resolution raster data set, a geotiff. There's a geodatabase. But there's also a geopackage. And I know that the book mentions skew lights. But on this side, they updated it. So I'm happy to see that they adopted the geopackage as a standard to provide. I'm not going to download, of course, this huge file in the session. I've already downloaded it for you. But you can see that this is huge factor data for the whole viewer, the length use, length cover, meter data, et cetera, that we're going to use. You need to have an account to log in, but it's open data. So I've downloaded that. And let's continue in QGIS. So go to the browser panel. And here is the geopackage. So open it. And if you download, it comes with all these files. And so it has a data on legend. It has meter data, all kinds of descriptions. We're going to look at that also. And I'm going to add this first length use, length cover layer there. It's huge gigabytes. And it comes with this popup because it has to adapt to our on the fly route projection. It uses the 3035. And we need to visualize them 32632. And I'm going to use this first converter for that. And there it loads. And QGIS is a smarter load only the part that I have on the screen. Otherwise, it will be really, really slow. And fortunately, that's not the case here. So the first thing I'm going to do is to style this layer. Because the data provider was so good to provide us with different files that we can use a different software to style it. So I'm not going to use the layer styling panel for that because I need to load a file. And I can do that through the properties. So go to the layer properties, symbology. And then you have this style button here. I'm going to load the style. You're now in the database styles manager. And I can load it from a file. I keep everything checked because I want everything that's in the file. And I go to browse to the file. And it's in that legend folder that comes with your download. And there are two types here. There is the QML and the SLD. So there is the CLC legend QML. That's the QGIS native format. And there is the SLD file, which is the OGC standard for legends. Here I'm going to choose the QGIS format. So you can use either a load style. And you see here the colors, the labels, and the values added. And this is so-called level three data for the land use land cover. You can find on the internet how that works for Corrine. What it means is very detailed. And what we're going to do later is work on the level one data. So we're going to use only the first value. So the first value is level one. The second is a more detailed classification level two. And this is the final detail level three. So I do okay. And it will apply the legend. I'll put the catchment polygons on top. So here we see the style of data. Now remember that we had this huge land use land cover data of the full of Europe already in our project. And I only need this part. And the other thing I need is a reprojection. Because if we want to do processing, if it's raster or vector, it is always very good advice to reproject the data to the same projection. And we're going to work in the UTM zone 32. And we can do that in one step. So I'm going to click right here and use the export function, say features s. And in the book I use the shape file here. I'm going to make a new geopackage database for this exercise. So chapter six, let's call this ruler. So catchments. That's the name of the database. And then this layer, I'll call it Corrine 2018 subset. That's the table that will go into this database. I'll change here the projection to the one of the project. And I'm going to use this extent function to clip it to approximately the bounding box of catchment polygons to reduce the data set. There's an API for Corrine data for sure. I see that as a question. Of course, it uses the web map services, the geo APIs that we've seen in the previous session. There are many other ways, I guess, also to get to that data. It's open data. It follows the inspire directive of the European Union. So I've calculated here the boundaries from the catchment polygons that will be used to clip it and reproject this data and store it then in the geopackage. So I do okay. It will then store the data in the new geopackage. I will copy the style and I'll paste it here. It's always a very nice thing to do. And it gets camouflaged, but I will remove the big one. We don't need it anymore. And there it is, the subset of the lentius around our subcatchments. So that's great. Then the next step that we need to do is to get to that level three data. And we're going to do that in a different way than in the book, because that way it will also be used later. So I can show both in this webinar. So I go to the attribute table. If you do that with the big data set, it will load for a long time because there is hundreds of thousands of features in it. This is the Korean data set. This area here is the original area of these things. And we're going to modify that by doing all kinds of processing to get the real areas per subcatchment. And what I need is I have this code 18, which is the level three data. And I'm interested to get it to level one. So I want only the first number as classes. And what I can do is use the field calculator as you learned. And I'm going to create a new field. I'm going to call the field level one. And it will be a whole number, integer. And I'm not going to use the conditional function. You will learn that later in this session, but I'm going to use a string function because these numbers are strings. And it's a quick way of solving this. There's the left function here, which says it returns a substring that contains the n leftmost characters of the string. So I use here left. Then I need to identify the field from which I want to count the string numbers from the left. And I want it from code 18. Let me use a comma. And I specify how many characters from the left. I only want one. Then I close the brackets. And here we get a nice preview. But I also want to convert the data type because it's a string and I want it to be a number. Just to show you how it works. It doesn't really affect this analysis. So here's a to int, to integer function. Put the bracket there. We need a bracket to close. Okay. Create field level one. Whole number. Apply this. And then I do okay. And here you see that it takes now the first number of each feature. And we now have chosen the left value. In the book, indeed, we use the case when function, but we applied it also later here. So here you can also use the case when function. That's a condition. The only problem is that you have to, that will take you many lines of code to do exactly the same as I did here in one line. But you'll see it later when we have to do the, to add strings to the different classes that we have here. So that was the first thing that I needed to do, to aggregate those steps. Now what I also want is to dissolve all these features. So I'm going to toggle off the editing. I'm going to save it. It's stored in our geopackage. And what I want now is that all these classes are one feature and we can then later intersect that with the cache when boundaries. So I'm going here to the vector geoprocessing tools. I'm going to choose here dissolve. And we're going to use this Korean subsets. And I want to dissolve based on the level one values. So that all the level one features are grouped and we don't have those subsets anymore, the level three data at that level as features. And I'll store it in the geopackage. So I'm going to use the geopackage that we already have. And it's a pop-up. How do I want to call my layer name? I'm going to call this Korean 2018 dissolved. Okay. And I run it. It takes a bit, still a bit large. And that basically reduces the amount of features to the amount of classes that we have. Okay, it's done. Let's have a look. So I'm going to open the attribute table to see what happened. There we see it. We only have five features. So each class becomes one feature. If I select one, it will be highlighted. It's a small one that we see here in yellow. So that's nice. Now, of course, we need to use other styles if you want to use that. But let me first go to the next step, which is the intersection. Because now we have all these classes, one to five from the level one. I want to intersect that now with the boundaries of these subcatchments. So these are then like a cookie cutter combined. And we have those boundaries added to the class boundaries. So that's another vector processing tool, which is called intersection. And I'm going to use here the Korean dissolved. And as an overlay layer, I'll use here the catchment polygons. I keep the other things as default. I simply want to have the whole data set intersected. And I give here the output name, save it to the same geopackage. And I'm going to give it a name. Korean catch intersected. Let's run it. This is an expected error for me, for you, maybe not. But when you do these catchment delineations, you can have geometrical issues when you convert your rasters to polygons. And you need to fix that and how to fix that very easily. So you need a processing tool for that, just called fixed geometries. And there we are going to fix the geometry of Korean 2018 dissolved. Save it again to the geopackage. And I call it Korean 2018. I'm going to call the output this one Korean 2018 dissolved fixed. And then I run it. And it's fixed. So another trick is to calculate a buffer of zero. And that's the classic way of fixing this. So vector geoprocessing tools and then buffer. Catch polygons. I put it on zero. And we keep everything else as it should be. Save it to the geopackage. And I call this one fixed buffer. Run it. And then geoprocessing tools, intersection. The input layer should be the Korean. Okay, I think I fixed the wrong one there. That's always in live sessions. So the Korean is okay. And this one should have fixed the catchment polygons. And then here we have the intersection. Okay. And you should always fix the right one. Apparently I fixed the wrong one. Of course, the problem is you are your catchment. And not the land use layer here. That should be geometrically quite okay. So here we have it intersected. Let me remove the other layers. This one. This one. We don't need that anymore. So we end up with the intersected polygons and land use layer. I'm going to style this one. And I prepared that. But normally you would do that using the categorized. And you choose the column in this case. And this case, level one. Click classify. And then you give the colors. In this case, I prepared already a legend. So I'm going to load that. And I've saved it in an SLD file. So I can simply load the prepared file. Remember, previously we used the QML file. And in this case, use a prepared SLD file. Open it. Load the style. And there it is. And there we see the colors and the different names next to it that I stored previously for this session in the SLD file. The SLD, remember, is the open standard. And the QML is the QGIS front. And they're both supported. So what we're going to do now is a bit more analysis in the attribute table. We're almost there. So what we have is the catchment area. And now I need, of course, the area of the class. And I need to calculate then the percentage of that class based on the area of the catchment. So go to editing mode. I'm going to add a new column. And I call that one class area. Square meters. And it will be a decimal number. We're now in a geopackage that was different previously with the catchment polygon shape file. So it doesn't ask us to specify the amount of positions and decimals. There it is. The column is added. And we're going to do the calculation. So class area equals, and we can simply type there the dollar area function. If you don't remember that function, you can do again what I previously showed. So make sure this equation is correct. Otherwise, you have common mistakes to assign it to the wrong class. You need to do update all. And there we have the class area. So the catchment area and the class area. And I'm going to use the field calculator to calculate the percentage. There. Create a new field. By the way, a virtual field is something that you is safe to your project, but not to your vector file. So if you want to have it only available in your project and not be added to your vector file, you create a virtual field. Also a useful function. Create a new field. I call this one percentage. It'll be decimal. And there we are going to use a bracket. Going to use the class area divided by the catchment area times 100%. And that's basically it. So then I do okay. And we have a new column, as you can see with the percentages. So for each land use in each subcatchment, we get the percentage. That's what we wanted. Now just a bit for adding here then the names of the legend. I'm going to explain this case function. So I'm going to add a new column. I'm going to call this one land covered. It will be a string text length. Make it a bit long. Let's say 15 characters. There's the field. I made a title there. It doesn't matter now. Output land cover equals to use this editor. And there we're going to use a conditional function. So what I basically want is if it's class one, it should be artificial surface, class two, agriculture, et cetera. So you find here the conditionals. There's the case one. That's exactly the function that does it. I double click and I see here the syntax. And what I'm going to do is make it visually a bit easier. So case is the condition when. Then I'm going to replace this part. So when level one equals one, then we move the end part to the end later. Then it should return land cover. It should return one. And I'm going to copy this. So you can return one, the class name. So it should be a string. So remember from one of the first sessions, you need to use a single quote. And then the first class is artificial, as we can still see on the left in the legend. And then class number two is agriculture, class number three, forests. Names are a bit longer, but I think you get the message here. Four equals wetlands. And five is water. And the function ends with end. And we don't see an error here, but we see water. So that's good. And then do okay. And then you see this whole equation added there. Land cover equals this whole thing. And then I do update all. And it will write here the class names. So that's how the case when function works. So you can apply it to numerical, to string, to all these things. I'm going to save the attribute table. So it's now stored in our geo package. And I think we are now ready to visualize the result in the data plot leak plugin. We used the plugin before. So it's here with the button. I'm going to open the data plot leak dialogue. And what I want is to select a subcatchment here. So let's select based on the attribute. It's better. Okay. So this function here, select features, music and expression is very useful. So I want to make a pie chart of one subcatchment to start with. So get the fields and values. And I want to have here the DN. You get all the unique values if you press that button. So these are the DN values, the unique values that we added. Remember, therefore, we needed that to add those unique those equals. Let's start with the zero one. I select those features. They are selected now highlighted in yellow on the map. So we're going to calculate the pie chart for this subcatchment. I choose here the pie chart. I use only selected features as a grouping field. That's interesting. I was expecting the land use. I'm choosing the wrong one, of course, need that one. You have to keep your attention when you do this live. Otherwise, you drift off with your talks and your thoughts. But we, of course, need, as a grouping, we need the land use. Let's cover this one. And as the Y field, as the Y field, of course, the percentage. Then we can edit also here the plot title. I want a horizontal legend. And I want to call this one land cover. And let's see how our plot looks like. So I'm going to create plot and there it shows up. So it uses those values from the attribute table. I get here the percentages and here I get the legend. And you can repeat it by selecting different subcatchments and then update the graph or create multiple graphs. So that's basically a walkthrough of this exercise. There are many ways to come to this result or different results. There are other ways also to create charts. But we are lucky today that we have a special mystery guest again. And who we have here is the developer of the Data Plotty plugin. So I'm going to stop sharing my screen here. And I'm going to invite Matteo. Matteo, get up to share a screen. I will unmute you. Hi Matteo. Hi everybody. Can you hear me? Yes. Yes, we can hear you. Great that you are here. Yeah. Hi Kurt. Hi Hans. Hi everybody. Glad to be here with you and to participate in this webinar series. And yes, my name is Matteo. I developed the Data Plotty plugin three years ago, more or less. And that's great that I see everybody using it with some really useful use cases. And yeah, I'm going to make a quick demonstration of maybe a hopefully nice feature. And can I start sharing my screen? Sure. Okay. Let me... Okay, I have this up here. Okay. So I have some data sets, some basic data sets, some simple data sets, actually some real data set. I downloaded it this morning. For example, we are in this COVID crisis, COVID quarantine. And this COVID table, I'll just have a look in the attribute table. As you can see, this is a huge massive data set. We have thousands of records. So we are actually... I am going to show you some nice feature. For example, we are going to filter this data set for just, for example, my place. That's Italy. And so I will show you how to overlap different plots in one single plot canvas and how to add a nice feature that is a range slider. Okay. So as you can see, we have here a date time. We have this a date time column, and we have this dates and these cases columns. Okay. So I will start that developmentally. And so choosing the COVID table before to choose the X, the X and Y fields, I'm going to use this feature data set, an overriding button. And I already prepared the expression that is actually entity equals to Italy. Of course, you can change it to whatever place you are. And we are not making a simple, just a simple plot or plot and lines, a scatter plot, but we are making just lines scatter plot. Okay. For date time and cases. So let's go and take a while because we have a massive data set. Oh, of course, I did not... Will we end up in something that it's wrong because I didn't activate the feature subset. So I'm going to clean that plot canvas and do the plot again. Less. Okay. So you can move the legend and you can change the X's titles and, of course, you can readapt your plot, your plot canvas. Okay. So we are going to hit this gear, blue gear button. And we have this nice feature here that it's called show the range slider. And if you check it, and if you update a lot, you have this nice, I'll just move it a little bigger, maybe. Okay. You have this nice range slider that is actually connected to the main plot. Okay. Then I will go again in the main plot, plot tab. I will leave the feature subset the same, of course. And I'm going to change from the cases and I'm going to add the deaths. Okay. Going to also change the color, making it red lines. I'm not going to update a lot, but I'm going to create another one. So it's going to overlap. And you can see this, these two different, the two different scatter plot overlapped in the same one. Okay. You have the legend. If you double click. Okay. Okay. If you double click on one items or on the other, it will isolate one single line and readapt on the plot. Okay. Then I will just change the main table from the COVID table to the admins. Okay. And from the admins, I'm going to, to delete the feature subset expression. I will take the continent, for example, and I will take, for example, we can leave the debts or yeah, that's okay. And we are not making a scatter plot, but we are making a pie chart as Hans did just minutes, some minutes ago. And we are, okay, cleaning the pop cameras and creating another plot. And that's okay. So that's actually the same one. What he wants you to show is that if you click on pie chart on the pie, on the pie slice, actually, you can see the same, the same feature highlighted and selected on the main map. Okay. Of course, again, here you can isolate the single items in the plot and the plot will readapt itself to what you have chosen. Okay. Last thing is that thanks to the crowdfunding campaign of the last year, we were able to put the data plot also in the, in the print, the map layout composer. So you can actually export your plot when you, when you export PDF or, or PNG images. So really quickly, I'm going to make another plot, another layout. Okay, making bigger. Just, okay, this zoom stuff in the middle. Okay. Then I'm going to add a map, a big map, okay, of the entire world. What is cool about data plotly of, of, of data plot within the, the layout composer is that it is actually able to, to understand what anatomast is. So I'm going to generate an Atlas. I'm going to, to check the admins main layer. So the special layer. And I'm going to, to choose the admin, all a tree, this weird column name as the page name. And also I'm going to filter this, this layer with an expression that I have in the recent one, because we have some, some countries that luckily don't have, didn't have any, or massive health problem with this COVID crisis. And I should have it. Yeah. So actually it's not null and the case is not null. So we, we are filtering this, this, this layer with just the country that had actually some cases. And okay, then in the item properties of the main plot canvas on the, on the map canvas, we are going to click on the control by Atlas and we can hit the Atlas. And as you might know, you can just loop on each country to see the different, the different, the different areas. Okay. Then what we are going to do is to use the data workflow button. Okay. I'm just going to make a similar button. But what we have here since the last week, actually, or 10, yeah, maybe 10 days ago is this nice feature that you can overlap plots also in the, in the, in the layout composter. That's a brand new feature. Okay. So for the first plot, we are going to make pretty much, pretty much the same, the same thing. Okay. So we are set up the selected plot, the main scatter plot. Okay. We are making again a scatter plot. We are taking actually the COVID table, but we, and we are subsetting the COVID table with an expression. So actually only the, we are just filtering the countries in the COVID table with the, with the counter that is highlighted by the Atlas. And we are going to use this feature, this expression. Oops. Code here. Okay. So code is equal to the Atlas page name. And okay. So we filter it here. Then we again are, we are using the date time X as the X axis and S Y again, for example, that's okay. It's okay. Not points, outlines. We are making a little bit thicker, maybe three and we are going to update the plot. Okay. I don't know if you can see that else I will make really thick, thicker and thicker. Okay. So actually if you change the country, the plot is updating itself. Okay. Then I'm just hitting on the back button and I'm going to in the same, in the same plot, I'm going to add the second plot. Here it is. We are going to set up the second plot again, COVID table. And again, we are subsetting with the same expression. Okay. Date time again, as the X and that's as the main one. Okay. We are just making it green. And again, thick update. Okay. I think I have chosen the same one. Okay. Subcases. Is it okay? Lines and not points. And update the plot. Okay. Now, for example, if we choose another country, okay. And here it is. And so you can actually export your Atlas as a PNG, so a single big, super big PDF, sorry, not PNG, super single big PDF with several pages, one for each country, or as many PNGs or as many images as you want. Okay. So that was, okay. Here I go. That was really great, Matteo. Really, really useful functionality that has been added in recent dates to QGIS. A very actual data set that you're showing us. That was actually from this morning actually. I downloaded this morning. Wow. Yeah. Really, really nice. Let's have a look if there are questions from the audience. Otherwise, I also have a few questions. Did you see any questions from Matteo already, Kurt? Let me unmute you. Yes. I think we covered everything that people asked so far. But Matteo, where did you get that data set? From the, actually from our WarInData.org website that is taking the web, all the data from the Johns Hopkins University. But if you want, I can share with you and ask the entire project. So that's not a problem. I have a single, that's, as you can see, as you saw, it's a single geomegage with just two layers and one print layout. So that's not a problem. We'll share that with you. Nice. That'd be great. Yeah, yeah, of course. Matteo, I have a question for you. As you've seen that I have this land cover data set and I create the pie chart, but then the legend colors are not the same as the legend of the land cover map. Is there a way to solve that with some data override or is there some functionality? Actually, actually, if you look in the main data of the repository, 10 minutes ago, we had a comment on the pull request from a guy that is working on that. Because actually, that's not simple. So you have to, I mean, there is a way, not now, but in the future, that's a monthly version, it will be there. And you have to use some kind of curious expression to do that. Because that's the same also for a bar chart, when you use a third variables to change the color of the single bar. So you have to use some expression, but it will be lent soon, hopefully. Okay, curious to see that. And Mateo, I'm wondering, it seems like Plotly is getting so mature and so widely used. Has there been any discussion of having it actually become part of Core and QGIS? I spoke with Nile and with other developers. And actually, I was hoping that months ago, but actually, it's really better to have it as a separate plugin because you have QGIS and you have all the plugins. So I can update Plotly every week, for example, or if you hit a bug or a feature request, then you should not wait for the next, I don't know, long-term release of QGIS, for example, or the next stable release. So actually, that's better to keep it separated. Good point. There's a question from the audience. Is it possible to filter value directly with a dynamic field in the presentation, somebody asks? And is it possible to have two y-axis? Okay, from the presentation, actually no. Dynamic field in presentation. Actually, you have some dynamic filter, not filter, but you have this two checkbox in the main panel that you hit the first one to just look at the, just on the selected items in the map. You have the other one that is filtering dynamically. So live, just the item that is, that are in the map in that moment. So if you are zooming in or zooming out, the plot is updating itself dynamically. And what was the second question? Is it possible to have two y-axis? I don't know if Plotly supported that, but remembering that, I'm remembering that from ggplots or from R and RStudio, that having two y-axis, it's not a good idea for plot. I started it some years ago and actually the, I mean, ggplot guys were against it. I'm not sure that that Plotly supports it because I think they are going to do the same direction because they think that, I mean, they claim that having two y-axis is kind of confusing the plot of what you are, what you're plotting in the plot actually. Okay. Are there any more questions from the audience on also on the previous stuff, the exercise? If not, then a great thanks to Matteo and we can still ask questions to him. I hope he will stay for the Geo beers. Yeah, of course I have a cold beer by Fringe, of course, waiting for me. Good, we're getting almost thirsty, so let's go through the last few slides. I ask Matteo to hide your screen and mute yourself and I'll go through the last set of slides and then we're soon at the Geo beers. Yes, so at the end of the session, we always have a little plug of what we can offer more for you in terms of courses, so I'll keep it again short because you can, you know it from the previous sessions and hopefully you know what we offer. At IHG Delft, we have OpenCourseWare, GIS, OpenCourseWare.org, you can look there for many videos and tutorials on many different topics related to GIS. Hope you've noticed the YouTube channel. If you subscribe to get automatic updates and this video of this session will also be posted tomorrow there, so you can watch it again. We also share on social media. If you'd like to have a face-to-face course, you can join us in Delft as soon as it's possible. Of course, in September there will be normally a short course from 14 to 18 September. Kurt joined me in the last two years in this course. It's always great fun. We do a mapathon and we have people from all over the world doing GIS with us. And there's online courses and we are working currently on making the online course for the book. So that will give you the official QGIS certificate and of course support from Kurt and me in getting through the course. So we keep you updated about progress on that. And we have many other plans and we will update you also on that. I'm going to give the word to Kurt. Yeah, if people didn't see it, this is where we're all from. So I think it's pretty amazing how much of the world is represented in these webinars. So I just want to thank everybody for joining in. And I'll be the one kind of leading the way next week to show you some cartography tricks and how to make the nice plot that's on the cover of the book. And just to remind everyone, I did an episode of Mapscaping with Daniel O'Donoghue a few weeks ago on QGIS and the QGIS project. And this coming Tuesday I'm going to interview me about Lutra Consulting's input and margin tools for field data collection and QField. So I'll be talking about those QGIS-related mobile tools. And it will probably take a couple of weeks for it to come out, but look for that. And just in general, I love podcasts and this Mapscaping one is fantastic for all things geospatial. For example, he just had Paul Ramsey on talking about post-GIS recently. So if you're into podcasts, give this a listen. That's really great. And I think it's a very nice topic to cover the field data collection tools. I mentioned it a bit in my introduction. And there are two great tools for that. It's nice to look at the different tools and to learn more about that. On the GIS OpenCourse where there's a full tutorial on input from Lutra Consulting, Lutra is the company also sponsoring these sessions. And I make that tutorial together with Saber, who is also frequently joining us. I don't know if he's around today. So definitely I'll be looking forward to this great podcast. The previous ones from Courtauld have been great. Then next week, the final session, unfortunately, because we're getting into some rhythm, we need to make some new chapters, I guess. All these new things coming out and QGIS is not locked down. It's continuously developing while we're locked down, which is a good thing. So we'll probably never end with nice new features to explain to you and to discuss. But next week, as we promised, the map design, you will hear everything about inverted polygon shape burst fills and other tips and tricks to create really beautiful maps for your hydrological applications with Courtauld. That brings me to the slide that I was longing for in the last minutes to have some dual beers with you. And if it's breakfast time, have some coffee with us or lunch or your latte, as we've seen last time. So I'll stop the recording.