我想你想要的東西更像是
x y label
1 12 A
2 13 A
3 15 A
4 29 A
5 23 B
6 23 B
7 23 B
8 90 C
9 83 C
和而不是重複標籤,您希望每個組都有一箇中心標籤?
from itertools import groupby
import matplotlib.pyplot as plt
data = [
('A', 12),
('A', 13),
('A', 15),
('A', 29),
('B', 23),
('B', 23),
('B', 23),
('C', 90),
('C', 83)
]
labels,ys = zip(*data)
xs = range(len(ys))
def centered(val, ln, empty=''):
half = (ln - 1) // 2
return (val if i==half else empty for i in xrange(ln))
def centered_labels(labels):
return [v for val,grp in groupby(labels) for v in centered(val, len(list(grp)))]
fig = plt.figure()
ax = fig.add_subplot(111)
ax.set_xticklabels(centered_labels(labels))
ax.plot(xs, ys, 'b-', linewidth=3)
結果
![enter image description here](https://i.stack.imgur.com/z0VUZ.png)
你能發佈一些代碼嗎?使它更容易找到錯誤。 – Mizipzor
我不明白你的問題。你顯示一個示例圖,但是表明你想要繪製多個y值。你的意思是多條線路,其中A的第一個值被連接到B的第一個值,等等?或者你的意思是你想要在同一個x上繪製所有三個y值的點?或者你的情節應該是一個平均的或某種東西? – catchmeifyoutry