使用numpy可以使用邏輯索引。
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
x = np.array([10000, 1000, 100, 10, 1, 5, 50, 500, 5000, 50000])
y = np.array([-10000, -1000, -100, -10, -1, 5, 50, 500, 5000, 50000])
ax.plot(x,abs(y),'+-b',label='all data')
ax.plot(abs(x[y<= 0]),abs(y[y<= 0]),'o',markerfacecolor='none',
markeredgecolor='r',
label='we are negative')
ax.set_xscale('log')
ax.set_yscale('log')
ax.legend(loc=0)
plt.show()
的主要特點是首先繪製所有絕對y
- 值,然後重新繪製那些原本否定的,因爲空心圓他們挑出。這第二步使用邏輯索引x[y<=0]
和y[y<=0]
來挑選那些爲負數的y
數組中的那些元素。
上面的例子給你這個數字:
如果你真的有兩個不同的數據集,下面的代碼會給你同樣的圖如上:
x1 = np.array([1, 10, 100, 1000, 10000])
x2 = np.array([5, 50, 500, 5000, 50000])
y1 = np.array([-1, -10, -100, -1000, -10000])
y2 = np.array([5, 50, 500, 5000, 50000])
x = np.concatenate((x1,x2))
y = np.concatenate((y1,y2))
sorted = np.argsort(y)
ax.plot(x[sorted],abs(y[sorted]),'+-b',label='all data')
ax.plot(abs(x[y<= 0]),abs(y[y<= 0]),'o',markerfacecolor='none',
markeredgecolor='r',
label='we are negative')
在這裏,您首先使用np.concatenate
來組合x
- 和y
-陣列。然後,您採用np.argsort
來排序y
-array,以確保在繪圖時不會出現過多的曲折線。當您調用第一個繪圖時,可以使用該索引數組(sorted
)。由於第二個繪圖僅繪製符號但沒有連接線,因此您不需要在此排序數組。
非常感謝!這就是我一直在尋找的! – user2669155 2015-03-01 03:18:16