Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

matplotlib plot set x_ticks

How would I set the x_axis labels at the indices 1,2,3....n to be something different.

lam_beta = [(lam1,beta1),(lam1,beta2),(lam1,beta3),....(lam_n,beta_n)]
chunks = [chunk1,chunk2,...chunk_n]
ht_values_per_chunk = {chunk1:[val1,val2,...],chunk2:[val1,val2,val3,.....]...}
color='rgbycmk'
     j=0
     for chunk in chunks:
        plt.plot([hr_values_per_chunk[chunk][i] for i,item in enumerate(lam_beta)],[i for i,item in enumerate(lam_beta)],color=j%len(color))
        j+=1

     plt.set_xticks([i for i,item in enumerate(lam_beta)])
     plt.set_xticklabels([item for item in lam_beta],rotation='vertical')
     plt.show()

Error:

AttributeError: 'module' object has no attribute 'set_xticks'

Here I am unable to set the values of the lambda_beta tuple to be the values of each of the ticks on the x-axis as it say plt has no such method. How would I be able to achieve this for plt? I used xticks because this is how I had done it while generating a histogram in matplotlib. Any help would be appreciated. Thanks in advance!

like image 629
anonuser0428 Avatar asked Dec 02 '13 18:12

anonuser0428


People also ask

What is the use of Xticks () and Yticks () in plotting?

You can use the xticks() and yticks() functions and pass in an array denoting the actual ticks. On the X-axis, this array starts on 0 and ends at the length of the x array. On the Y-axis, it starts at 0 and ends at the max value of y . You can hard code the variables in as well.


1 Answers

set_xticks and set_xticklabels are axes methods, not functions in the plt module namespace. This is the meaning of the error message, 'module' object has no attribute 'set_xticks'.

Moreover,

[i for i,item in enumerate(lam_beta)]

can be simplified to

range(len(lam_beta))

and

[item for item in lam_beta]

can be simplified to

lam_beta

A convenient way to get your hands on the axes is to call plt.subplots:

So:

fig, ax = plt.subplots()
...
ax.set_xticks(range(len(lam_beta)))
ax.set_xticklabels(lam_beta, rotation='vertical')

ax is an Axes object. Calling Axes methods is the object-oriented approach to using matplotlib.


Alternatively, you could use the Matlab-style pylab interface by calling plt.xticks. If we define

loc = range(len(lam_beta))
labels = lam_beta

then

plt.xticks(loc, labels, rotation='vertical')

is equivalent to

fig, ax = plt.subplots()
ax.set_xticks(loc)
ax.set_xticklabels(labels, rotation='vertical')

plt.xticks sets the tick locations and labels to the current axes.


The list comprehension

[hr_values_per_chunk[chunk][i] for i,item in enumerate(lam_beta)]

could be simplified to

hr_values_per_chunk[chunk][:len(lam_beta)]

And you could eschew setting the color parameter for each call to ax.plot by using ax.set_color_cycle:

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
lam_beta = [(lam1,beta1),(lam1,beta2),(lam1,beta3),....(lam_n,beta_n)]
chunks = [chunk1,chunk2,...chunk_n]
ht_values_per_chunk = {chunk1:[val1,val2,...],chunk2:[val1,val2,val3,.....]...}
color='rgbycmk'
ax.set_color_cycle(colors)

for chunk in chunks:
    vals = hr_values_per_chunk[chunk][:len(lam_beta)]
    ax.plot(vals, range(len(lam_beta)))

ax.set_xticks(range(len(lam_beta)))
ax.set_xticklabels(lam_beta, rotation='vertical')
plt.show()
like image 128
unutbu Avatar answered Oct 09 '22 05:10

unutbu