My code so far gives me something that looks like this:

I am wanting to write in the bars themselves if possible to get something like this:

Here’s my base code so far:
I’d like to put Disease into the bar
import matplotlib
from matplotlib import pyplot as plt
import pandas as pd
import numpy as np
x = [u'Rimegepant',u'Rimegepant',u'Zavegepant',u'Zavegepant',u'Troriluzole',u'Troriluzole',u'Troriluzole',u'Verdiperstat',u'Verdiperstat']
y = [4,3,3,3,2,3,3,3,3]
Disease = ['Acute Treatment of Migraine','Preventive Treatment of Migraine','Acute and Preventive Migraine','Lung Inflammation COVID-19',"Alzheimer's Disease", "OCD", "Spinocerebellar Ataxia", "Multiple System Atrophy", "Amyotrophic Lateral Sclerosis"]
fig, ax = plt.subplots()
width = 0.75 # the width of the bars
ind = np.arange(len(y)) # the x locations for the groups
ax.barh(ind, y, width, color="green", align='edge')
ax.set_yticks(ind+width/2)
ax.set_yticklabels(x, minor=False)
plt.xticks(np.arange(5),('Pre-clinical','Phase I','Phase II','Phase III', 'Approved'))
plt.margins(0,0.05)
plt.title('BHVN')
plt.ylabel('Drug')
plt.show()
Advertisement
Answer
You can add text to the ax via matplotlib as ax.text().
If you add
for bar, disease in zip(ax.patches, Disease[::-1]):
ax.text(0.1, bar.get_y()+bar.get_height()/2, disease, color = 'white', ha = 'left', va = 'center')
just before plt.show() in your code, you’ll get:
Note, I had to reverse your Disease list (using [::-1]) for text to appear the way you have in your image, otherwise Amyotrophic Lateral Sclerosis is on top, and Acute Treatment of Migraine on the bottom.
Function generic form comes in plt.text(x, y, text), so you see I offset x by 0.1 and get y from the bar patch.
For extra information on the function, you can check out matplotlib documentation here
