I am having trouble plotting a lineplot and barplot (with the same inexes) on the same seaborn plot using data from the ‘results’ dataframe which I will show below (with ‘a’ data, ‘b’ data, and ‘percentiles’) in Python.
When I plot them separately, I am able to plot the lineplot fine (using ‘a’ data), however, the x-axis values of the barplot I am trying to plot (using 'b' data) does not show up. Strangely, I can plot a lineplot without any problem using the same data I am trying to plot the barplot with (‘b’ data)
When I try to plot them on the same plot, the x-axis starts from a date that is not even present in the ‘results’ dataframe.
I have even tried exporting the results dataframe as a csv and re-importing it to see if that works, but I run into the same problems.
What I would like to achieve:
- Plotting the ‘a’ data as a lineplot, and the ‘b’ data as a bar plot on the same seaborn plot with different y-axes
- I would like to have the same number of y-axis tickers and for the 0’s of both the y-axes to be aligned
- Finally, I would like the colour of the barplot to be dependent on whether the percentile column indicated ‘low’, ‘mid’, ‘high’ (a different colour for each of these)
# Here is the 'a' and 'b' data that I start with
a = pd.read_csv(r'a.csv',sep=",", parse_dates=['date'], dayfirst=True, index_col=0)
b = pd.read_csv(r'b.csv',sep=",", parse_dates=['date'], dayfirst=True, index_col=0)
# After manipulating the data, here is the 'results' DataFrame I end up with
# Plotting them separately
# Plotting lineplot using 'a' column from 'results' DataFrame
sns.lineplot(data=result.iloc[:, 0], color="g")
# Plotting barplot using 'b' column from 'results' DataFrame
b_plot = sns.barplot(data=result, x=result.index, y=result.iloc[:, 2], color="b")
b_plot.xaxis.set_major_locator(md.YearLocator(base=4))
b_plot.xaxis.set_major_formatter(md.DateFormatter('%Y'))
b_plot.margins(x=0)
# Attempting to plot the lineplot and barplot on the same plot
matplotlib.rc_file_defaults()
ax1 = sns.set_style(style=None, rc=None)
fig, ax1 = plt.subplots(figsize=(12,6))
a_plot = sns.lineplot(data=result.iloc[:, 0], color="g", ax=ax1)
ax2 = ax1.twinx()
b_plot = sns.barplot(data=result, x=result.index, y=result.iloc[:, 2], color="b", ax=ax2)
b_plot.xaxis.set_major_locator(md.YearLocator(base=4))
b_plot.xaxis.set_major_formatter(md.DateFormatter('%Y'))
b_plot.margins(x=0)
lineplot and barplot on same plot
EDIT: I have answered the questions below