Lineplot doesn't show all dates in axis - python
I have the followings:
fig, ax = plt.subplots(figsize=(40, 10))
sns.lineplot(x="Date", y="KFQ imports", data=df_dry, color="BLACK", ax=ax)
sns.lineplot(x="Date", y="QRR imports", data=df_dry, color="RED",ax=ax)
ax.set(xlabel="Date", ylabel="Value", )
x_dates = df_dry['Date'].dt.strftime('%b-%Y')
ax.set_xticklabels(labels=x_dates, rotation=45)
Result
When I use a barchart (sns.barplot) the entire spectrum of dates are shown. Am I missing something for the line chart? I
The idea would be to set the xticks to exactly the dates in your dataframe. To this end you can use set_xticks(df.Date.values). It might then be good to use a custom formatter for the dates, which would allow to format them in the way you want them.
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import dates
import seaborn as sns
df = pd.DataFrame({"Date" : ["2018-01-22", "2018-04-04", "2018-12-06"],
"val" : [1,2,3]})
df.Date = pd.to_datetime(df.Date)
ax = sns.lineplot(data=df, x="Date", y="val", marker="o")
ax.set(xticks=df.Date.values)
ax.xaxis.set_major_formatter(dates.DateFormatter("%d-%b-%Y"))
plt.show()
Note how the same can be achieved without seaborn, as
ax = df.set_index("Date").plot(x_compat=True, marker="o")
ax.set(xticks=df.Date.values)
ax.xaxis.set_major_formatter(dates.DateFormatter("%d-%b-%Y"))
plt.show()
One way to circumvent the date tick sparsification from Seaborn is to convert the date column to string values.
df['dates_str'] = df.dates.astype(str)
Plotting using the new column as the x-axis will show all the dates.
Related
Setting the axes date formatting of a pandas stacked bar subplot
I'm attempting to plot a pandas stacked bar plot with the x axis showing Months on the major ticks, or years on Jan 1, ideally with small ticks identifying the weeks but with no label. I have a dataset with a datetime index that was then grouped by week and then I plot that dataset. If I don't attempt to control the settings the dates show up but are vertical and don't fit. So I used the set formatter to fix that but then the axes changed to 1970 as if following an index number instead of date. If I replace the pandas plotting with a regular bar chart, the "ConciseDateFormatter" works as desired/expected. But I wanted to use stacked with pandas as creating a regular stacked bar chart is a pain. I don't understand why I can't control pandas axes like I can a regular plot. One thing I notice is that the index is shown as an object. If I convert it to to_datetime() it then adds 00:00 for times that I don't want on the axes or my data. My data is a simple set of weekly random data: date A B C D 3/20/2022 1.540765154 0.504616419 1.543679189 2.952934623 3/27/2022 1.781135128 4.594966635 4.799026389 3.499803401 4/3/2022 0.254059207 0.69835265 0.323039575 1.628138491 4/10/2022 3.112760301 0.287056897 4.372938373 0.130817579 4/17/2022 0.497273044 0.913246096 1.296612207 1.250610278 4/24/2022 1.370087689 3.124985109 4.322253295 4.49571603 5/1/2022 3.952629538 3.976896924 1.679311114 1.265443147 5/8/2022 3.470328161 1.266161308 3.990502436 1.364929959 5/15/2022 2.296588269 4.639761391 0.04685036 1.438471692 5/22/2022 3.443458637 2.66592719 0.968656871 2.349325343 5/29/2022 1.820278464 4.794211675 2.435710815 2.156110694 6/5/2022 4.328825266 0.049132356 1.842839099 3.665701299 6/12/2022 0.184631564 0.412976815 4.787477069 4.80052839 6/19/2022 4.846734385 3.471474741 1.808871854 2.440013553 6/26/2022 1.612870444 0.70191857 3.55713114 1.438699834 7/3/2022 2.896859156 4.025996887 0.209608767 4.174881655 Code: import datetime import matplotlib.pyplot as plt import matplotlib.dates as mdates import numpy as np import pandas as pd maxval = 200 values = ['A','B','C','D'] cum = [v + '_CUM' for v in values] df = pd.read_csv('test_data.csv', index_col='date', parse_dates=True, infer_datetime_format=True) #df.index = pd.to_datetime(df.index.date).strftime("%b %d") df = df.join(df.cumsum(), rsuffix="_CUM") df = df.join(df[cum]/maxval * 100, rsuffix="_LIFE") fig, axs = plt.subplots(nrows=2, ncols=1, sharex=False, squeeze=False, facecolor='white') axs = axs.flatten() ax = axs[0] df[values].plot.bar(ax=ax, grid=True, stacked=True, legend=True) ax.xaxis.set_major_locator(mdates.MonthLocator()) ax.xaxis.set_major_formatter(mdates.ConciseDateFormatter (ax.xaxis.get_major_locator())) # ax.xaxis.set_tick_params(rotation = 0) plt.show(block=False)
How to make the horizontal axis scale larger for matplotlib drawing without changing the data range? [duplicate]
I have a code given below: import pandas as pd import plotly.offline as py import matplotlib.pyplot as plt plt.style.use('fivethirtyeight') import matplotlib.patches as mpatches import matplotlib.dates as mdates import matplotlib as mpl df = pd.read_csv(".\AirPassengers.csv") df['Month'] = pd.to_datetime(df['Month']) df.set_index('Month', inplace=True, drop=True) fig, ax1 = plt.subplots(figsize=(20, 5)) ax1.plot(df.index, df["Passengers"].values, linestyle='-', marker='o', color='b', linewidth=2, label='Passenger Number') fig.autofmt_xdate() ax1.xaxis.set_major_locator(mdates.YearLocator()) ax1.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}')) ax1.set_title("Passenger Number") ax1.legend(loc="center left", bbox_to_anchor=(1.0, 0.5)) ax1.set_xlabel("Time Interval") plt.tight_layout() I am trying to extend x-axis or time interval more than 1960-12 independent of period of data. Can you please help me on it?
The easiest and most reliable method is to extend the original data by the desired time-series period and fill in the missing data with NA. Specify the start date of the data and the end date of the data with set_xlim(), as described in the comments in the graph-side processing. df['Month'] = pd.to_datetime(df['Month']) df.set_index('Month', inplace=True, drop=True) # update new_index = pd.date_range(df.index[0], '1973-01-01', freq='MS') df = df.reindex(new_index, fill_value=np.nan) . . . # update ax1.set_xlim(df.index[0],df.index[-1]) plt.tight_layout() plt.show()
The following worked for me: from dateutil.relativedelta import relativedelta Then: ax.set_xlim(df.index[0], df.index[-1] + relativedelta(years=2))
How to add multiple custom ticks to seaborn boxplot
I generated a boxplot using seaborn. On the x axis, I would like to have, both the number of days (20, 25, 32) and the actual dates they refer to (2022-05-08, 2022-05-13, 2022-05-20). I found a potential solution at the following link add custom tick with matplotlib. I'm trying to adapt it to my problem but I could only get the number of days or the dates, not both. I really would appreciate any help. Thank you in advance for your time. Please, find below my code and the desired output. import pandas as pd import matplotlib.pyplot as plt import seaborn as sns df = pd.DataFrame({'nb_days':[20,20,20,25,25,20,32,32,25,32,32], 'Dates':['2022-05-08','2022-05-08','2022-05-08','2022-05-13','2022-05-13','2022-05-08','2022-05-20','2022-05-20','2022-05-13','2022-05-20','2022-05-20'], 'score':[3,3.5,3.4,2,2.2,3,5,5.2,4,4.3,5]}) df['Dates'] = df['Dates'].apply(pd.to_datetime) tick_label = dict(zip(df['nb_days'],df['Dates'].apply(lambda x: x.strftime('%Y-%m-%d')))) #My custom xtick label #Plot fig,ax = plt.subplots(figsize=(6,6)) ax = sns.boxplot(x='nb_days',y='score',data=df,color=None) # iterate over boxes to change color for i,box in enumerate(ax.artists): box.set_edgecolor('red') box.set_facecolor('white') sns.stripplot(x='nb_days',y='score',data=df,color='black') ticks = sorted(df['nb_days'].unique()) labels = [tick_label.get(t, ticks[i]) for i,t in enumerate(ticks)] ax.set_xticklabels(labels) plt.tight_layout() plt.show() plt.close() Here is the desired output.
You can do that by adding these lines in place of ax.set_xticklabels(labels) new_labels=["{}\n{}".format(a_, b_) for a_, b_ in zip(ticks, labels)] ax.set_xticklabels(new_labels) Output
Try this: import pandas as pd import matplotlib.pyplot as plt import seaborn as sns df = pd.DataFrame({'nb_days':[20,20,20,25,25,20,32,32,25,32,32], 'Dates':['2022-05-08','2022-05-08','2022-05-08','2022-05-13','2022-05-13','2022-05-08','2022-05-20','2022-05-20','2022-05-13','2022-05-20','2022-05-20'], 'score':[3,3.5,3.4,2,2.2,3,5,5.2,4,4.3,5]}) df['Dates'] = df['Dates'].apply(pd.to_datetime) tick_label = dict(zip(df['nb_days'],df['Dates'].apply(lambda x: x.strftime('%Y-%m-%d')))) #My custom xtick label #Plot fig,ax = plt.subplots(figsize=(6,6)) ax = sns.boxplot(x='nb_days',y='score',data=df,color=None) # iterate over boxes to change color for i,box in enumerate(ax.artists): box.set_edgecolor('red') box.set_facecolor('white') sns.stripplot(x='nb_days',y='score',data=df,color='black') ticks = sorted(df['nb_days'].unique()) labels = ["{}\n".format(t)+tick_label.get(t, ticks[i]) for i, t in enumerate(ticks)] ax.set_xticklabels(labels) plt.tight_layout() plt.show() plt.close()
Why am I getting junk date values on x-axis in matplotlib?
I am new to Python and learning data visualization using matplotlib. I am trying to plot Date/Time vs Values using matplotlib from this CSV file: https://drive.google.com/file/d/1ex2sElpsXhxfKXA4ZbFk30aBrmb6-Y3I/view?usp=sharing Following is the code snippet which I have been playing around with: import pandas as pd from matplotlib import pyplot as plt import matplotlib.dates as mdates plt.style.use('seaborn') years = mdates.YearLocator() months = mdates.MonthLocator() days = mdates.DayLocator() hours = mdates.HourLocator() minutes = mdates.MinuteLocator() years_fmt = mdates.DateFormatter('%H:%M') data = pd.read_csv('datafile.csv') data.sort_values('Date/Time', inplace=True) fig, ax = plt.subplots() ax.plot('Date/Time', 'Discharge', data=data) # format the ticks ax.xaxis.set_major_locator(minutes) ax.xaxis.set_major_formatter(years_fmt) ax.xaxis.set_minor_locator(hours) datemin = min(data['Date/Time']) datemax = max(data['Date/Time']) ax.set_xlim(datemin, datemax) ax.format_xdata = mdates.DateFormatter('%Y.%m.%d %H:%M') ax.format_ydata = lambda x: '%1.2f' % x # format the price. ax.grid(True) fig.autofmt_xdate() plt.show() The code is plotting the graph but it is not labeling the X-Axis and also giving some unknown values (on mouse over) for x on the bottom right corner as shown in the below screenshot: Screenshot of matplotlib figure window Can someone please suggest what changes are needed to plot the x-axis dates and also make the correct values appear when I move the cursor over the graph? Thanks
I haven't used matplotlib. Instead I used pandas plotting import pandas as pd data = pd.read_csv('datafile.csv') data.sort_values('Date/Time', inplace=True) data["Date/Time"] = pd.to_datetime(data["Date/Time"], format="%d.%m.%Y %H:%M") ax = data.plot.line(x='Date/Time', y='Discharge') Here, you need to convert the Date/Time to pandas datetime type.
The main issue you have there is that the date formats are mixed up - your data uses '%d.%m.%Y %H:%M', but you set '%Y.%m.%d %H:%M' and this is why you saw 'rubbish' values in x ticks labels. Anyway the number of lines in your code can be reduced heavily if you convert your Date/Time column to timestamps, ie.: import pandas as pd from matplotlib import pyplot as plt import matplotlib.dates as mdates plt.style.use('seaborn') data = pd.read_csv('datafile.csv') data.sort_values('Date/Time', inplace=True) data["Date/Time"] = pd.to_datetime(data["Date/Time"], format="%d.%m.%Y %H:%M") data.sort_values('Date/Time', inplace=True) fig, ax = plt.subplots() ax.plot('Date/Time', 'Discharge', data=data) ax.format_xdata = mdates.DateFormatter('%Y.%m.%d %H:%M') ax.tick_params(axis='x', rotation=45) ax.grid(True) fig.autofmt_xdate() plt.show() Note that the format of labels in the plot will depend on the zoom level, so you will need to enlarge a portion of the graph to see hours and minutes in the tick labels, but the cursor locator on the bottom bar of the window should be always displaying the detailed timestamp under the cursor.
Fix x-axis scale seaborn factorplot
I'm attempting to make a figure that shows two plots, with each plot separated based on a set of categorical data. However, although I can make the graph, I cant figure out how to get the x-axis to be properly spaced. I want the x-axis to start before the first value (want axis to start at 60 [first value = 63]) and end after the last (want axis to end at 95 [last value = 92.1]), with xticks going up in 5's. Any help is much appreciated! Thanks in advance! import pandas as pd import matplotlib.pyplot as plt import matplotlib.axes import seaborn as sns Temperature = [63.0,63.3,63.6,63.9,64.2,64.5,64.8,65.2,65.5,65.8,66.1,66.4,66.7,67.0,67.3,67.7,68.0,68.3,68.6,68.9,69.2,69.5,69.9,70.2,70.5,70.8,71.1,71.4,71.8,72.1,72.4,72.7,73.0,73.4,73.7,74.0,74.3,74.6,74.9,75.2,75.6,75.9,76.2,76.5,76.9,77.2,77.5,77.8,78.1,78.5,78.8,79.1,79.4,79.7,80.1,80.4,80.7,81.0,81.3,81.6,81.9,82.3,82.6,82.9,83.2,83.5,83.8,84.1,84.4,84.8,85.1,85.4,85.7,86.0,86.3,86.6,86.9,87.2,87.5,87.8,88.1,88.4,88.7,89.0,89.3,89.6,89.8,90.1,90.4,90.7,91.0,91.2,91.5,91.8,92.1,63.0,63.3,63.6,63.9,64.2,64.5,64.8,65.2,65.5,65.8,66.1,66.4,66.7,67.0,67.3,67.7,68.0,68.3,68.6,68.9,69.2,69.5,69.9,70.2,70.5,70.8,71.1,71.4,71.8,72.1,72.4,72.7,73.0,73.4,73.7,74.0,74.3,74.6,74.9,75.2,75.6,75.9,76.2,76.5,76.9,77.2,77.5,77.8,78.1,78.5,78.8,79.1,79.4,79.7,80.1,80.4,80.7,81.0,81.3,81.6,81.9,82.3,82.6,82.9,83.2,83.5,83.8,84.1,84.4,84.8,85.1,85.4,85.7,86.0,86.3,86.6,86.9,87.2,87.5,87.8,88.1,88.4,88.7,89.0,89.3,89.6,89.8,90.1,90.4,90.7,91.0,91.2,91.5,91.8,92.1] Derivative = [0.0495,0.0507,0.0525,0.0548,0.0570,0.0579,0.0579,0.0574,0.0574,0.0576,0.0581,0.0587,0.0593,0.0592,0.0584,0.0580,0.0579,0.0580,0.0582,0.0588,0.0592,0.0594,0.0588,0.0581,0.0578,0.0579,0.0580,0.0579,0.0582,0.0581,0.0579,0.0574,0.0571,0.0563,0.0548,0.0538,0.0536,0.0540,0.0544,0.0551,0.0556,0.0551,0.0542,0.0535,0.0536,0.0542,0.0564,0.0623,0.0748,0.0982,0.1360,0.1897,0.2550,0.3228,0.3807,0.4177,0.4248,0.3966,0.3365,0.2558,0.1713,0.0971,0.0438,0.0140,0.0034,0.0028,0.0048,0.0058,0.0057,0.0050,0.0042,0.0038,0.0039,0.0041,0.0038,0.0031,0.0023,0.0017,0.0014,0.0012,0.0015,0.0019,0.0020,0.0018,0.0017,0.0015,0.0014,0.0014,0.0015,0.0014,0.0013,0.0011,0.0007,0.0004,0.0011,0.0105,0.0100,0.0096,0.0090,0.0084,0.0081,0.0077,0.0071,0.0066,0.0063,0.0064,0.0060,0.0057,0.0055,0.0054,0.0051,0.0047,0.0046,0.0042,0.0037,0.0035,0.0040,0.0043,0.0039,0.0032,0.0028,0.0028,0.0027,0.0029,0.0034,0.0038,0.0034,0.0027,0.0024,0.0021,0.0017,0.0015,0.0016,0.0015,0.0011,0.0008,0.0012,0.0019,0.0025,0.0027,0.0026,0.0019,0.0012,0.0010,0.0014,0.0016,0.0014,0.0010,0.0007,0.0007,0.0010,0.0017,0.0021,0.0020,0.0013,0.0012,0.0013,0.0014,0.0015,0.0018,0.0017,0.0012,0.0013,0.0018,0.0028,0.0031,0.0033,0.0027,0.0022,0.0015,0.0016,0.0022,0.0026,0.0026,0.0019,0.0012,0.0006,0.0007,0.0011,0.0016,0.0014,0.0010,0.0009,0.0012,0.0015,0.0014,0.0008,0.0001,-0.0003,0.0002] Category = ["a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b"] df = pd.DataFrame({"Temperature": Temperature, "Derivative": Derivative, "Category" : Category}) g = sns.factorplot(x="Temperature", y="Derivative", data=df, col="Category") g.set_xticklabels(step=10)
All the desired feature you describe suggest that using a factorplot here is absolutely the wrong choice. Instead use a normal matplotlib plot and then set the limits as usual, plt.xlim(60,95). import pandas as pd import matplotlib.pyplot as plt Temperature = [63.0,63.3,63.6,63.9,64.2,64.5,64.8,65.2,65.5,65.8,66.1,66.4,66.7,67.0,67.3,67.7,68.0,68.3,68.6,68.9,69.2,69.5,69.9,70.2,70.5,70.8,71.1,71.4,71.8,72.1,72.4,72.7,73.0,73.4,73.7,74.0,74.3,74.6,74.9,75.2,75.6,75.9,76.2,76.5,76.9,77.2,77.5,77.8,78.1,78.5,78.8,79.1,79.4,79.7,80.1,80.4,80.7,81.0,81.3,81.6,81.9,82.3,82.6,82.9,83.2,83.5,83.8,84.1,84.4,84.8,85.1,85.4,85.7,86.0,86.3,86.6,86.9,87.2,87.5,87.8,88.1,88.4,88.7,89.0,89.3,89.6,89.8,90.1,90.4,90.7,91.0,91.2,91.5,91.8,92.1,63.0,63.3,63.6,63.9,64.2,64.5,64.8,65.2,65.5,65.8,66.1,66.4,66.7,67.0,67.3,67.7,68.0,68.3,68.6,68.9,69.2,69.5,69.9,70.2,70.5,70.8,71.1,71.4,71.8,72.1,72.4,72.7,73.0,73.4,73.7,74.0,74.3,74.6,74.9,75.2,75.6,75.9,76.2,76.5,76.9,77.2,77.5,77.8,78.1,78.5,78.8,79.1,79.4,79.7,80.1,80.4,80.7,81.0,81.3,81.6,81.9,82.3,82.6,82.9,83.2,83.5,83.8,84.1,84.4,84.8,85.1,85.4,85.7,86.0,86.3,86.6,86.9,87.2,87.5,87.8,88.1,88.4,88.7,89.0,89.3,89.6,89.8,90.1,90.4,90.7,91.0,91.2,91.5,91.8,92.1] Derivative = [0.0495,0.0507,0.0525,0.0548,0.0570,0.0579,0.0579,0.0574,0.0574,0.0576,0.0581,0.0587,0.0593,0.0592,0.0584,0.0580,0.0579,0.0580,0.0582,0.0588,0.0592,0.0594,0.0588,0.0581,0.0578,0.0579,0.0580,0.0579,0.0582,0.0581,0.0579,0.0574,0.0571,0.0563,0.0548,0.0538,0.0536,0.0540,0.0544,0.0551,0.0556,0.0551,0.0542,0.0535,0.0536,0.0542,0.0564,0.0623,0.0748,0.0982,0.1360,0.1897,0.2550,0.3228,0.3807,0.4177,0.4248,0.3966,0.3365,0.2558,0.1713,0.0971,0.0438,0.0140,0.0034,0.0028,0.0048,0.0058,0.0057,0.0050,0.0042,0.0038,0.0039,0.0041,0.0038,0.0031,0.0023,0.0017,0.0014,0.0012,0.0015,0.0019,0.0020,0.0018,0.0017,0.0015,0.0014,0.0014,0.0015,0.0014,0.0013,0.0011,0.0007,0.0004,0.0011,0.0105,0.0100,0.0096,0.0090,0.0084,0.0081,0.0077,0.0071,0.0066,0.0063,0.0064,0.0060,0.0057,0.0055,0.0054,0.0051,0.0047,0.0046,0.0042,0.0037,0.0035,0.0040,0.0043,0.0039,0.0032,0.0028,0.0028,0.0027,0.0029,0.0034,0.0038,0.0034,0.0027,0.0024,0.0021,0.0017,0.0015,0.0016,0.0015,0.0011,0.0008,0.0012,0.0019,0.0025,0.0027,0.0026,0.0019,0.0012,0.0010,0.0014,0.0016,0.0014,0.0010,0.0007,0.0007,0.0010,0.0017,0.0021,0.0020,0.0013,0.0012,0.0013,0.0014,0.0015,0.0018,0.0017,0.0012,0.0013,0.0018,0.0028,0.0031,0.0033,0.0027,0.0022,0.0015,0.0016,0.0022,0.0026,0.0026,0.0019,0.0012,0.0006,0.0007,0.0011,0.0016,0.0014,0.0010,0.0009,0.0012,0.0015,0.0014,0.0008,0.0001,-0.0003,0.0002] Category = ["a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b"] df = pd.DataFrame({"Temperature": Temperature, "Derivative": Derivative, "Category" : Category}) for n, data in df.groupby("Category"): plt.plot(data["Temperature"],data["Derivative"] , marker="o", label=n) plt.xlim(60,95) plt.legend() plt.show() Or if subplots are desired, fig,axes = plt.subplots(ncols=len(df["Category"].unique()), sharey=True) for ax,(n, data) in zip(axes,df.groupby("Category")): ax.plot(data["Temperature"],data["Derivative"] , marker="o", label=n) ax.set_title("Category {}".format(n)) ax.set_xlim(60,95) plt.show() Finally, you may use a seaborn FacetGrid onto which you plot your data with a plot: g = sns.FacetGrid(df, col="Category") g.map(plt.plot, "Temperature", "Derivative",marker="o",) for ax in g.axes.flat: ax.set_xlim(60,95) plt.show()