Python 在matplotlib中打印字符串值

Python 在matplotlib中打印字符串值,python,matplotlib,Python,Matplotlib,我正在使用matplotlib作为绘图应用程序。我试图创建一个以字符串作为X值的图形。但是,使用绘图函数需要X的数值 如何使用字符串X值?我知道有一种方法是有效的,尽管我认为创建自定义符号是实现这一点的更自然的方法 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

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


如何使用字符串X值?

我知道有一种方法是有效的,尽管我认为创建自定义符号是实现这一点的更自然的方法

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中有一种更直接的方法可以做到这一点(不使用美工)。

为什么不让x值成为一些自动递增的数字,然后更改标签


--jed

我找不到一个方便的方法来实现这一点,所以我求助于这个小助手函数

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_类(data[“class”]、data[“y”]、marker=“+”)
应该可以正常工作。

您应该尝试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()

在上的matplotlib 2.1中,可以在打印函数中使用字符串

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

plt.plot(x, y)

plt.show()


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

谢谢您的回复。我发现了这个类:matplotlib.ticker.FixedFormatter(seq),它允许您将字符串集指定为序列。这是一个被否决的,但我对它进行了否决,因为它是迄今为止最紧凑的解决方案,在大多数情况下,不会破坏任何其他解决方案。