2010-03-23 48 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