2013-04-07 110 views
3

我想要標記,例如帶+,或者x或者的空方塊,或者裏面有可調厚度的任何東西;實際上就像Origin中的那些。看起來它需要定製。matplotlib自定義標記

代碼示例:

import numpy as np 
import matplotlib.pyplot as plt 

plt.plot(np.arange(10) ** 2, 
     'k-', 
     marker = 's', 
     mfc = 'none', 
     lw = 2, 
     mew = 2, 
     ms = 20) 
plt.show() 

回答

6

使用text,您可以使用您的字體可用的任何字符。儘管你需要自己遍歷它們,但我認爲你不能持續控制它們的線寬(當然,如果可以的話,你可以選擇'bold'等)。

enter image description here

from numpy import * 
import matplotlib.pyplot as plt 

symbols = [u'\u2B21', u'\u263A', u'\u29C6', u'\u2B14', u'\u2B1A', u'\u25A6', u'\u229E', u'\u22A0', u'\u22A1', u'\u20DF'] 

x = arange(10.) 
y = arange(10.) 

plt.figure() 
for i, symbol in enumerate(symbols): 
    y2 = y + 4*i 
    plt.plot(x, y2, 'g') 
    for x0, y0 in zip(x, y2): 
     plt.text(x0, y0, symbol, fontname='STIXGeneral', size=30, va='center', ha='center', clip_on=True) 

plt.show() 

您還可以使用plot直接,雖然渲染看起來並不那麼好,你沒有過的人物相當多的控制。

plt.figure() 
for i, symbol in enumerate(symbols): 
    y2 = y + 4*i 
    plt.plot(x, y2, 'g') 
    marker = "$%s$" % symbol 
    plt.plot(x, y2, 'k', marker=marker, markersize=30) 

enter image description here

+0

看起來不錯,但這是一個可惜使用pyplot.text(),而不是pyplot.plot()來繪圖。 – user1850133 2013-04-08 18:56:47

+0

您可以使用繪圖(請參閱編輯),但由於某些原因我不理解,渲染效果並不理想。如果是我,我只需製作一個名爲'plot_text'的函數來迭代'text'。 – tom10 2013-04-08 19:49:14

+0

我試過plt.plot(np.arange(10)** 2,marker = u'\ u2B21');它會返回一個錯誤消息:UnicodeEncodeError:'ascii'編解碼器無法對位置0中的字符u'\ u2b21'進行編碼:序號不在範圍內(128) – user1850133 2013-04-14 17:45:16

3

這是你想要的嗎?

Custom markers by overplotting

我這樣做,通過由此overplotting:

import numpy as np 
import matplotlib.pyplot as plt 

plt.plot(np.arange(10) ** 2, 
     'k-', 
     marker = 's', 
     mfc = 'none', 
     lw = 2, 
     mew = 2, 
     ms = 20) 

plt.plot(np.arange(10) ** 2 + 20, 
     'k-', 
     marker = '+', 
     mfc = 'none', 
     lw = 2, 
     mew = 2, 
     ms = 20) 
plt.plot(np.arange(10) ** 2 + 20, 
     'k-', 
     marker = 's', 
     mfc = 'none', 
     lw = 2, 
     mew = 2, 
     ms = 20) 
plt.show() 
+1

結果看起來不錯,但我不喜歡你的解決方案! – user1850133 2013-04-08 18:52:46

+0

是的,這是一個黑客。 @ tom10的解決方案是更好:) – gauden 2013-04-08 18:54:26