Resources

Visualizing Gas Prices | PydyTuesday Uncut #2

Join Michael Chow (open source developer at Posit) and Jeroen Janssens (developer relations engineer at Posit) as they dive into this week's #PydyTuesday dataset. This time, they visualize gas prices using the four P's: Positron, Python, Polars, and Plotnine. True to the "PydyTuesday Uncut" title, this video is completely unedited. Every typo, mistake, web search, and "aha!" moment is left in so you can see exactly how we approach a new dataset from scratch. Things mentioned during the session and related resources: - Weekly US Gas Prices https://github.com/rfordatascience/tidytuesday/blob/main/data/2025/2025-07-01/readme.md - Code produced during the session https://github.com/jeroenjanssens/pydytuesday-uncut/ - Plotnine https://plotnine.org - Positron https://positron.posit.co #python #polars #tidytuesday #datascience

Jul 7, 2025
1h 3min

image: thumbnail.jpg

Transcript#

This transcript was generated automatically and may contain errors.

Hey, everybody, and welcome back to another episode of PydyTuesday Uncut. My name is Jeroen, and I'm going to be your driver again. And with me is Michael. And Michael is the navigator. I'm your friendly navigator.

Michael, are you ready? I'm so ready. All right, let's, let's dive straight in.

Setting up the Quarto file

So this is the latest PydyTuesday data set, Weekly US Gas Prices, our favorite topic, and you know, we'll put links in the description again. And I believe that over here, there's a, there's a line that we can use to get this data straight into, into Python.

So last time we used the command line tool, PydyTuesday, this time we're going to do it straight in the code. If that's okay with you. Yeah, for sure. Let's do it.

I got Positron over here. I installed a new theme. And yeah, what we can do is create a new file. What, what am I doing? You're the navigator, Michael. You should tell me what to do.

Maybe we could try QMD just to, so a Quarto file, just so we can fire things off. I like, I like that it lets us mix a little bit of code, but then we can kind of tuck some notes into the file. Yeah. Perfect. Sounds good.

Give it a nice little name. And then I always type in for metadata. It's weekly US gas prices. Let's just use that as well. I usually, the Jupyter colon Python three, just so it knows.

And then, yeah, if you press command shift, I should create new code blocks. So now you can try running stuff just to maybe make sure. So like even like one plus one, just to fire it off.

All right, let's do it. Let's see if this computer knows what's up and you want me to run this cell or you want to preview it? I just run cell for now and then maybe preview at the end. So this code is sent to the console and then we can see that it's indeed still too nice.

I already have a virtual environment set up with polars.

And then I think one other nice thing I like about notebooks is if you had a header, like if you had a level two header above the code, I think you should be able to also navigate to, yeah. So if you just call that like setup. Notice it appears, by like gas QMD just up a little bit.

I don't see it. Just by the gas QMD tab, kind of on top. Oh yeah. So we have a breadcrumbs. Yeah. I like that you can click like setup and jump between sections really easy.

Oh yeah. So if we have another section up here. And also here in the, in the, in the bottom left, we have the outline. The document too.

Loading the data

I don't, why don't we download the data? Oh, I got to fetch that code again. It's this one over here. And we're not going to be using pandas, but we click gas prices. Let's just call this a prices. Nice PL read CSV. Oh, and I want this to be inside a code cell, of course.

Yeah, that worked. We've got prices here on the right in our variables pane.

And I'm just looking at the description. So, I mean, I'm guessing it's every Rosa week, probably given the name. So maybe, well, let me then at the same time, open up the data frame here.

So this time we have over 22,000 rows. Nice. Not too many columns. We've got five columns. They're nicely named. They're all lowercase. I like that. No spaces or anything to deal with.

Yeah, cool. And I'm guessing if it's like weekly and this is like 35 weeks, that's probably like, well, 35 times 52 is 1800. So I don't know. There must be some other. Well, there is, uh, there are two rows per week. One is for one says all. And the other one says conventional.

First plot with plotnine

So maybe, maybe just try plotting quickly, like week, uh, like a line using date colored by like formulation or something just to see like date by price colored by like grade or something or formulation, maybe just to see kind of what we. Yeah, it's, it's a combination of things. So price should obviously be on the Y axis and date should be on the X axis.

And then these three columns here in the middle, I mean, I can, I can, I understand what fuel and grade mean, but then there's also formulation. Is it in the, in the description? What formulation means then, uh, then in the meantime, I can set up the code to, um, to produce the plot. What do you want to use for plotting? plotnine.

I, I guess, you know, I guess for the, for the audience, Jeroen and I just helped rewrite plotnine's docs. So we're a little bit biased to, um, a little bit. We're two big fan boys of plotnine.

Yeah. I'd bust plotnine out. Um, yeah, no, we're definitely going to be needing the, the user guide and or documentation, um, today. So it almost seems that like no cleaning is needed, um, so far.

I would also need to import, um, from plotnine, import everything.

And then, so I'm going to do ggplot prices and for the aesthetics, we're going to map date to the X axis. And the Y aesthetic is going to be based on the price column. Yeah. And I guess we can just start and iterate from there.

I think it's nice to just fire off like a line plot and see the line plot will look super jacked up, like it will have a lot of vertical lines if you don't get the groupings right. But I find that's kind of nice. It just like, you just see if it's jacked up and then.

Yeah. Let's, so let's start with fuel and this, this, this plot will most certainly be wrong, but then we can always improve on that later. Geom align.

Okay. That's not a bad, uh, rendering plot. I like that. Oh yeah. It's, uh, yeah, there we go. So few things, I mean, no errors. That's it. That's not bad, but we have a lot of dates that are all overlapping.

Maybe, um, can you facet wrap on fuel just so we can see exactly how. Yeah. And a jack, if they're going to facet wrap on fuel, then I guess we can, we can change, we can use grade for the color.

Oh, here we go. I like that. It keeps the history of plots in the right hand. Oh, I wonder if there's a lot of, oh, okay. So that's interesting. I'm not seeing too many diesel.

And that's okay. So that's odd. There's something going on that we don't understand. Maybe we just glance at one of the rows, like 1990 and see.

So, okay. One week here. Like, let's just look at once a week also, and we don't even, uh-huh. Also, if you look here at this, um, this bar chart of the fuel column, you see that, uh, 88% of the rows correspond to, uh, gasoline and the rest, which is only 12% is diesel, not still doesn't explain why we don't see anything right here.

Um, right. All right. Um, if we, I think if we look at a single week, so like just even the first week, maybe that'll tell us a little bit, so there are. Well, there's no diesel. There's no diesel in the first week. Or maybe grab one in the middle. Sometimes the first rows also are a little bit less rich.

Um, in the 16th, there's tons of rows. Yeah. So there's, oh, that's right. So would you like me to filter on this date?

Exploring the data structure

It could also be multiple, multiple samples. Uh, so like here, there's multiple gasolines on like regular grade. And I guess that maybe it's a crop. It's like grade and formulation. It's all unique combinations. Like, like each one could be an entry, like a grade and a formulation since you have like gasoline grade all, and then you have different formulations.

Uh, so maybe there's some kind of like summarizing we need to do. Uh, or, or we could try the, like maybe all grade and see, like if you filter fuel, gasoline, grade all, maybe that'll. Yeah. I was thinking the same. Let me make that.

And I would almost just, I would like pipe prices in like, um, use the greater than, greater than, so you can kind of set up the, um, uh, you want to do piping in Python? Yeah. Well, at least, so plotnine takes advantage of operator overloading a little bit, so you can basically keep your polars code outside.

So yeah, if you do before ggplot, just pull the prices out and do, um, yeah, just delete it. Yep. And then do prices greater than, greater than inside the parentheses. Yeah. And this works because ggplot or plotnine has overloaded this operator. Is that right? Yeah.

Yeah. Similar to like built in Python libraries, like pathlib also do this operator overloading. So, um, but, uh, yeah, this is a way for you to like keep your polars code before plotnine. So now you can do like prices dot filter.

Yeah. I mean, I'm all for using the pipe operator because very much reminds me of you working on the, on the Unix command line. And of course in R, which now has a native pipe operator as well and has had a pipe operator for a bit longer before that, thanks to, um, McGritter.

Um, so, uh, grade needs to be all. We can also, I'm not a fan of this notation, but this is also possible. That works. This, this works. Yeah. I am not a fan of this. Uh, it's not very extensible, I guess, but it's a quick syntax. But there's only, of course, except certain column names, right. Because of the restrictions of Python.

It's so odd that we, it could also have something to do with, um, Hmm. Do you want to, maybe we should set access to free, uh, over here. Oh, like maybe the diesel is, I, I think at this point we've like gotten close enough that we might be able to filter for the diesel row and see, or count it.

And I think this is the beauty of the pipe is now you can kind of just like, oh, diesel formulation is NA. Oh man, so let's not filter on that because then we don't have any diesel rows. Let's just, let's see what's in, what's happening here.

Well, I still don't understand why you're doing that. Yeah. On a diesel. How about we, we say fuel needs to be diesel. Yeah. There you go.

Right. Because then if we do that, let's just do a sanity check of how many rows we then actually have, because then we can, we can, we can, we can, we can, we can, we can, we can, we can figure out how many rows we then actually have.

What'd it turn out to? Yeah. 1,632.

The, what, um, can you, can you show me the data again? Yeah. There's something odd going on. I also don't like that date is a string.

Yeah. We might have to do the, um, values, the NAs. Uh, and I want to convert this to, I want to convert this to an actual date type. But could we get like, maybe we could get like just 10 rows of diesel that we know should plot. Like just fill, just do head 10 and preview that.

And then just for sanity, like if we think this should like, this feels like it should plot fine. So maybe, maybe like paste that in to the plot above.

Yeah. And this is what I like about the pipe is if you put the greater than on the next line over here, you can kind of like, yeah, this is great. Now you can like almost paste your data wrangling in prior to the plot. Uh, yeah, we still don't see anything. It's, um, on point with that.

Yeah. Let's leave that. I don't know what's here. I have, uh, no idea. So. So it does give me an error, an error down here. Each group consists of only one observation. Do you need to adjust the group aesthetic? Uh, should it be, should we set group to one?

Is that it? Yes. I guess group needed to be fuel probably. Like normally the group is the color, but I think that because like only had one.

Cleaning the data

So we have a basic plot. Um, how about we, we go back to the data loading and, and, um, change those NA values like you suggested earlier. Yeah. And also maybe we can, um, convert the date to an actual date type.

Yeah. Yeah. Yeah. So I think I'm not a hundred percent sure. I want to look at the documentation. Um, I know that, um, or there, there might be, there might be an argument in read CSV to interpret the date column as a, as a date type.

Hmm. Yeah. I gotcha. You're, you want to manually kind of specify the D type. Yeah. Which, which there are, there's, there's of course also, um, um, an argument to override the schema. Schema overrides.

Oh, wait, that was a sneak peek at the new, the new plotnine website right here. Um, first things first. Yeah. NA values.

Oh, NA, uh, no values is the argument. Yeah. Okay. That worked, but also done scheme, uh, overrides, and this can be a, are you sure it won't, you're saying it's not a date right now? Like if you print out prices, prices here, it says probably can't.

Oh, we're in front of it. Our faces are in front of, let's have a look here. Uh, does it? Yeah. Also, it can also be seen here. Uh, uh, date. So is it, is a string, right? And that won't change if we increase the number of rows that we'll use for inference.

Yeah, gotcha. But I think we can use schema overrides. And, um, if I'm not mistaken, this can take a dictionary.

Oh, oh, I forgot to, I think it's, um, yeah, I should, I should have used the column here. What was I feeling is, uh, this is nice. You got the live, live data now.

Did it work out? I'm executing this, but it still says date. Uh, so maybe I'm using this wrong. Uh, let's see.

Overrides it seems pretty, huh? I wonder if, I wonder if it has to be used with this argument expects. Oh no. No, it seems like the right.

Um, and when you print the prices data frame, it's a, like, if you just print it to console, is it, uh, Oh, now it works. Yeah. That's interesting. Maybe the grid didn't, um, update.

Yeah. So let's just get rid of this. Uh, normally I don't use this, uh, the dull, um, keyword, but, uh, prices, date. All right. Nice. And that's, um, date. Yeah. Yeah. I don't know why it didn't update. Um, but it's okay. We fixed it now.

Is there, now that we're here, is there anything else that we want to take care of? We fixed the null values or NA? Yeah. Uh, prices afloat. It looks like now. Yeah. No, they are. They are. That's all good.

Filtering to key fuel types

Uh, no, I think that's great. I think we're good in good shape. Yes. Yeah. So we've got, so I guess now at this point we like, no, we have a good sense for what makes up a row. Like the grain of the data is basically the, the fuel, the grade and the formulation. And we know like diesel basically just has one grade and formulation. Uh, gasoline has kind of a few.

Yeah. Again, I guess we could do a little bit of, um, just as a sanity check, do some grouping and yeah, like different counts. So yeah. Yeah. Yeah. It seems great just to see if they all summed to the same, um, number group by, so we're going to group by a fuel and formulation, relation and grade. Nice.

And then it's a matter of PL dot LN. Yeah. Yeah. Yeah. You got it. Okay. So this is, let me, let me, um, I'm going to call this, uh, counts so that we can explore this here in the data viewer. 14 different combinations.

And there aren't actually done two grades for diesel. Oh wait. No, sorry. More. Let me sort this. Yeah. Oh, nice. Oh, this is in retrospect, this is what I would have done very first. I didn't even this thing. So handy.

I bet that, I bet that some of this is like, over time, certain types of measures were added. Since we looked at, could be, and we looked at the first couple rows, there were only a couple weeks for a couple of points for the same week. So I wouldn't be surprised if they started kind of adding grades and formulations over time.

Yeah, exactly. I think, I think it would be helpful to just make a choice here to, I mean, all those formulations and grades, I, I care most. I, you know, personally, I would be, or it might be interesting to explore correlation between diesel and gasoline overall. So then we just have to make a choice.

They seem pretty strong. Just looking at the plot, they seem pretty, like they track pretty, yeah. Oh yeah. I mean, but, but the scale, I mean, it's like we started in 1990. So it's a, it's a lot of data. I mean, at this view, they definitely seem correlated.

But I'm still curious, like we could also plot, for example, diesel versus gasoline, create a scatterplot out of that. Yeah. Yeah. But then how about we just pick all the, all the rows that are diesel grade all. And gasoline, all, all, I'm just, it, for that we have, or conventional regular. For that we have the most rows.

Yeah. Yeah. And if you're deciding between gasolines, you could also plot them over each other and just see, like, are they pretty the same? I'm, my guess is if you're thinking between two gasolines, like which one should you pull out? I'm guessing they'll be pretty similar.

Yeah, exactly. So gasoline, conventional, regular, and diesel and all, you got that? Yeah, sounds great. Okay. Now let me write a filter for that one because this is a little bit of cleaning.

So yeah, filter, filter only certain types of grade and formulation. So what we're looking at here is PL call fuel is diesel. Nice. And PL call, I'm going to be looking back at this back and forth counts diesel and then grade is all.

Yeah, cool. And then gasoline. So I'm now, I'm now building up two expressions so that later I can combine those two. Yeah, looks great. Fuel is gasoline. And PL call grade equals all. And formulation. That was regular. No, sorry, conventional and grade is regular.

Yeah, gotcha. Right, so these are two expressions. They don't do anything by themselves, right? They're like lazy recipes. I think the conventional is kind of mixing the two. Is it, it's formulation equal? Yeah, yeah. Yeah, I'm mixing, mixing this up. Formulation, conventional.

Thanks. I think Python does only single ampersands, but I could be wrong. I feel like I'm. You know what? I always mix that up. There's only one way to find out. Send it. Yeah. I'm not getting an error right now, but.

That's perfect, yeah. Prices, the filter. So it should diesel or gasoline.

Uh oh. Is there a lingering? I bet there's maybe a lingering parentheses open. Maybe not. Yeah, with this one, with gasoline. So let me just. So it's this. And this. And this. And then the closing.

Wow, I had no idea you could use two. But still, I'm mixing something up here. I think it's a single or. Yeah, could that be it? Could that be it? Because I'm not getting an error with the diesel. It's also highlighting the single and which gives me hope.

So I think. Oh, wait. I think. Yeah, of course. There shouldn't be. There's the double ampersand also. On seven. And then you have, I think it's just one bar for the or.

On 47. Yeah, yeah. Let me first see if this is not correct. Press control C in the console, right? If you just see three dots here. It means that the console is still waiting for you to complete that expression.

So this works. There's still something going on with gasoline. I think the end. There should be a closing on line 44. It needs a closing parentheses. Well, that's that's this one. Right, but that's. It's this one here. Yeah, yeah, yeah.

It's good times. This is always a lot of fun. All right. So this completes and you're saying over here.

Yeah. I do feel like one, one technique, I think for helping build some of this, because it can be hard to like build the filters and then debug is. I think if you build each expression inside a filter, like if you do prices dot filter and then write out the diesel filter and run it. And then you do prices dot filter and build out the gasoline filter and run it. It's a good way to kind of keep firing. You can just like. Make sure it's working. And then and then combine them together. Later, if that makes sense, just to kind of validate.

But even sometimes I'll even though I'll put like the actual PL dot call expression inside the filter and then I'll pull it out once I know it works so that I can kind of just. Yeah, you can like check each step, even like gasoline, then regular, then conventional. Conventional that you're kind of like. Each piece is working.

Yeah. Um, yeah, so that worked. I just, um, well, let me put it, let me just keep it in there. I want to do one more sanity check because, um, I wonder if there are now still. Multiple entries, uh, for one type of fuel for a single date. I just wanted, I just want to check that.

Um, I guess, I guess we can add that to the filter right here. Um, if we're going to group by date. Then, and we wait, does this work? This works and there, there, this one. There shouldn't be any rows here that have. Where, where Len. Is greater than one filter. Does that make sense? Yeah. Okay, great. Empty data frame. Is that also the case here with our gasoline? Empty data frame. Fantastic.

So this one over here, how should we call this new data frame? Maybe like simple prices or something, you know, I I'm not a great namer, but, um, you're the navigator. It's too late now. We yeah, we're in, we've got some prices. Excellent. And now, because, you know, there's their grade and formulation don't even matter anymore. At this point, we can just look at the few, at the fuel.

Building the final visualization

I want to recreate, I now want to check. Whether we can redo our initial visualization with a simple prices. Yeah. It almost, I'd start like a new chunk. Like, uh, you know, I'd start like a new chunk and then, you know, I'd, I'd, I'd, I'd, I'd, like, uh, this simple prices.

Yeah. Nice. Simple prices, but then we don't need this filter over here. This. Yeah. Nice. Um, and we can use color for this. Boom. Yeah. Great. Yeah. Let's do size equals two for a thicker line. Oh, that's a little bit too thick.

Yeah. Great. Yeah. And you can see gas in the bottom left. They started. Yeah. It looks like they collected gas a little bit and then added diesel. Maybe like a couple of years later. That's interesting. In the Netherlands, uh, diesel is always, uh, cheaper or most of the time. Yeah. But that doesn't matter. We're looking at U S gas prices.

Um, Hey, how about, how about we create that scatterplot now, which I mentioned earlier, just, um, plotting diesel against gasoline. Yeah. Sounds great. Just going to copy this cell. So is there any correlation, right? From a qualitative point of view, right. When we, when we visualize this, so, uh, X is, um, Oh, wait, we got to do a little pivot.

Yeah. Oh, man, this, this part is scary. Um, we got to, we got to pivot and for that, yeah, you're going to have to, um, help me. I'm afraid, but I'll try.

Yeah. Yeah. Okay. Um, I would almost, I just keep it in the correlation, like wherever you're going to put the plot too. I would just like, rather than creating a section for pivot, just kind of, you could create like another chunk if you want, or yeah, that seems great.

Okay. So like simple prices. Yeah. Nice. Is it columns? Is that a, yeah, we're gonna, we're gonna, we're going to pivot on fuel. No, that's the end. Oh, oh wait. This is yeah. Yeah. This is always value. Values is prices. Is that nice?

Oh, we need, oh wait. Or do we actually, does this need to be on? That's price is not, I think they, oh, price. Yeah. Cool. Oh, interesting. Um, I think it kept the, we have to drop grade and formulation. I think we have to do indexes date. Maybe it kept the, since it kept the grade and formulation at like.

Gotcha. Yeah. For some, for some dates we have missing values for diesel. That's okay. Yeah. Yeah. Whoa. This is not too bad. This works. So, so this is gas versus diesel gasoline.

So now X is gasoline. No, wait. Yes. Yeah. Um, it's a, uh, GM point to create a scatterplot.

Uh, oh wait. Oh, I think that's a yeah. Yeah. Gasoline just have to run the top. Fun. It is a bit tricky because time, time definitely plays a. Yeah. With this work color is date. Yeah. Oh, that's pretty.

Yeah, you can kind of see, um, inflation. Uh, over time. Oh, no, that doesn't really work. But I, I, uh, I like this. Yeah, that's great.

Um, yeah, it's, I think it's tricky because to really. Get in, we'd probably have to adjust for the temporal, um, but I do think the line graph is really helpful to see, cause you do see there's like, it seems like there's variation, a decent amount of variation even over time.

Styling the plot

Yeah. Would you like to continue with, with that visualization with, uh, this one, make it pretty? Yeah, that might be a good idea. Uh, we got, we got about 15 minutes left. Yeah, let's do it. Uh, maybe just theme it up a little bit. Like just juj it. Um, just what? Juj it up, you know, just, uh, yeah, yeah. Put some glitter on.

Yeah, that sounds good. Like, um, like the labels and the, um, absolutely. Okay. So what are some things, let me just, um, I'm going to copy this. We're going to do here. And I, I, I want to create a, um, to do this here. So colors.

Oh, wait, this is just text. So we can, I forgot that we're in a Quarto markdown file. Uh, I can just type text over here. Uh, so I want the line colors. I want, I want, I don't like those standard colors, those default ones. Uh, we shouldn't have the title. Right.

Uh, you might, depending on if you like the, uh, axis text being horizontal, you could also flip it. Uh, rotate the, uh, the X tick labels, maybe try it out. And if it sparks joy, we keep it. And if not, we just throw it away.

Yeah. Do you like, do you like, um, capitalized labels? I don't know. Yeah, we'll see. Okay. That's not the biggest thing. And then, and then maybe, uh, a font and, uh, add a little bit more theming over here. Yeah. And if we, if we think that this is, uh, pretty enough, we could add it to the plotnine gallery.

Yeah. Sounds great. Yeah. I love that. Um, let's do this. Yeah. How about, um, let's, let's start at the top then those line colors. Let me make this console a bit smaller so that we have this text in here. So that's this, that's the scale, right? Scale, color, and manual.

Yeah. What colors are you looking for? Yeah. What colors are you looking for? Uh, can we do, um, I don't know. What does it do? Yeah. Okay. We don't, I don't really have, is it, uh, this, uh, I'll ship in a, yeah, you have some hex, some hex colors. Green and purple if, in case you're interested.

Oh, nice. It's nice. They're complimentary colors. Um, do we want to do some smoothing to the line? Uh, Like a rolling average. That's it's, it's very jagged, right? Uh, the lines themselves, we have a lot of, you want, you want to do that? We want to do that after. So that's again, um, you know, wrangling the data. Why don't we do that after we've, we're done with the visualization?

Sure. Yeah. Sounds great. All right. So title. Ooh, U.S. weekly gas prices. How's that? It's beautiful. Oh, weekly U.S. gas prices.

Nice. I think it might be labs, uh, but without the Gigi. Yeah. Ooh, not quite abs. Abs is a different thing, you know? Yeah, I know. Okay. We got a title.

Yeah. Cool. And then. Rotate those labels. So that's a theme. Uh, access text X is a, um, title. Mm hmm. Is a, um, type element text. I've, I, um, rotate. Rotation is. Oh, interesting. I always do angle. I had no idea rotation was, um, in play. Angle works. Oh, interesting. It's probably the same thing.

Yeah. A just is minus one. Wait, wait, wait, wait, wait. We need to. Yes. There we go. Nice. Yeah. The angle, I like the angle. Um, but what I don't like is how they look the labels themselves. The, uh, like the text of the label. Yeah. Just how they're formatted. So I think that should, we should take care of that. That's again, a scale, right?

So a scale, uh, determines how the values are translated from the data onto values being used in the plot. So the aesthetic is X and the type is date. And then I believe they labels is, I'm just winging it here. Oh, I see. Yeah. Nice. Okay.

And do we want to do, I think it's going to be trickier if we, oh no, wait, I know. I remember again, date breaks. Yeah. Yeah. Is two years. Nice. That's a little bit too much. Let's do five years. Yeah, great. Five years is, um, not a really nice increase to be reading.

Seems solid. This is all right. That's right. Oh, I think we have, I hate to admit it. I think we have opposite text angling preferences. I'm, uh. Tell me you're, you're the navigator. You want to do, this isn't to say one's right. Just to register that we go opposite directions. Maybe it's because you're in Europe. I'm in the, in the U S uh. I think that's it. No, I think we just, uh, compliment each other.

Yeah. And then H just one. Hey, I can live with this. You five just to, so it doesn't seem to like, it's just a little askew. Sorry. What do you want to change? If you change the angle to 45. Whoa. All right. But that's, that's not to say one is right. And one is wrong. I just wanted to show that's, that's the, that's the thing with visualizations. It's, there's a lot of, there's a lot of preference, uh, associated there.

It's, there's a lot of, there's a lot of preference, uh, associated there