31

It's probably a trivial question, but I am trying to plot a bar chart with matplotlib and with rotated text on the x axis. The code I'm using is shown below:

fig = plt.figure()

x_labels_list = []

for i in range(0, pow(2, N)):
    x_labels_list.append(str(f(i)))  # The function f() converts i to a binary string

ax = plt.subplot(111)
width = 1.0
bins = map(lambda x: x-width, range(1,pow(2,N)+1))
ax.bar(bins, my_data, width=width)
ax.set_xticks(map(lambda x: x-width/2, range(1,pow(2,N)+1)))
ax.set_xticklabels(x_labels_list, rotation=90, rotation_mode="anchor", ha="right")

It works perfectly, but I obtain an annoying white space on the right of the x axis, as shown by the red ellipse in the following picture:

enter image description here

Do you know how I can remove it? Thanks in advance!

1
  • Can you post a working example which replicates the figure you're showing? Commented Nov 26, 2013 at 13:04

1 Answer 1

38

Try calling plt.xlim() with the number of bins, e.g.

plt.xlim([0,bins.size])

Here is an example:

#make some data
N = 22
data = np.random.randint(1,10,N)
bin = np.arange(N)  
width = 1

#plot it
ax = plt.subplot(111)
ax.bar(bin, data, width, color='r')
plt.show()

No plt.xlim() output:

no xlim

Now plot it with plt.xlim using the number of bins to define the size:

#plot it
ax = plt.subplot(111)
ax.bar(bin, data, width, color='r')
plt.xlim([0,bin.size])
plt.show()

Results it:

with xlim

There may be a better way, but this should work for you.

Sign up to request clarification or add additional context in comments.

2 Comments

You can also use plt.axis('tight') to accomplish the same thing without having to worry about specifying the number of bins. Also, if you'd prefer a bit of space at the edges, use plt.margins(0.05, 0) to pad the limits with 5% of the data range in the x-direction and 0% in the y-direction.
@Joe Kington: Yes, I have tried also your solution, and it works!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.