Reputation: 5498
Please see attached image
I have the source code as follows in python
def plotBarChartH(self,data):
LogManager.logDebug('Executing Plotter.plotBarChartH')
if type(data) is not dict:
LogManager.logError('Input data parameter is not in right format. Need a dict')
return False
testNames = []
testTimes = []
for val in data:
testNames.append(val)
testTimes.append(data[val])
matplotlib.rcParams.update({'font.size': 8})
yPos = np.arange(len(testNames))
plt.barh(yPos, testTimes, height=0.4, align='center', alpha=0.4)
plt.yticks(yPos, testNames)
plt.xlabel('time (seconds)')
plt.title('Test Execution Times')
savePath = os.path.join(ConfigurationManager.applicationConfig['robotreportspath'],'bar.jpg')
plt.savefig(savePath)
plt.clf()
return True
The bar looks fine but I have two issues
How can the text in y-axis can be shown in full? I mean some text are cut-off and i want to extend the space in occupies so that it can be displayed in full.
Can I Increase the whole plot area on which the charts are drawn? I want to increase the width of of plot area so that image looks bit bigger
thanks
Upvotes: 3
Views: 10084
Reputation: 352
As of 2020: simply calling .autoscale
on plt should work:
You can do that right before plt.show()
plt.autoscale()
OR
plt.autoscale(enable=True, axis='y', tight=None)
Upvotes: 2
Reputation: 4219
You could use plt.axes
to control where the axes are plotted so you can leave more space in the left area. An example could be plt.axes([0.2,0.1,0.9,0.9])
.
I do not understand what you mean.
plt.figure
(e.g., plt.figure(figsize = (6,12))
)plt.[xy]lim
. For example, if you want more blank space in the right area you could use plt.xlim(200, 600)
.plt.axes
(See question 1 above).Upvotes: 1
Reputation: 25548
You can set the figure size (in inches) explicitly when you create a Figure
object with plt.figure(figsize=(width,height)), and call
plt.tight_layout()` to make room for your tick labels as follows:
import matplotlib.pyplot as plt
names = ['Content Channels','Kittens for Xbox Platform','Tigers for PS Platform',
'Content Series', 'Wombats for Mobile Platform']
values = [260, 255, 420, 300, 270]
fig = plt.figure(figsize=(10,4))
ax = fig.add_subplot(111)
yvals = range(len(names))
ax.barh(yvals, values, align='center', alpha=0.4)
plt.yticks(yvals,names)
plt.tight_layout()
plt.show()
Upvotes: 5
Reputation: 13216
\n
in your string (or use something like "\n".join(wrap(longstring,60)
as in this answer).
You can adjust you plot area with fig.subplots_adjust(left=0.3)
to ensure the whole string is shown,Example:
import matplotlib.pyplot as plt
import numpy as np
val = 1000*np.random.rand(5) # the bar lengths
pos = np.arange(5)+.5 # the bar centers on the y axis
name = ['name','really long name here',
'name 2',
'test',
'another really long \n name here too']
fig, ax = plt.subplots(1,1)
ax.barh(pos, val, align='center')
plt.yticks(pos, name)
fig.subplots_adjust(left=0.3)
plt.show()
which gives
figsize
argument to subplots or figure.Example:
fig, ax = plt.subplots(1,1, figsize=(12,8))
the amount of space in the figure can be adjusted by setting axis based on the data,
ax.set_xlim((0,800))
or automated with ax.set_xlim((0,data.max()+200))
.
Upvotes: 2