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()