2010-03-23 47 views
4

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

如何使用字符串X值?

回答

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中执行此操作的方式(不使用艺术家)。

+0

谢谢你的回复。我发现这个:class matplotlib.ticker.FixedFormatter(seq),它可以让你指定一组字符串作为序列 – user299582 2010-03-23 21:05:56

3

为什么不只是让x值有些自动递增的数字,然后改变标签?

--jed

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="+")应该按预期工作。

8

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

从你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

+0

这是downvoted,但我upvoted它,因为它是迄今为止最紧凑的解决方案,在大多数情况下,赢得别破坏别的东西。 – RickG 2018-01-24 07:20:36