user2024449
user2024449

Reputation:

Placing text values on axis instead of numeric values

I've created a simple word frequency calculator in python 3.2. Now I want to create a plot to visualize the results. The x-axis would contain frequency results and I want to add the most frequent words to the y-axis. How can I add text instead of numbers to a pylab axis? Thanks in advance!

Upvotes: 14

Views: 21703

Answers (2)

Walid Bousseta
Walid Bousseta

Reputation: 1469

I have used the following line;

axis.set_yticklabels(['{:,.0f} $'.format(i) for i in np.arange(0, 350, 50)])

it works but it's throw a UserWarning FixedFormatter should only be used together with FixedLocator I couldn't find any satisfying solution so I just added a warning ignore filter

import warnings
warnings.filterwarnings('ignore')

also this will work but the warning still;

# An array of the values displayed on the y-axis (150, 175, 200, etc.)
ticks = axis.get_yticks()
# Format those values into strings beginning with dollar sign
new_labels = ['${}'.format(int(amt)) for amt in ticks]
# Set the new labels
axis.set_yticklabels(new_labels)

Upvotes: 0

BergmannF
BergmannF

Reputation: 10255

I am going to assume, that because you want to display the frequencies on x-axis instead of the y-axis, that you want a horizontal bar-plot.

Adjusting the labels to print on the x-axis instead simply requires you to use the xticks command:

import matplotlib.pyplot as plt
import numpy as np
x_values = [0.1, 0.3, 0.4, 0.2]
y_values = ["word 1", "word 2", "word 3", "word 4"]
y_axis = np.arange(1, 5, 1)

plt.barh(y_axis, x_values, align='center')
plt.yticks(y_axis, y_values)
plt.show()

This will result in the following chart (but there probably is a better way that will not require you to fiddle with spacing where to display you y-labels). enter image description here

Actually thinking a bit more about it - I think something like the following is more what you had in mind (I think I should stop now, as it inevitably shows that I am laughably inexperienced using matplotlib):

import matplotlib.pyplot as plt
import numpy as np
y_values = [0.1, 0.3, 0.4, 0.2]
text_values = ["word 1", "word 2", "word 3", "word 4"]
x_values = np.arange(1, len(text_values) + 1, 1)

plt.bar(x_values, y_values, align='center')
# Decide which ticks to replace.
new_ticks = ["word for " + str(y) if y != 0.3 else str(y) for y in y_values]
plt.yticks(y_values, new_ticks)
plt.xticks(x_values, text_values)
plt.show()

enter image description here

Upvotes: 19

Related Questions