在matplotlib中绘制字符串值

时间:2010-03-23 03:47:45

标签: python matplotlib

我正在使用matplotlib作为图形应用程序。我正在尝试创建一个字符串作为X值的图表。但是,使用plot函数需要X的数值。

如何使用字符串X值?

5 个答案:

答案 0 :(得分:10)

你应该尝试xticks

import pylab

names = ['anne','barbara','cathy']
counts = [3230,2002,5456]

pylab.figure(1)
x = range(3)
pylab.xticks(x, names)
pylab.plot(x,counts,"g")

pylab.show()

答案 1 :(得分:7)

从matplotlib 2.1开始,您可以在绘图函数中使用字符串。

import matplotlib.pyplot as plt
x = ["Apple", "Banana", "Cherry"]
y = [5,2,3]

plt.plot(x, y)

plt.show()

enter image description here

请注意,为了保留绘图上输入字符串的顺序,您需要使用matplotlib> = 2.2。

答案 2 :(得分:3)

为什么不将x值设为自动递增数字,然后更改标签?

- JED

答案 3 :(得分:1)

这是我认识的一种方式,虽然我认为创建自定义符号是一种更自然的方法。

from matplotlib import pyplot as PLT

# make up some data for this example
t = range(8)
s = 7 * t + 5
# make up some data labels which we want to appear in place of the symbols
x = 8 * "dp".split()
y = map(str, range(8))
data_labels = [ i+j for i, j in zip(x, y)]
fig = PLT.figure()
ax1 = fig.add_subplot(111)
ax1.plot(t, s, "o", mfc="#FFFFFF")     # set the symbol color so they are invisible
for a, b, c in zip(t, s, data_labels) :
    ax1.text(a, b, c, color="green")

PLT.show()

所以这会把“dp1”,“dp2”,...代替每个原始数据符号 - 本质上是创建自定义“文本符号”,但我必须再次相信有更直接的方法来做到这一点在matplotlib(不使用艺术家)。

答案 4 :(得分:0)

我找不到一种方便的方法来实现这一点,所以我使用了这个小辅助函数。

import matplotlib.pyplot as p
def plot_classes(x, y, plotfun=p.scatter, **kwargs):
    from itertools import count
    import numpy as np
    classes = sorted(set(x))
    class_dict = dict(zip(classes, count()))
    class_map = lambda x: class_dict[x]
    plotfun(map(class_map, x), y, **kwargs)
    p.xticks(np.arange(len(classes)), classes)

然后,调用plot_classes(data["class"], data["y"], marker="+")应该按预期工作。