0

I have created a dataframe 'predictions' with columns datetime, home_team, home_win, draw, away_win, away_team
datetime: Date of the match home_team: Name of Home Team home_win: Home win probability draw: Draw Probability away_win: Away team win probability away_team: Name of away team

Then I plotted the graph mentioned in the image using the code mentioned below:

But I am not able to get two column names on the left y-axis

My desired output is
datetime: Home Team - Home win% - Draw% - Away Team% - Away Team format

I tried using ax.set_yticklabels(predictions['datetime']) but it only keeps the datetime and removes the home_team name.

EPL Weekend Prediction

#Plotting the weekend prediction in Home Team - Home win% - Draw% - Away Team% - Away Team format

#https://stackoverflow.com/questions/34076177/matplotlib-horizontal-bar-chart-barh-is-upside-down
# the simplest solution for this problem is to reverse the pandas dataframe before plotting
predictions = predictions.iloc[::-1]

colors = sns.color_palette("pastel", n_colors=len(predictions['Home_Team']))
customPalette = sns.set_palette(sns.color_palette(colors))


colormap=cmap1,figsize=(10, 6))
ax = predictions.plot.barh(x="Home_Team", y=["home_win", "draw", "away_win"], stacked=True, colormap=customPalette,figsize=(10, 8))

ax2 = ax.twinx() #twinx() is used to have 2 different Y axes with same X axis

predictions.plot.barh(x="Away_Team", y=["home_win", "draw", "away_win"], ax=ax2,stacked=True, colormap=customPalette,figsize=(10, 8))


ax.set_title('%s Weekend Prediction : '%league_url  + today.strftime("%d-%b-%Y") + ' to ' + end_date.strftime("%d-%b-%Y"), fontsize = 18)

ax.set_ylabel('Home Team', fontsize = 14)


ax2.set_ylabel('Away Team', fontsize = 14)
#ax.set_yticklabels(y_labels_home_win)

SMALL_SIZE = 12
MEDIUM_SIZE = 14
BIGGER_SIZE = 22

plt.rc('font', size=SMALL_SIZE)          # controls default text sizes
plt.rc('xtick', labelsize=SMALL_SIZE)    # fontsize of the tick labels
plt.rc('ytick', labelsize=SMALL_SIZE)    # fontsize of the tick labels
plt.rc('legend', fontsize=SMALL_SIZE)    # legend fontsize



# move the legend
ax.legend(bbox_to_anchor=(1.25, 1), loc='upper left', borderaxespad=0.)

# Remove top and right borders
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.spines['left'].set_visible(False)
ax.spines['bottom'].set_visible(False)

ax2.spines['top'].set_visible(False)
ax2.spines['right'].set_visible(False)
ax2.spines['left'].set_visible(False)
ax2.spines['bottom'].set_visible(False)

#https://stackoverflow.com/questions/37039685/hide-axis-values-but-keep-axis-tick-labels-in-matplotlib
rects = ax.patches  
    
for p in ax.patches:
    width, height = p.get_width(), p.get_height()
    x, y = p.get_xy() 
    ax.text(x+width/2, 
            y+height/2, 
            '{:.0%}'.format(width), 
            ha ='center', 
            va ='center')   

for p in ax2.patches:
    width, height = p.get_width(), p.get_height()
    x, y = p.get_xy() 
    ax2.text(x+width/2, 
            y+height/2, 
            '{:.0%}'.format(width), 
            ha ='center', 
            va ='center')   
ax2.get_legend().remove()
    
# Turn off tick labels
#ax.set_yticklabels([])
#ax.set_xticklabels([])
#plt.xticks([])
ax.set_xticks([])
ax2.set_xticks([])

Is there a way of doing it? I can create a new column datetime: home_team by concatenating datetime and home_team columns to get the desired output, but that will disorient the dataframe.

Is there a simpler way of using two columns on a single axis?

Mr. T
  • 11,960
  • 10
  • 32
  • 54
  • I don't quite understand your question. I would help to have a [Minimal, Complete, and Verifiable example](https://stackoverflow.com/help/mcve) that includes a toy dataset (refer to [How to make good reproducible pandas examples](https://stackoverflow.com/questions/20109391/how-to-make-good-reproducible-pandas-examples)), and a picture of what your desired output should look like – Diziet Asahi Dec 19 '20 at 22:37
  • Do share the data frame you were using along with the desired output. This would help others to try and resolve your query. – Vidyadhar Rao Dec 20 '20 at 01:22

0 Answers0