将文本值放在轴而不是数值上

时间:2013-06-12 20:30:33

标签: python matplotlib

我在python 3.2中创建了一个简单的单词频率计算器。现在我想创建一个可视化结果的图。 x轴将包含频率结果,我想将最频繁的单词添加到y轴。如何在pylab轴上添加文本而不是数字?提前谢谢!

2 个答案:

答案 0 :(得分:9)

我将假设,因为你想要显示频率 x轴而不是y轴,你想要一个水平条形图。

调整要在x轴上打印的标签只需要您 使用xticks命令:

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

这将产生以下图表(但可能有更好的方法 这不需要你摆弄间距,在哪里显示y标签)。 enter image description here

实际上更多地考虑它 - 我认为以下内容更像你的想法(我想我现在应该停止,因为它不可避免地表明我使用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

答案 1 :(得分:0)

我使用了以下行;

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

它可以工作,但会引发 UserWarning FixedFormatter should only be used together with FixedLocator 我找不到任何令人满意的解决方案,所以我只是添加了一个警告忽略过滤器

import warnings
warnings.filterwarnings('ignore')

这也可以,但警告仍然存在;

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